From 5d4d236689cd784e195c731647bb824856e2db69 Mon Sep 17 00:00:00 2001
From: Lukas Oppermann
Date: Tue, 20 Oct 2026 20:01:41 +0200
Subject: [PATCH 1/4] docs: clarify prototype repository setup (#47)
## Why
Agents asked to set up a prototyping repository have to assemble
instructions from several guides. This makes local setup easy to confuse
with full guidance authoring, team preparation, or Hub deployment, and
decisions can get lost when moving to a fresh session.
## What changes
Add a canonical prototype repository setup guide and link it from the
README, agent instructions, and onboarding guides. It covers new and
existing targets, a paste-ready fresh-session handoff, verifying the
local starter, and continuing only to the requested outcome. The team
setup path now explicitly prepares and shares the reviewed baseline
before Hub setup. Installer and `/setup-skills` behavior stay unchanged.
The cross-session workflow has been reviewed against the existing
instructions but has not been exercised end to end in a fresh setup.
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: a303def4-749a-4a0e-9701-b7004ce1ef0e
---
AGENTS.md | 2 +-
README.md | 4 +-
docs/README.md | 2 +
docs/getting-started.md | 2 +-
docs/prototype-environment.md | 22 ++------
docs/prototype-repository-setup.md | 84 ++++++++++++++++++++++++++++++
starter/README.md | 2 +-
7 files changed, 97 insertions(+), 21 deletions(-)
create mode 100644 docs/prototype-repository-setup.md
diff --git a/AGENTS.md b/AGENTS.md
index 54114727..f452c368 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -35,7 +35,7 @@ Follow the [commit and PR conventions](CONTRIBUTING.md#commits-and-pull-requests
Hub releases use `hub-v*` tags. The starter follows `main` and has no separate release process. Start a new agent session after copying the starter so its local skills are discovered.
-To create a local prototype repository, download and review `scripts/install-starter.sh` with `curl`, then run it without `gh`, credentials, or a clone. From a local Replica checkout, use `scripts/create-prototype-repo.sh ` instead. Choose a new destination outside this checkout; either path creates an independent, uncommitted repository. Start a fresh agent session there before invoking its `/setup-skills` skill; the running session in this checkout will not discover the copied skills. Use an existing Node.js installation matching `engines.node` in [starter/package.json](starter/package.json). On macOS or Linux, obtain approval before installing nodenv, node-build, or Node.js or changing shell configuration; do not install them automatically.
+For requests to create a prototype repository or set up an existing repository for prototyping, read [prototype repository setup](docs/prototype-repository-setup.md) before acting. It owns target selection, starter installation, the fresh-session handoff, and the path from local preview to optional guidance, a team baseline, or Hub.
## Browser validation and Playwright fallback
diff --git a/README.md b/README.md
index 07220ffa..47fdfe3e 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,9 @@ Replica has four parts:
**Ready to make prototypes?** Follow [Get started with Replica](docs/getting-started.md) to install the GitHub Copilot app, add your team's prototyping repository, install the canvas, and create your first prototype. It also covers connecting to Hub, publishing, sharing and commenting, and adding controls.
-**Setting up Replica for your organization?** Follow [environment setup](docs/prototype-environment.md) to create your team's prototyping repository, add your design system and guidance, and deploy Hub. Your organization deploys and runs Hub on its own infrastructure. GitHub doesn't host it.
+**Creating a prototyping repository?** Point your agent at [prototype repository setup](docs/prototype-repository-setup.md). It covers new and existing repositories, getting the starter running locally, and continuing with product guidance or a shared team baseline. Local prototyping needs no Hub.
+
+**Setting up Replica for your organization?** Follow [environment setup](docs/prototype-environment.md) to add shared guidance and starting pages, deploy Hub, and connect publishing and team feedback. Your organization deploys and runs Hub on its own infrastructure. GitHub doesn't host it.
**How did setup go?** [Share your feedback](https://survey.alchemer.com/s3/9055055/Replica-feedback). It helps us make Replica easier to start.
diff --git a/docs/README.md b/docs/README.md
index 3e52667f..449de56f 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -6,6 +6,8 @@ These guides apply across the Replica monorepo. Start with [Contributing](../CON
[Get started with Replica](getting-started.md) walks new users through installing Copilot, adding their team's repository and canvas, creating and publishing a prototype, sharing feedback, and adding controls.
+[Set up a prototype repository](prototype-repository-setup.md) guides agents through new or existing repository targets, starter installation, the fresh-session handoff, and a verified local preview before optional product guidance or team setup.
+
[Set up and configure your prototype environment](prototype-environment.md) walks environment maintainers through creating the shared repository, adding design-system guidance and templates, deploying Hub with Docker, connecting builds, and inviting the team.
## Shared conventions
diff --git a/docs/getting-started.md b/docs/getting-started.md
index e67f5388..650cb9fd 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -2,7 +2,7 @@
Create an interactive prototype with GitHub Copilot, publish it to Replica Hub, and collect feedback from your team. This guide helps you join your organization's prototyping environment and create your first shared prototype.
-You can create and try prototypes locally without Hub. Publishing and team comments need a Hub hosted by your organization, a connected GitHub repository, and the repository's Replica build workflow. Ask your team for its Hub URL and repository, or follow [environment setup](prototype-environment.md) if you are setting these up for the first time.
+You can create and try prototypes locally without Hub. To create a repository rather than join an existing one, follow [prototype repository setup](prototype-repository-setup.md). Publishing and team comments need a Hub hosted by your organization, a connected GitHub repository, and the repository's Replica build workflow. Ask your team for its Hub URL and repository, or follow [environment setup](prototype-environment.md) if you are setting up shared hosting for the first time.
## 1. Download the GitHub Copilot app
diff --git a/docs/prototype-environment.md b/docs/prototype-environment.md
index 50926255..4cdde0d3 100644
--- a/docs/prototype-environment.md
+++ b/docs/prototype-environment.md
@@ -4,6 +4,8 @@ Give your organization a shared place to create prototypes with its own componen
This guide is for the people setting up and maintaining that environment, not everyone creating a prototype. It covers the starter repository, design-system guidance, Docker deployment, GitHub connection, and handoff to your team. If your organization already has an environment, follow [Get started with Replica](getting-started.md) to join it instead.
+For a local prototype repository without hosted publishing or comments, use [prototype repository setup](prototype-repository-setup.md). It does not require the server, domain, Docker, or GitHub App described below.
+
The linked technical guides own deployment configuration, access rules, and recovery procedures. Keep them open as you work through the steps below.
## Who should be involved
@@ -22,23 +24,9 @@ Install [GitHub CLI](https://cli.github.com/) on the author's computer for canva
## 1. Create the team's prototype repository
-Start with Replica Starter in a new directory, separate from your live product and the Replica source checkout. In a terminal on your computer, go to the folder where you keep projects and download the installer:
-
-```sh
-curl -fLSs https://raw.githubusercontent.com/github/replica/main/scripts/install-starter.sh -o install-starter.sh
-```
-
-Read the downloaded script before running it. Choose a new destination that does not already exist:
-
-```sh
-bash install-starter.sh my-prototype
-```
-
-The installer creates an independent, uncommitted Git repository with no remote. It needs no GitHub credentials and publishes nothing. From a local Replica checkout, use [`scripts/create-prototype-repo.sh`](../scripts/create-prototype-repo.sh) instead, with a new destination outside that checkout.
-
-In the Copilot app, click **+** beside **Projects**, choose **Local folder or repository**, and select `my-prototype`. Start a fresh session so Copilot discovers the starter's local skills. Ask Copilot to install the dependencies, reviewing commands before approval.
+Follow steps 1 through 3 of [prototype repository setup](prototype-repository-setup.md) to create an independent starter, open a fresh Copilot session, and verify its local preview. Then return here to prepare the team's guidance and starting pages.
-Create an empty GitHub repository in your organization for this environment. Connect the local repository to it as `origin`, review the starter files, make the initial commit, and push the default branch. Ask an engineer to help with these Git steps if needed. Give prototype authors write access and reviewers read access. Keep production credentials and real customer data out of it.
+Use a GitHub repository in your organization for this shared environment. Give prototype authors write access and reviewers read access. Keep production credentials and real customer data out of it. Continue below to prepare guidance and starting pages before inviting the team.
## 2. Add your product and design-system guidance
@@ -56,7 +44,7 @@ Add a small set of representative pages with sample data, such as a list, a deta
The hub always offers **Default**, which opens the repository's root page. To offer additional templates, declare their names, descriptions, and routes in `.github/replica.json`. See [template configuration](../hub/docs/github-actions-builds.md#uploaded-artifact) for the format and limits, and [templates in the hub](../hub/docs/gallery.md#templates) for how people use them.
-Review the pages and guidance together, then commit them to the team's default branch. New prototypes start from that shared version without changing it.
+Review the pages and guidance together, then follow [share the baseline on GitHub](prototype-repository-setup.md#share-the-baseline-on-github) to create or use the intended organization repository, connect `origin`, and commit and push the reviewed baseline when authorized. For an existing shared repository, merge through its contribution process. Verify the actual default branch contains the baseline before continuing to Hub setup. New prototypes start from that shared version without changing it.
## 4. Deploy the hub
diff --git a/docs/prototype-repository-setup.md b/docs/prototype-repository-setup.md
new file mode 100644
index 00000000..6c4045d2
--- /dev/null
+++ b/docs/prototype-repository-setup.md
@@ -0,0 +1,84 @@
+# Set up a prototype repository
+
+Use this guide when someone points an agent at `github/replica` and asks it to set up a prototyping repository. The first milestone is an independent starter app with a verified local preview. Product guidance, reference components, a shared team baseline, and Hub publishing are separate milestones.
+
+This guide uses the existing installer and starter workflows. It does not change `/setup-skills`, which drafts the full shared context library on plain setup.
+
+## 1. Resolve the target and requested outcome
+
+Reuse the repository name, destination, references, and decisions already supplied. Ask only for missing information needed for the next action.
+
+| Target | Next action |
+| --- | --- |
+| New local repository | Choose a new directory outside the Replica checkout, then follow step 2. |
+| Existing local or GitHub repository | Inspect its instructions, files, Git state, and remote before proposing changes. If it already uses Replica, continue from its current setup state. |
+| Existing empty directory or repository | Explain that the installer requires a new destination. Propose creating the starter in a separate directory and reviewing how to integrate it into the intended repository. Get approval before transferring files or changing repository configuration. |
+| Existing repository with another app | Agree whether to adapt that app or create a separate prototype repository before installing anything. Preserve existing files and history. |
+
+A local repository needs no GitHub credentials or Hub. If the user also requests a GitHub repository, resolve its owner and visibility before creating it. Follow the host's authorization rules for repository creation, commits, and pushes; local setup alone does not authorize them.
+
+When a reference app is supplied, retain it for the guidance and component work in step 4. A request to create the repository does not require a design-system questionnaire before copying the starter.
+
+## 2. Create the independent starter
+
+Without a local Replica checkout, download the installer:
+
+```sh
+curl -fLSs https://raw.githubusercontent.com/github/replica/main/scripts/install-starter.sh -o install-starter.sh
+```
+
+Read the downloaded script before running it. Use a destination that does not exist and whose parent directory exists:
+
+```sh
+bash install-starter.sh my-prototype
+```
+
+From a local Replica checkout, use the checked-out script instead:
+
+```sh
+bash scripts/create-prototype-repo.sh ../my-prototype
+```
+
+Both paths create an independent, uncommitted Git repository with no remote. They copy the starter without Replica's source history, require no GitHub credentials, and publish nothing. The installer does not install Node.js or app dependencies.
+
+Before asking the user to accept the copied repository's Copilot app configuration, review `.github/github-app.yml` and the startup details in the copied `README.md`. Explain that session startup can install Copilot CLI globally when missing, install or enable the Replica plugin, and will run `npm ci`.
+
+Add the new directory to the Copilot app using **Projects → + → Local folder or repository**, then start a fresh session there. The session in the Replica checkout cannot discover the copied local skills.
+
+Before ending the originating session, provide a paste-ready kickoff message headed **Prompt 1: Continue prototype repository setup**. Tell the user to paste it into the fresh session; a new session does not inherit the previous conversation. Include the user's goal, repository path, supplied references, requested milestone, settled decisions and approvals, completed actions, blockers, and next step.
+
+The kickoff must tell the new session to follow the copied repository's `AGENTS.md` and resume this guide at step 3. Include the [absolute guide URL](https://github.com/github/replica/blob/main/docs/prototype-repository-setup.md#3-verify-the-existing-app-locally), since this guide is not copied into the starter. If that version is not yet available at the URL, include steps 3 through 5 inline instead. The new session reuses settled answers and checks which actions and approvals remain applicable.
+
+## 3. Verify the existing app locally
+
+Check `node --version` against `engines.node` in the copied `package.json`. Reuse a compatible installed runtime. On macOS or Linux, obtain approval before installing Node.js, nodenv, or node-build, or changing shell configuration.
+
+The fresh session does not receive the setup output, so ask the user to inspect it and report any failures before repeating setup. Dependency installation success does not prove that the current session loaded the canvas.
+
+Follow the copied README's **Connect the Replica canvas** and **Canvas preflight** sections for plugin activation and recovery. Complete that preflight before starting a preview. Use its **Run it** commands, reuse an existing responsive server when appropriate, and open the actual printed URL. Verify that the included app renders; a successful dependency install or HTTP response alone is not a rendered check.
+
+This milestone checks the existing starter page without building product UI. Report a missing runtime, unavailable canvas, or failed preview with its specific recovery step. Hub connection is not required for local preview.
+
+## 4. Continue only to the requested milestone
+
+| Requested outcome | Continue with |
+| --- | --- |
+| Local starter and preview | Report the verified state and stop. No guidance authoring or Hub setup is needed just to inspect the included app. |
+| Product or design-system setup | Run the new repository's `/setup-skills` with the supplied sources. Reuse prior answers. Follow its source intake, installation approval, draft review, and separate activation steps. |
+| Reference-based starting UI | Complete the applicable guidance setup, then use the local `create-prototype` skill to build the requested shell or page. Establish whether components come from an installable package, permitted source reuse, or newly authored components. Verify the rendered result against the authorized reference. |
+| Shared team baseline | Complete the applicable guidance setup, [prepare useful starting pages](prototype-environment.md#3-prepare-useful-starting-pages), and review them together. Then [share the baseline on GitHub](#share-the-baseline-on-github). |
+| Hosted publishing and comments | First [share the reviewed baseline on GitHub and verify it on the actual default branch](#share-the-baseline-on-github), then follow [deploy the hub](prototype-environment.md#4-deploy-the-hub) and the remaining environment setup steps, or connect to an existing team Hub. |
+
+Guidance drafts are not active guidance. Installed tokens or packages are not proof that reference components are usable or that a shell resembles the reference. Keep those outcomes distinct.
+
+### Share the baseline on GitHub
+
+After reviewing the starter files, guidance, and starting pages, use the intended empty GitHub repository or create one with the agreed owner and visibility. Connect it as a remote named `origin`, make the initial commit, and push the intended default branch only when authorized. For an existing shared repository, follow its contribution process to merge the reviewed changes instead of replacing its remote or history. Ask an engineer for help with these Git steps if needed.
+
+Verify the repository's actual default branch contains the intended baseline before calling it ready for teammates or continuing to Hub repository connection. A local preview is not evidence of a published Hub Build.
+
+## 5. Report what is ready
+
+Finish with a short status summary based on observed results. Distinguish **verified**, **blocked**, **not checked**, and **not requested** rather than saying only "setup complete."
+
+Cover the runtime and dependencies, current-session canvas availability, rendered preview and URL, guidance activation, reference components or shell, default-branch baseline, and Hub publishing only as applicable. Name the next blocker and its recovery action. Preserve this summary across a required session handoff.
diff --git a/starter/README.md b/starter/README.md
index 30960e99..4119b08c 100644
--- a/starter/README.md
+++ b/starter/README.md
@@ -1,6 +1,6 @@
# Replica Starter
-A minimal starting point for a new prototype. Download and review `scripts/install-starter.sh` from `github/replica` to create an independent, uncommitted repository without cloning Replica. From a local Replica checkout, run `./scripts/create-prototype-repo.sh ../my-prototype` instead. Both paths copy this starter without source history or a remote. Open the new repository in a fresh agent session so it discovers the skills, then use `/setup-skills` to draft context from your product and design-system sources. Review and approve the drafts before building a prototype. See the [Replica setup guide](https://github.com/github/replica/blob/main/docs/prototype-environment.md#1-create-the-teams-prototype-repository) for commands.
+A minimal starting point for a new prototype. Download and review `scripts/install-starter.sh` from `github/replica` to create an independent, uncommitted repository without cloning Replica. From a local Replica checkout, run `./scripts/create-prototype-repo.sh ../my-prototype` instead. Both paths copy this starter without source history or a remote. Open the new repository in a fresh agent session so it discovers the skills, then use `/setup-skills` to draft context from your product and design-system sources. Review and approve the drafts before building a prototype. See [prototype repository setup](https://github.com/github/replica/blob/main/docs/prototype-repository-setup.md) for commands and the path from local preview to optional guidance and a shared baseline.
The app has hash-based routing, a start page, a linked sub-page, and a scaffolded activity example. Replace the example pages with your prototype.
From ec561c4f1f3cc14025ddd4679bccad605e8715c9 Mon Sep 17 00:00:00 2001
From: Copilot <223556219+Copilot@users.noreply.github.com>
Date: Wed, 21 Oct 2026 00:15:56 +0000
Subject: [PATCH 2/4] fix(canvas): keep unpublished improvements local
Capture source when selecting a target and require a matching published Build before initial synchronization. Retain its identity across retries, follow-ups, and deletion.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../extensions/replica-prototype/README.md | 2 +
.../renderer-improvement-notes-prototype.js | 2 +-
.../capture-review-revision/index.mjs | 97 ++++++
.../improvement-notes/index.mjs | 82 +++++
.../improvement-notes/index.test.mjs | 300 +++++++++++++++++-
.../start-canvas-server/index.mjs | 4 +
.../start-canvas-server/index.test.mjs | 5 +
.../tests/improvement-notes.test.tsx | 48 ++-
.../prototype-canvas-improvement-notes/en.ts | 2 +
.../index.tsx | 53 +++-
.../types.ts | 2 +-
.../use-saved-notes/index.ts | 15 +-
hub/docs/prototype-canvas.md | 6 +-
13 files changed, 585 insertions(+), 33 deletions(-)
create mode 100644 .github/extensions/replica-prototype/capture-review-revision/index.mjs
diff --git a/.github/extensions/replica-prototype/README.md b/.github/extensions/replica-prototype/README.md
index 72b09b8c..1a4eb800 100644
--- a/.github/extensions/replica-prototype/README.md
+++ b/.github/extensions/replica-prototype/README.md
@@ -70,6 +70,8 @@ Contributors can load uncommitted changes from a local Replica checkout with `co
## Pick & polish
+New improvements remain local until their captured source matches a successful published Build, including on branches with an older Build. Target selection captures the source without changing the real Git index. Capture failures and older notes without provenance still allow local use but cannot synchronize. Once uploaded, later changes retain the original Build identity and remain private owner notes.
+
**Fix all** invokes the bundled, model-discoverable [`/replica-pick-and-polish` skill](skills/replica-pick-and-polish/SKILL.md) with the verified checkout, branch, batch ID, and thread count. Notes, conversation history, and images are retrieved separately from the immutable batch. When the skill is missing or disabled, or the runtime has no skill catalog, the request includes the same bundled procedure inline. Catalog or fallback-file errors stop preparation without sending work or leaving a batch awaiting results. See the [Pick & polish guide](../../../hub/docs/prototype-canvas.md#pick--polish) for saved-note and recovery behavior.
## Learnings
diff --git a/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js b/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js
index 3a03c9c7..1e825f7d 100644
--- a/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js
+++ b/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js
@@ -1 +1 @@
-import{n as e,r as t}from"./renderer-rolldown-runtime.js";import{E as n,K as r,L as i,M as a,X as o,Y as s,f as c,g as l,q as u,x as d,z as f}from"./renderer-vendor.js";import{a as p,c as m,f as h,m as g,o as ee,p as te,s as _}from"./renderer.js";import{t as v}from"./renderer-improvement-notes-vendor.js";import{t as ne}from"./renderer-prototype-canvas-improvement-threads.js";var y=t(o(),1),re=s(),b=r(),ie=v(),x={title:`Pick & polish`,localAuthor:`Local author`,branch:`prototype/welcome`,demo:`UI prototype`,demoNotice:`Sample preview. Notes reset on reload. No Hub API calls or agent work.`,canvasDemoNotice:`UI-only notes over the live preview. Notes reset on canvas reload. Captures, Hub sync and agent results are simulated.`,canvasBatchSource:`Live preview · UI-only batch`,sampleBatchSource:`Local, uncommitted sample`,bridgeUnavailable:`Annotation needs the updated Replica preview bridge. Reconnect or reload the preview after updating the canvas.`,capturePlaceholder:`UI-only capture placeholder`,annotate:`Pick & polish`,fix:`Fix all`,openNotes:e=>`Open improvement notes (${e})`,fixAll:e=>`Fix all (${e})`,notes:`Pick & polish`,closeNotes:`Close pick & polish`,owner:`Only your notes appear here. Authorized API callers can request other authors' notes.`,selectHint:`Click an element or drag a rectangle. For a keyboard region, focus the preview, press Shift+Enter, then use arrows and Enter to choose two corners. Escape exits annotation mode.`,keyboardHint:`Click an element or drag a rectangle. Focus the preview and press Shift+Enter for keyboard region selection; arrows move the corner and Enter selects it.`,regionHint:`Choose two corners in the preview. Use arrow keys to move the corner, then Enter.`,firstCorner:`First corner selected. Choose the second corner.`,regionSmall:`Choose a larger region, at least 8 preview pixels wide and high.`,add:`Add improvement note`,edit:`Edit improvement note`,label:`What should change?`,placeholder:`Describe the improvement you want Copilot to make...`,save:`Save note`,saveEdit:`Save changes`,cancel:`Cancel`,discard:`Discard draft`,keep:`Keep writing`,discardTitle:`Discard your unsaved note?`,discardBody:`Your saved notes will stay unchanged.`,capture:`Captured target`,empty:`A little feedback goes a long way`,emptyBody:`Select an element or draw around an area. Collect notes across screens, then fix them together.`,emptyFilter:`No notes in this view.`,allActive:`Active notes`,readyFilter:`Ready to review`,resolvedFilter:`Resolved`,filter:`Filter improvement notes`,viewTarget:`View target`,noteActions:e=>`Note actions: ${e}`,editAction:`Edit`,deleteAction:`Delete`,deleteTitle:`Delete this improvement note?`,deleteBody:`This removes the note. It does not change the prototype.`,resolve:`Confirm resolved`,solution:`Solution`,solutionUnavailable:`The solution summary is not available in this canvas.`,readyReadOnly:`Ready notes are read-only. Add a new note to request further changes.`,reopen:`Reopen`,retryFix:`Retry fix`,noteSent:`Sent in the simulated batch. No real agent has started.`,noteReady:`Simulated change is ready. Review the target before resolving.`,noteBlocked:`Simulated agent could not safely identify the change. Edit the note or retry.`,handoff:`Demo handoff to Copilot`,handoffNotice:`This is the captured batch, not a live agent request. New notes stay out of this batch.`,complete:`Simulate ready to review`,block:`Simulate blocked`,closeHandoff:`Continue annotating`,sent:`Demo batch captured. No code was changed.`,finished:`Simulated result received. Review each note before resolving.`,fixBusy:`Finish or close the current simulated batch before sending another.`,syncControls:`Demo connection`,offline:`Offline`,connected:`Connected`,syncFailure:`Sync failure`,syncRetry:`Retry demo sync`,syncFailed:`Demo sync failed. Your note remains in this demo; retry when connected.`,syncSuccess:`Demo sync completed.`,targetMissing:`This sample target is no longer available. The saved capture is still shown.`,previewUnavailable:`The demo preview is unavailable. Try selecting the target again.`,saved:`Note added.`,savedLocally:`Notes are saved locally.`,storageLoading:`Loading your notes...`,productionSent:`Notes sent to Copilot. Review the changes before confirming resolution.`,productionBusy:`Copilot is working on the captured batch.`,branchChanged:`The prototype branch changed. Close this draft and select the target again.`,workChanged:`The open improvements changed while syncing. Review them and select Fix all again.`,returnToActive:`Return to active`,regionTarget:`Selected region`,closeComposer:`Close note composer`,closeDiscard:`Close discard confirmation`,closeDelete:`Close delete confirmation`,closeBatch:`Close demo handoff`,exit:`Exit annotation mode`,sampleScreens:`Sample prototype screens`,sampleWorkspace:`Octocat's workspace`,projects:`Projects`,settings:`Settings`,navigationHint:`Navigate between screens. Your notes stay together.`,authorContext:`Across this prototype · Demo author: octocat`,batchHint:`Fix only this batch. Do not commit, push, or publish. Report per-note results for the author to review.`,perNoteResult:`Simulate a result for this note`,batchLabel:e=>`View demo batch (${e})`,statuses:{open:`Open`,sent:`Sent to Copilot`,ready:`Ready to review`,resolved:`Resolved`,blocked:`Needs attention`},sync:{local:`Demo: local only`,synced:`Demo: synced`,failed:`Demo: sync failed`}};function ae(e,t){let n=[e.thread?.originalStatus??e.status,...e.thread?.messages.filter(e=>e.role===`author`).map(e=>e.status)??[]];return{id:e.id,revision:e.revision,body:e.body,capture:e.capture,author:e.thread?.originalAuthor?`@${e.thread.originalAuthor.login}`:e.author===`local`?x.localAuthor:`@${e.author}`,avatarUrl:(e.thread?.originalAuthor??e.authorProfile)?.avatarUrl,target:e.target,path:e.route,status:e.status,originalPending:(e.thread?.originalStatus??e.status)===`open`,...n.includes(`sent`)?{retryStatus:`sent`}:n.includes(`blocked`)?{retryStatus:`blocked`}:{},messages:e.thread?.messages.map(e=>({...e,...e.role===`author`&&e.author?{author:`@${e.author.login}`,avatarUrl:e.author.avatarUrl}:{author:void 0},pending:e.role===`author`&&e.status===`open`}))??(e.result?[{id:`legacy-result`,role:`copilot`,body:e.result,status:e.status===`blocked`?`blocked`:`ready`}]:[]),...t&&(t.status===`resolved`||t.status===`moved`)?{point:t.point}:{}}}function oe(e,t){let n=e.cloneNode(!0);if(!(n instanceof SVGSVGElement))throw Error(`The demo preview could not be captured.`);return n.setAttribute(`viewBox`,`${t.x} ${t.y} ${t.width} ${t.height}`),n.setAttribute(`width`,String(t.width)),n.setAttribute(`height`,String(t.height)),n.removeAttribute(`class`),`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(n))}`}var se=[{id:`projects-heading`,label:`Projects heading`,route:`/projects`,rect:{x:40,y:35,width:640,height:78}},{id:`new-project`,label:`New project button`,route:`/projects`,rect:{x:764,y:42,width:156,height:42}},{id:`activity`,label:`Activity summary`,route:`/projects`,rect:{x:40,y:144,width:880,height:100}},{id:`welcome-card`,label:`Welcome project card`,route:`/projects`,rect:{x:40,y:285,width:420,height:230}},{id:`onboarding-card`,label:`Onboarding project card`,route:`/projects`,rect:{x:500,y:285,width:420,height:230}},{id:`settings-heading`,label:`Settings heading`,route:`/settings`,rect:{x:40,y:35,width:700,height:78}},{id:`workspace-name`,label:`Workspace name field`,route:`/settings`,rect:{x:40,y:152,width:880,height:138}},{id:`notifications`,label:`Notifications settings`,route:`/settings`,rect:{x:40,y:318,width:880,height:130}},{id:`save-settings`,label:`Save settings button`,route:`/settings`,rect:{x:40,y:478,width:166,height:42}}],ce=[{id:1,kind:`improvement_note`,author:`octocat`,body:`Make the primary action more prominent and shorten the label to 'New project'.`,route:`/projects`,target:`New project button`,selector:`[data-improvement-target="new-project"]`,rect:{x:764,y:42,width:156,height:42},capture:``,status:`open`,sync:`local`,revision:1},{id:2,kind:`improvement_note`,author:`octocat`,body:`Give the two cards a little more breathing room and align their metadata.`,route:`/projects`,target:`Selected region`,selector:null,rect:{x:28,y:273,width:904,height:250},capture:``,status:`open`,sync:`local`,revision:1},{id:3,kind:`improvement_note`,author:`octocat`,body:`Explain what notifications this switch controls before asking me to enable it.`,route:`/settings`,target:`Notifications settings`,selector:`[data-improvement-target="notifications"]`,rect:{x:40,y:318,width:880,height:130},capture:``,status:`ready`,sync:`synced`,revision:1}],S=u();function le({route:e}){return(0,S.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 960 560`,className:`improvement-demo__scene`,role:`group`,"aria-label":`Sample prototype ${e}`,fontFamily:`system-ui, sans-serif`,children:[(0,S.jsx)(`rect`,{width:`960`,height:`560`,fill:`#f8fafc`}),se.filter(t=>t.route===e).map(t=>(0,S.jsxs)(`g`,{"data-improvement-target":t.id,children:[(0,S.jsx)(`rect`,{...t.rect,rx:`10`,fill:t.id.includes(`heading`)?`#f8fafc`:t.id===`new-project`||t.id===`save-settings`?`#155d3d`:`#ffffff`,stroke:t.id.includes(`heading`)?`none`:`#dce3e9`}),t.id.includes(`heading`)?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`text`,{x:`40`,y:`67`,fill:`#172b24`,fontSize:`28`,fontWeight:`650`,children:e===`/projects`?`Your projects`:`Workspace settings`}),(0,S.jsx)(`text`,{x:`40`,y:`99`,fill:`#596b65`,fontSize:`15`,children:e===`/projects`?`A home for your team's next great idea.`:`Make this space work for your team.`})]}):t.id===`new-project`||t.id===`save-settings`?(0,S.jsx)(`text`,{x:t.rect.x+t.rect.width/2,y:t.rect.y+26,textAnchor:`middle`,fill:`#ffffff`,fontSize:`14`,fontWeight:`600`,children:t.id===`new-project`?`+ Create project`:`Save settings`}):t.id===`activity`?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`text`,{x:`64`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`THIS WEEK`}),(0,S.jsx)(`text`,{x:`64`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`12 prototypes`}),(0,S.jsx)(`text`,{x:`348`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`IN REVIEW`}),(0,S.jsx)(`text`,{x:`348`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`4 conversations`}),(0,S.jsx)(`text`,{x:`642`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`YOUR TEAM`}),(0,S.jsx)(`text`,{x:`642`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`Making things happen`})]}):t.id.includes(`card`)?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`rect`,{x:t.rect.x+16,y:`301`,width:`388`,height:`100`,rx:`6`,fill:t.id===`welcome-card`?`#e3efe9`:`#eee9f7`}),(0,S.jsx)(`rect`,{x:t.rect.x+40,y:`323`,width:`100`,height:`10`,rx:`4`,fill:`#ffffff`}),(0,S.jsx)(`rect`,{x:t.rect.x+40,y:`345`,width:`196`,height:`6`,rx:`3`,fill:`#ffffff`}),(0,S.jsx)(`rect`,{x:t.rect.x+40,y:`363`,width:`156`,height:`6`,rx:`3`,fill:`#ffffff`}),(0,S.jsx)(`text`,{x:t.rect.x+24,y:`437`,fill:`#172b24`,fontSize:`18`,fontWeight:`600`,children:t.id===`welcome-card`?`Welcome experience`:`A better onboarding`}),(0,S.jsx)(`text`,{x:t.rect.x+24,y:`463`,fill:`#596b65`,fontSize:`13`,children:t.id===`welcome-card`?`prototype/welcome`:`prototype/onboarding`}),(0,S.jsx)(`circle`,{cx:t.rect.x+30,cy:`490`,r:`5`,fill:`#2a7954`}),(0,S.jsx)(`text`,{x:t.rect.x+44,y:`495`,fill:`#596b65`,fontSize:`12`,children:`Updated today · The Octocat`})]}):t.id===`workspace-name`?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`text`,{x:`64`,y:`184`,fill:`#172b24`,fontSize:`17`,fontWeight:`600`,children:`Workspace name`}),(0,S.jsx)(`text`,{x:`64`,y:`209`,fill:`#596b65`,fontSize:`13`,children:`This is how your workspace appears to your team.`}),(0,S.jsx)(`rect`,{x:`64`,y:`230`,width:`600`,height:`38`,rx:`6`,fill:`#f8fafc`,stroke:`#dce3e9`}),(0,S.jsx)(`text`,{x:`78`,y:`255`,fill:`#172b24`,fontSize:`14`,children:`Octocat's workspace`})]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`text`,{x:`64`,y:`351`,fill:`#172b24`,fontSize:`17`,fontWeight:`600`,children:`Notifications`}),(0,S.jsx)(`text`,{x:`64`,y:`385`,fill:`#596b65`,fontSize:`14`,children:`Keep me in the loop`}),(0,S.jsx)(`rect`,{x:`824`,y:`366`,width:`48`,height:`26`,rx:`13`,fill:`#155d3d`}),(0,S.jsx)(`circle`,{cx:`857`,cy:`379`,r:`9`,fill:`#ffffff`})]})]},t.id))]})}function C(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ue({frameRef:e,prototypeUrl:t,previewUrl:n,notes:r,annotating:i,composing:a,onSelect:o,onRoute:s,onCancel:c,onProblem:l}){let u=n??t,[d,f]=(0,y.useState)(null),[p,h]=(0,y.useState)(new Map),g=JSON.stringify(r.filter(e=>e.anchor).slice(0,200).map(e=>({id:e.id,anchor:e.anchor}))),te=(0,y.useEffectEvent)(e=>{if(!i||a)return;let t=_.safeParse(e);t.success?o(t.data):(c(),l(x.previewUnavailable))}),v=(0,y.useCallback)((t,n={})=>{u&&d&&e?.current?.contentWindow&&e.current.contentWindow.postMessage({type:t,nonce:d.nonce,...n},new URL(u).origin)},[d,e,u]);return(0,y.useEffect)(()=>{let t=e?.current;if(!t||!u)return;let n=new URL(u).origin,r=crypto.randomUUID(),i=Date.now(),a=JSON.parse(g);function o(){t?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:r},n),t?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:r,anchors:a},n)}function d(){r=crypto.randomUUID(),i=Date.now(),f({nonce:r,ready:!1}),h(new Map),c(),o()}function p(e){let a=e.data;if(e.source===t?.contentWindow&&e.origin===n&&C(a)&&a.nonce===r){if(a.type===`replica:canvas:ready`){let e=m.safeParse(a.route);if(a.protocolVersion!==1||a.improvementSelection!==!0||!e.success){f({nonce:r,ready:!1}),l(x.bridgeUnavailable);return}i=Date.now(),f(e=>e?.nonce===r&&e.ready?e:{nonce:r,ready:!0}),s(e.data.pathname+e.data.search+e.data.hash)}else if(a.type===`replica:canvas:selected`)te(a.anchor);else if(a.type===`replica:canvas:resolved`&&Array.isArray(a.results)){let e=new Map;for(let t of a.results){if(!C(t))continue;let n=ee.safeParse({commentId:t.id,status:`resolved`,point:{x:t.x,y:t.y},rect:t.rect??{x:t.x,y:t.y,width:1,height:1}});n.success&&e.set(n.data.commentId,n.data)}h(e)}else a.type===`replica:canvas:selection-failed`||a.type===`replica:canvas:bridge-error`?(c(),l(a.reason===`area-too-small`?x.regionSmall:x.bridgeUnavailable)):a.type===`replica:canvas:selection-cancelled`?a.reason!==`command`&&c():a.type===`replica:canvas:conversation-dismiss-requested`&&window.dispatchEvent(new Event(`replica:review-dismiss`))}}t.addEventListener(`load`,d),window.addEventListener(`message`,p),f({nonce:r,ready:!1}),o();let _=window.setInterval(()=>{Date.now()-i>2e4&&(f({nonce:r,ready:!1}),h(new Map),c(),l(x.bridgeUnavailable)),o()},2e3);return()=>{t.removeEventListener(`load`,d),window.removeEventListener(`message`,p),window.clearInterval(_),t.contentWindow?.postMessage({type:`replica:canvas:cancel-selection`,nonce:r},n),t.contentWindow?.postMessage({type:`replica:canvas:clear-selection`,nonce:r},n)}},[g,e,u,c,l,s]),(0,y.useEffect)(()=>{d?.ready&&(i&&!a?v(`replica:canvas:select`,{mode:`improvement`}):v(`replica:canvas:cancel-selection`),a||v(`replica:canvas:clear-selection`))},[i,a,d?.ready,v]),{ready:d?.ready===!0,resolutions:p}}function de(e){let[t,n]=(0,y.useState)(null),[r,i]=(0,y.useState)(``),[a,o]=(0,y.useState)(``),[s,c]=(0,y.useState)(!1),l=(0,y.useRef)(null),u=(0,y.useRef)(!1),d=(0,y.useRef)(null),f=(0,y.useRef)(!1),m=(0,y.useRef)(0);function h(e){f.current&&(l.current=e,n(e))}(0,y.useEffect)(()=>{if(!e)return;f.current=!0;let t=!1,r=!1,a=0;async function s(){if(u.current||r)return;r=!0;let s=m.current;try{let n=await p(`/api/improvement-notes`,e);if(u.current||s!==m.current||t)return;if(h(n),Date.now()-a>15e3){a=Date.now();let r=p(`/api/improvement-notes/sync`,e,{method:`POST`,body:JSON.stringify({identity:n.identity,revision:n.revision})}).then(e=>{t||h(e)});d.current=r;try{await r}finally{d.current===r&&(d.current=null)}}t||o(``)}catch(e){t||(e instanceof Error&&`statusCode`in e&&e.statusCode===403&&(l.current=null,n(null),i(``)),o(e instanceof Error?e.message:String(e)))}finally{r=!1}}s();let c=window.setInterval(()=>void s(),3e3);return()=>{f.current=!1,t=!0,window.clearInterval(c)}},[e]);async function g(t,n={}){if(!e||!l.current||u.current)return!1;let r=l.current.identity,a=l.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`);u.current=!0,m.current++,c(!0),i(``);try{if(await d.current,!f.current)return!1;if(!l.current||l.current.identity!==r)throw Error(x.branchChanged);if(t===`fix`&&l.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`)!==a)throw Error(x.workChanged);return h(await p(t===`fix`?`/api/improvement-notes/fix`:`/api/improvement-notes`,e,{method:`POST`,body:JSON.stringify({identity:l.current.identity,revision:l.current.revision,operation:t,...n})})),!0}catch(e){return f.current&&i(e instanceof Error?e.message:String(e)),!1}finally{u.current=!1,f.current&&c(!1)}}return{state:t,error:r||a,busy:s,change:g}}var w=e({ImprovementNotesPrototype:()=>T});function T({initial:e=`empty`,canvas:t}){let[r,o]=(0,y.useState)(()=>ce.slice(0,e===`empty`?0:e===`single`?1:3).map(e=>{let t=new DOMParser().parseFromString((0,ie.renderToStaticMarkup)((0,S.jsx)(le,{route:e.route})),`image/svg+xml`).documentElement;if(!(t instanceof SVGSVGElement))throw Error(`The sample preview could not be captured.`);return{...e,capture:oe(t,e.rect)}})),s=de(t?.token),u=s.state?.syncError===`Notes are saved locally until Hub discovers this branch.`?null:s.state?.syncError,p=t?.token?s.state?.notes??[]:r,[m,ee]=(0,y.useState)(`/projects`),[_,v]=(0,y.useState)(!1),[C,w]=(0,y.useState)(!0),[T,E]=(0,y.useState)(null),[D,O]=(0,y.useState)(null),[k,A]=(0,y.useState)(``),[fe,pe]=(0,y.useState)(!1),[j,me]=(0,y.useState)(null),[M,he]=(0,y.useState)(`active`),[N,ge]=(0,y.useState)(`offline`),[P,_e]=(0,y.useState)([]),[ve,F]=(0,y.useState)(!1),[ye,I]=(0,y.useState)(``),[be,L]=(0,y.useState)(null),[R,z]=(0,y.useState)(!1),[B,xe]=(0,y.useState)({x:160,y:160}),[V,H]=(0,y.useState)(null),[Se,Ce]=(0,y.useState)(null),[U,W]=(0,y.useState)(null),G=(0,y.useRef)(null),we=(0,y.useRef)(null),K=(0,y.useRef)(null),Te=(0,y.useRef)(null),q=(0,y.useRef)(null),Ee=(0,y.useRef)(e===`empty`?1:e===`single`?2:4),J=p.filter(e=>e.status===`open`),Y=!t?.token||s.state!==null,De=T!==null&&!fe&&Y;(0,y.useLayoutEffect)(()=>{De&&Te.current?.focus()},[De]);let Oe=!!t?.token&&T!==null&&T.identity!==s.state?.identity,ke=D!==null&&p.some(e=>e.id===D&&e.status===`ready`),Ae=p.filter(e=>e.status!==`resolved`).length,je=M===`ready`?x.readyFilter:M===`resolved`?x.resolvedFilter:x.allActive,Me=p.filter(e=>M===`resolved`?e.status===`resolved`:M===`ready`?e.status===`ready`:e.status!==`resolved`),Ne=!!s.state?.activeBatch||P.some(e=>p.some(t=>t.id===e.id&&t.revision===e.revision&&t.status===`sent`)),Pe=p.filter(e=>e.route===m&&e.status!==`resolved`),X=p.find(e=>e.id===be&&e.route===m),Fe=(0,y.useCallback)(e=>{let t=e.kind===`element`?e.accessibleName||e.tagName:x.regionTarget;E({identity:s.state?.identity,anchor:e,route:e.route.pathname+e.route.search+e.route.hash,target:t,selector:e.kind===`element`?e.selector:null,rect:e.rect,capture:``,capturePlaceholder:!0}),O(null),A(``)},[s.state?.identity]),Ie=(0,y.useCallback)(()=>{K.current?.getAttribute(`aria-pressed`)===`true`&&K.current.focus(),v(!1)},[]),Le=t?.frameRef,Z=ue({frameRef:Le,prototypeUrl:t?.prototypeUrl,previewUrl:t?.previewUrl,notes:p,annotating:_,composing:T!==null,onSelect:Fe,onRoute:ee,onCancel:Ie,onProblem:I}),Q=!!t;(0,y.useLayoutEffect)(()=>{Le&&Ce(Le.current?.closest(`.canvas-shell`)?.querySelector(`#canvas-improvement-controls`)??null)},[Le]);function Re(){w(!0),t?.onOpenNotes()}function ze(e,t){let n=we.current?.querySelector(`svg`);n?(E({route:m,target:t?.label??x.regionTarget,selector:t?`[data-improvement-target="${t.id}"]`:null,rect:e,capture:oe(n,e)}),A(``),O(null),W(null),H(null),z(!1)):I(x.previewUnavailable)}function Be(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),width:Math.abs(t.x-e.x),height:Math.abs(t.y-e.y)}}function Ve(e){let t=we.current?.getBoundingClientRect();return!t?.width||!t.height?(I(x.previewUnavailable),null):{x:Math.max(0,Math.min(960,(e.clientX-t.left)/t.width*960)),y:Math.max(0,Math.min(560,(e.clientY-t.top)/t.height*560))}}function He(e,t){let n=Be(e,t);W(null),H(null),n.width<8||n.height<8?I(x.regionSmall):ze(n)}function Ue(){let e=T?.originalBody??``;k===e?(E(null),O(null)):pe(!0)}async function We(){if(ke){I(x.readyReadOnly);return}if(!T||!k.trim()||s.busy||Oe)return;if(t?.token){if(!await s.change(D===null?`create`:`edit`,{id:D,identity:T.identity,expectedNoteRevision:T.noteRevision,body:k.trim(),anchor:T.anchor,capture:T.capturePlaceholder?``:T.capture}))return;he(`active`),Re(),E(null),O(null),I(x.saved);return}let e=N===`connected`?`synced`:N===`failed`?`failed`:`local`;if(D!==null)o(t=>t.map(t=>t.id===D?{...t,body:k.trim(),revision:t.revision+1,status:`open`,sync:e}:t));else{let t={...T,id:Ee.current++,body:k.trim(),kind:`improvement_note`,author:`octocat`,status:`open`,sync:e,revision:1};o(e=>[...e,t]),L(t.id)}he(`active`),Re(),E(null),O(null),I(N===`failed`?x.syncFailed:x.saved)}async function Ge(){J.length&&!Ne&&(t?.token?await s.change(`fix`)&&I(x.productionSent):(_e(J.map(e=>({...e}))),o(e=>e.map(e=>e.status===`open`?{...e,status:`sent`}:e)),F(!0),I(x.sent)))}function Ke(e){o(t=>t.map(t=>P.some(e=>e.id===t.id&&e.revision===t.revision)&&t.status===`sent`?{...t,status:e}:t)),F(!1),w(!0),I(x.finished)}async function $(e,n){t?.token?await s.change(`status`,{id:e.id,status:n,identity:s.state?.identity,expectedNoteRevision:e.revision})&&q.current?.focus():(o(t=>t.map(t=>t.id===e.id?{...t,status:n,sync:N===`connected`?`synced`:N===`failed`?`failed`:`local`}:t)),q.current?.focus())}let qe=(0,S.jsx)(`div`,{className:`improvement-demo__actions`,children:(0,S.jsxs)(`div`,{role:`group`,"aria-label":x.title,className:`improvement-demo__split`,children:[(0,S.jsx)(b.Button,{ref:K,size:`small`,variant:`secondary`,className:`canvas-toolbar-compact-button`,"aria-label":x.annotate,title:x.annotate,leadingVisual:(0,S.jsx)(a,{}),"aria-pressed":_,disabled:Q&&(!Z.ready||!!t?.token&&!s.state),onClick:()=>{v(!_),_||(w(!1),I(x.selectHint)),z(!1),H(null),W(null)},children:(0,S.jsx)(`span`,{className:`canvas-toolbar-button-label`,children:x.annotate})}),(0,S.jsx)(b.Button,{ref:q,size:`small`,variant:`secondary`,"aria-label":x.openNotes(Ae),"aria-expanded":C&&!t?.hubOpen,onClick:Re,children:(0,S.jsx)(te,{children:Ae})})]})});return(0,S.jsxs)(`section`,{"aria-label":x.title,className:`improvement-demo${Q?` improvement-demo--embedded`:``}`,onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||T||j!==null||ve||(v(!1),z(!1),H(null),W(null),G.current=null,_&&K.current?.focus())},children:[Q?null:(0,S.jsxs)(`header`,{className:`improvement-demo__browser`,children:[(0,S.jsx)(`span`,{className:`improvement-demo__browser-dot`}),(0,S.jsxs)(`code`,{children:[`localhost:5173`,m]}),(0,S.jsx)(`span`,{className:`improvement-demo__badge`,children:x.demo})]}),Q?Se&&(0,re.createPortal)(qe,Se):(0,S.jsxs)(`header`,{className:`improvement-demo__toolbar`,children:[(0,S.jsxs)(`div`,{className:`improvement-demo__identity`,children:[(0,S.jsx)(`strong`,{children:x.branch}),(0,S.jsx)(`span`,{children:x.title})]}),qe]}),Q?null:(0,S.jsx)(`div`,{className:`improvement-demo__disclaimer`,children:x.demoNotice}),(0,S.jsxs)(`div`,{className:`improvement-demo__workspace`,children:[Q?null:(0,S.jsxs)(`section`,{className:`improvement-demo__preview`,"aria-label":`Prototype preview`,children:[(0,S.jsxs)(`nav`,{className:`improvement-demo__pages`,"aria-label":x.sampleScreens,children:[(0,S.jsx)(`span`,{className:`improvement-demo__app-name`,children:x.sampleWorkspace}),[`/projects`,`/settings`].map(e=>(0,S.jsx)(`button`,{type:`button`,"aria-current":m===e?`page`:void 0,onClick:()=>{ee(e),L(null),H(null),W(null)},children:e===`/projects`?x.projects:x.settings},e))]}),(0,S.jsxs)(`div`,{ref:we,className:`improvement-demo__stage${_?` improvement-demo__stage--selecting`:``}`,role:R?`button`:`group`,tabIndex:_?0:-1,"aria-describedby":`improvement-selection-hint`,"aria-label":R?`Choose region corners`:`Selectable preview`,onKeyDown:e=>{if(e.key===`Escape`)e.preventDefault(),v(!1),z(!1),H(null),W(null),G.current=null,K.current?.focus();else if(_&&e.shiftKey&&e.key===`Enter`)e.preventDefault(),z(!R),H(null),W(null),I(R?x.selectHint:x.regionHint);else if(R&&[`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Enter`,` `].includes(e.key)){if(e.preventDefault(),e.key===`Enter`||e.key===` `)V?He(V,B):(H(B),I(x.firstCorner));else{let t={x:Math.max(0,Math.min(960,B.x+(e.key===`ArrowRight`?10:e.key===`ArrowLeft`?-10:0))),y:Math.max(0,Math.min(560,B.y+(e.key===`ArrowDown`?10:e.key===`ArrowUp`?-10:0)))};xe(t),V&&W(Be(V,t))}}},onPointerDown:e=>{if(!_||e.button!==0||e.target instanceof Element&&e.target.closest(`[data-note-pin]`))return;e.preventDefault();let t=Ve(e);if(!t)return;if(R){xe(t),G.current={start:t,target:void 0,pointerId:e.pointerId},e.currentTarget.setPointerCapture(e.pointerId);return}let n=e.target instanceof Element?e.target.closest(`[data-improvement-target]`):null;G.current={start:t,target:se.find(e=>e.id===n?.getAttribute(`data-improvement-target`)),pointerId:e.pointerId},e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:e=>{if(!G.current||G.current.pointerId!==e.pointerId)return;let t=Ve(e);if(!t)return;if(R){xe(t),V&&W(Be(V,t));return}let n=Be(G.current.start,t);Math.hypot(n.width,n.height)>=8&&W(n)},onPointerUp:e=>{let t=G.current;if(!t||t.pointerId!==e.pointerId)return;G.current=null,e.currentTarget.releasePointerCapture(e.pointerId);let n=Ve(e);if(!n)return;if(R){xe(n),V?He(V,n):(H(n),I(x.firstCorner));return}let r=Be(t.start,n);Math.hypot(r.width,r.height)>=8?He(t.start,n):t.target&&ze(t.target.rect,t.target),W(null)},onPointerCancel:()=>{G.current=null,W(null)},onLostPointerCapture:()=>{G.current=null,W(null)},children:[(0,S.jsx)(le,{route:m}),_&&!R?se.filter(e=>e.route===m).map(e=>(0,S.jsx)(`button`,{type:`button`,"data-improvement-target":e.id,className:`improvement-demo__element-target`,"aria-label":e.label,style:{left:`${e.rect.x/960*100}%`,top:`${e.rect.y/560*100}%`,width:`${e.rect.width/960*100}%`,height:`${e.rect.height/560*100}%`},onClick:()=>{T||ze(e.rect,e)}},e.id)):null,U?(0,S.jsx)(`div`,{className:`improvement-demo__outline`,style:{left:`${U.x/960*100}%`,top:`${U.y/560*100}%`,width:`${U.width/960*100}%`,height:`${U.height/560*100}%`}}):null,R?(0,S.jsx)(`span`,{className:`improvement-demo__corner`,style:{left:`${B.x/960*100}%`,top:`${B.y/560*100}%`}}):null,Pe.map(e=>(0,S.jsx)(`button`,{"data-note-pin":!0,type:`button`,className:`improvement-demo__pin${be===e.id?` improvement-demo__pin--selected`:``}`,style:{left:`${Math.min(e.rect.x+e.rect.width,930)/960*100}%`,top:`${e.rect.y/560*100}%`},"aria-label":`Open improvement note ${e.id}: ${e.target}`,onClick:()=>{L(e.id),w(!0),he(`active`)},children:e.id},e.id)),X?(0,S.jsx)(`div`,{className:`improvement-demo__outline improvement-demo__outline--saved`,style:{left:`${X.rect.x/960*100}%`,top:`${X.rect.y/560*100}%`,width:`${X.rect.width/960*100}%`,height:`${X.rect.height/560*100}%`}}):null]}),(0,S.jsxs)(`footer`,{className:`improvement-demo__preview-footer`,children:[(0,S.jsx)(`span`,{id:`improvement-selection-hint`,children:_?x.keyboardHint:x.navigationHint}),(0,S.jsx)(`span`,{children:`960 × 560`})]})]}),Q&&!t?.token?(0,S.jsx)(`div`,{className:`canvas-improvement-markers`,children:Pe.map(e=>{let t=Z.resolutions.get(e.id);return!t||t.status!==`resolved`&&t.status!==`moved`?null:(0,S.jsx)(`button`,{type:`button`,className:`improvement-demo__pin`,style:{left:t.point.x,top:t.point.y},"aria-label":`Open improvement note ${e.id}: ${e.target}`,onClick:()=>{L(e.id),he(e.status===`ready`?`ready`:`active`),Re()},children:e.id},e.id)})}):null,t?.token?(0,S.jsx)(ne,{identity:s.state?.identity??``,controls:!1,returnFocusRef:q,open:C&&!t.hubOpen&&!T,active:(C||_)&&!t.hubOpen&&!T,onOpen:Re,onClose:()=>{w(!1),q.current?.focus()},threads:p.map(e=>ae(e,Z.resolutions.get(e.id))),busy:s.busy||!s.state,activeBatch:!!s.state?.activeBatch,error:s.error||u||s.state?.profileError||(s.state?Z.ready?``:x.bridgeUnavailable:x.storageLoading),onSelect:e=>{let n=p.find(t=>t.id===e);n&&n.route!==m&&t.onNavigate(new URL(n.route,t.prototypeUrl).href)},onFollowUp:(e,t)=>s.change(`follow-up`,{id:e.id,expectedNoteRevision:e.revision,body:t}),onResolve:e=>s.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`resolved`}),onDelete:e=>s.change(`delete`,{id:e.id,expectedNoteRevision:e.revision}),onFix:()=>s.change(`fix`),onRetry:e=>s.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`open`})}):(0,S.jsxs)(h,{className:`improvement-notes-sidebar`,contentClassName:`improvement-demo__panel`,title:x.notes,open:C&&!t?.hubOpen,closeLabel:x.closeNotes,onClose:()=>{w(!1),q.current?.focus()},children:[s.error&&(!T||!Y)?(0,S.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:s.error}):null,u?(0,S.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:u}):null,t?.token&&!s.state?(0,S.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:x.storageLoading}):null,Q&&!Z.ready?(0,S.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:x.bridgeUnavailable}):null,(0,S.jsxs)(`div`,{className:`improvement-demo__filters`,children:[(0,S.jsxs)(b.ActionMenu,{size:`small`,selectionVariant:`single`,menuAlignment:`start`,onSelect:he,children:[(0,S.jsx)(b.ActionMenu.Button,{size:`small`,variant:`secondary`,"aria-label":`${x.filter}: ${je}`,children:je}),(0,S.jsx)(b.ActionMenu.Overlay,{"aria-label":x.filter,children:[{value:`active`,label:x.allActive},{value:`ready`,label:x.readyFilter},{value:`resolved`,label:x.resolvedFilter}].map(e=>(0,S.jsx)(b.ActionMenu.Item,{value:e.value,selected:M===e.value,role:`menuitemradio`,onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:e.label},e.value))})]}),M===`active`?(0,S.jsx)(b.Button,{size:`small`,variant:`primary`,className:`improvement-demo__fix-all`,leadingVisual:(0,S.jsx)(l,{}),"aria-label":x.fixAll(J.length),disabled:!J.length||Ne||s.busy,title:Ne?Q?x.productionBusy:x.fixBusy:void 0,onClick:()=>void Ge(),children:(0,S.jsxs)(`span`,{className:`improvement-demo__fix-label`,children:[x.fix,(0,S.jsx)(te,{children:J.length})]})}):null]}),(0,S.jsxs)(`div`,{className:`improvement-demo__note-list`,children:[Me.length?null:(0,S.jsxs)(`div`,{className:`improvement-demo__empty`,children:[(0,S.jsx)(d,{size:28}),(0,S.jsx)(`h2`,{children:p.length?x.emptyFilter:x.empty}),p.length?null:(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`p`,{children:x.emptyBody}),(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,leadingVisual:(0,S.jsx)(a,{}),disabled:Q&&(!Z.ready||!Y),onClick:()=>{v(!0),w(!1),K.current?.focus()},children:x.annotate})]})]}),Me.map(e=>(0,S.jsxs)(`article`,{"aria-label":`Improvement note ${e.id}`,className:`improvement-demo__note${be===e.id?` improvement-demo__note--focused`:``}`,children:[(0,S.jsxs)(`div`,{className:`improvement-demo__note-header`,children:[e.status===`ready`?(0,S.jsx)(`span`,{className:`improvement-demo__status improvement-demo__status--ready`,children:x.statuses.ready}):null,(0,S.jsx)(`p`,{className:`improvement-demo__body`,children:e.body}),(0,S.jsx)(`div`,{className:`improvement-demo__note-menu`,children:(0,S.jsxs)(b.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,children:[(0,S.jsx)(b.ActionMenu.Button,{className:`improvement-demo__menu-trigger`,variant:`subtle`,"aria-label":x.noteActions(e.target),leadingVisual:(0,S.jsx)(n,{size:16}),children:``}),(0,S.jsxs)(b.ActionMenu.Overlay,{"aria-label":x.noteActions(e.target),children:[(0,S.jsx)(b.ActionMenu.Item,{value:`edit`,className:`improvement-demo__menu-item`,leadingVisual:(0,S.jsx)(d,{size:16}),disabled:e.status===`ready`,title:e.status===`ready`?x.readyReadOnly:void 0,onClick:()=>{e.status===`ready`?I(x.readyReadOnly):(E({...e,identity:s.state?.identity,noteRevision:e.revision,originalBody:e.body}),O(e.id),A(e.body))},onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:x.editAction}),(0,S.jsx)(b.ActionMenu.Item,{value:`delete`,className:`improvement-demo__menu-item improvement-demo__delete-item`,leadingVisual:(0,S.jsx)(c,{size:16}),onClick:()=>me({id:e.id,revision:e.revision,body:e.body,identity:s.state?.identity}),onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:x.deleteAction})]})]})})]}),(0,S.jsxs)(`div`,{className:`improvement-demo__note-meta`,children:[(0,S.jsx)(`span`,{children:e.target}),(0,S.jsx)(`span`,{className:`improvement-demo__note-separator`,"aria-hidden":`true`}),(0,S.jsx)(`button`,{className:`improvement-demo__note-route`,type:`button`,"aria-label":`${x.viewTarget}: ${e.target} (${e.route})`,onClick:()=>{if(t&&e.anchor){let n=new URL(t.prototypeUrl);n.pathname=e.anchor.route.pathname,n.search=e.anchor.route.search,n.hash=e.anchor.route.hash,t.onNavigate(n.href)}else ee(e.route);L(e.id)},children:(0,S.jsx)(`code`,{children:e.route})})]}),e.status!==`open`&&e.status!==`ready`?(0,S.jsx)(`span`,{className:`improvement-demo__status improvement-demo__status--${e.status}`,children:x.statuses[e.status]}):null,e.status===`ready`?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`details`,{className:`improvement-demo__solution`,children:[(0,S.jsxs)(`summary`,{children:[(0,S.jsx)(i,{size:14,"aria-hidden":`true`}),x.solution]}),(0,S.jsx)(`p`,{children:e.result||(Q?x.solutionUnavailable:x.noteReady)})]}),(0,S.jsx)(`p`,{className:`improvement-demo__read-only`,children:x.readyReadOnly})]}):e.result?(0,S.jsx)(`p`,{className:`improvement-demo__result`,children:e.result}):null,e.capture&&!e.capturePlaceholder?(0,S.jsx)(`img`,{className:`improvement-demo__thumbnail`,src:e.capture,alt:`${e.capturePlaceholder?x.capturePlaceholder:x.capture}: ${e.target}`}):null,!Q&&(e.status===`sent`||e.status===`blocked`)?(0,S.jsx)(`p`,{className:`improvement-demo__result`,children:e.status===`sent`?x.noteSent:x.noteBlocked}):null,(0,S.jsxs)(`div`,{className:`improvement-demo__note-actions`,children:[Q&&e.status===`sent`?(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>void $(e,`open`),children:x.returnToActive}):null,e.status===`ready`?(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,leadingVisual:(0,S.jsx)(f,{}),onClick:()=>$(e,`resolved`),children:x.resolve}):null,e.status===`resolved`?(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`open`),children:x.reopen}):null,e.status===`blocked`?(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`open`),children:x.retryFix}):null]}),!Q&&e.status===`sent`?(0,S.jsxs)(`details`,{className:`improvement-demo__simulation`,children:[(0,S.jsx)(`summary`,{children:x.perNoteResult}),(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`ready`),children:x.complete}),(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`blocked`),children:x.block})]}):null,Q?null:(0,S.jsx)(`small`,{className:e.sync===`failed`?`improvement-demo__sync-error`:``,children:x.sync[e.sync]})]},e.id))]}),!Q&&Ne?(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>F(!0),children:x.batchLabel(P.length)}):null,Q?null:(0,S.jsxs)(`footer`,{className:`improvement-demo__connection`,children:[(0,S.jsxs)(`label`,{children:[x.syncControls,(0,S.jsxs)(`select`,{value:N,onChange:e=>{let t=e.target.value;(t===`offline`||t===`connected`||t===`failed`)&&(ge(t),t!==`offline`&&o(e=>e.map(e=>({...e,sync:t===`connected`?`synced`:`failed`}))))},children:[(0,S.jsx)(`option`,{value:`offline`,children:x.offline}),(0,S.jsx)(`option`,{value:`connected`,children:x.connected}),(0,S.jsx)(`option`,{value:`failed`,children:x.syncFailure})]})]}),p.some(e=>e.sync===`failed`)?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`p`,{children:x.syncFailed}),(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>{ge(`connected`),o(e=>e.map(e=>({...e,sync:`synced`}))),I(x.syncSuccess)},children:x.syncRetry})]}):null]})]})]}),(0,S.jsx)(`p`,{className:`improvement-demo__announcement${Q?` visually-hidden`:``}`,role:`status`,children:ye}),De?(0,S.jsxs)(g,{title:D===null?x.add:x.edit,closeLabel:x.closeComposer,returnFocusRef:K,onClose:Ue,className:`improvement-demo__composer`,children:[s.error?(0,S.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:s.error}):null,Oe?(0,S.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:x.branchChanged}):null,ke?(0,S.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:x.readyReadOnly}):null,(0,S.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),We()},children:[(0,S.jsxs)(b.FormControl,{fullWidth:!0,children:[(0,S.jsx)(b.FormControl.Label,{children:x.label}),(0,S.jsx)(b.Textarea,{ref:Te,value:k,maxLength:1e4,rows:4,placeholder:x.placeholder,readOnly:ke,onChange:e=>A(e.target.value),required:!0})]}),(0,S.jsx)(`div`,{className:`improvement-demo__dialog-actions`,children:(0,S.jsx)(b.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!k.trim()||s.busy||Oe||ke,children:D===null?x.save:x.saveEdit})})]})]}):null,fe&&Y?(0,S.jsxs)(g,{title:x.discardTitle,closeLabel:x.closeDiscard,returnFocusRef:K,onClose:()=>pe(!1),children:[(0,S.jsx)(`p`,{children:x.discardBody}),(0,S.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>pe(!1),children:x.keep}),(0,S.jsx)(b.Button,{size:`small`,variant:`primary`,onClick:()=>{pe(!1),E(null),O(null),A(``)},children:x.discard})]})]}):null,j!==null&&Y?(0,S.jsxs)(g,{title:x.deleteTitle,closeLabel:x.closeDelete,returnFocusRef:q,onClose:()=>me(null),children:[(0,S.jsx)(`p`,{children:x.deleteBody}),(0,S.jsx)(`blockquote`,{className:`improvement-demo__delete-preview`,children:j.body}),(0,S.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>me(null),children:x.cancel}),(0,S.jsx)(b.Button,{size:`small`,variant:`primary`,className:`improvement-demo__delete-confirm`,onClick:async()=>{(!t?.token||await s.change(`delete`,{id:j.id,identity:j.identity,expectedNoteRevision:j.revision}))&&(o(e=>e.filter(e=>e.id!==j.id)),me(null),L(null))},children:x.deleteAction})]})]}):null,ve?(0,S.jsxs)(g,{title:x.handoff,closeLabel:x.closeBatch,returnFocusRef:q,onClose:()=>F(!1),className:`improvement-demo__handoff`,children:[(0,S.jsx)(`p`,{children:x.handoffNotice}),(0,S.jsxs)(`div`,{className:`improvement-demo__batch-context`,children:[(0,S.jsx)(`code`,{children:t?.branch??x.branch}),(0,S.jsxs)(`span`,{children:[Q?x.canvasBatchSource:x.sampleBatchSource,` · `,P.length,` notes`]})]}),(0,S.jsx)(`ol`,{children:P.map(e=>(0,S.jsxs)(`li`,{children:[(0,S.jsxs)(`strong`,{children:[`#`,e.id,` · `,e.target]}),(0,S.jsxs)(`code`,{children:[e.route,` · revision `,e.revision]}),(0,S.jsx)(`p`,{children:e.body}),(0,S.jsx)(`img`,{className:`improvement-demo__thumbnail`,src:e.capture,alt:`${e.capturePlaceholder?x.capturePlaceholder:x.capture}: ${e.target}`}),(0,S.jsx)(`code`,{children:e.selector??`Region: ${e.rect.x}, ${e.rect.y}, ${e.rect.width} × ${e.rect.height}`})]},`${e.id}-${e.revision}`))}),(0,S.jsx)(`p`,{className:`improvement-demo__form-hint`,children:x.batchHint}),(0,S.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>F(!1),children:x.closeHandoff}),(0,S.jsx)(b.Button,{size:`small`,variant:`secondary`,onClick:()=>Ke(`blocked`),children:x.block}),(0,S.jsx)(b.Button,{size:`small`,variant:`primary`,onClick:()=>Ke(`ready`),children:x.complete})]})]}):null]})}export{w as t};
\ No newline at end of file
+import{n as e,r as t}from"./renderer-rolldown-runtime.js";import{E as n,K as r,L as i,M as a,X as o,Y as s,f as c,g as l,q as u,x as d,z as f}from"./renderer-vendor.js";import{a as p,c as m,f as h,m as g,o as _,p as ee,s as v}from"./renderer.js";import{t as y}from"./renderer-improvement-notes-vendor.js";import{t as te}from"./renderer-prototype-canvas-improvement-threads.js";var b=t(o(),1),ne=s(),x=r(),re=y(),S={title:`Pick & polish`,localAuthor:`Local author`,branch:`prototype/welcome`,demo:`UI prototype`,demoNotice:`Sample preview. Notes reset on reload. No Hub API calls or agent work.`,canvasDemoNotice:`UI-only notes over the live preview. Notes reset on canvas reload. Captures, Hub sync and agent results are simulated.`,canvasBatchSource:`Live preview · UI-only batch`,sampleBatchSource:`Local, uncommitted sample`,bridgeUnavailable:`Annotation needs the updated Replica preview bridge. Reconnect or reload the preview after updating the canvas.`,capturePlaceholder:`UI-only capture placeholder`,sourceUnavailable:`You can still save this improvement locally, but it cannot sync without a captured source.`,annotate:`Pick & polish`,fix:`Fix all`,openNotes:e=>`Open improvement notes (${e})`,fixAll:e=>`Fix all (${e})`,notes:`Pick & polish`,closeNotes:`Close pick & polish`,owner:`Only your notes appear here. Authorized API callers can request other authors' notes.`,selectHint:`Click an element or drag a rectangle. For a keyboard region, focus the preview, press Shift+Enter, then use arrows and Enter to choose two corners. Escape exits annotation mode.`,keyboardHint:`Click an element or drag a rectangle. Focus the preview and press Shift+Enter for keyboard region selection; arrows move the corner and Enter selects it.`,regionHint:`Choose two corners in the preview. Use arrow keys to move the corner, then Enter.`,firstCorner:`First corner selected. Choose the second corner.`,regionSmall:`Choose a larger region, at least 8 preview pixels wide and high.`,add:`Add improvement note`,edit:`Edit improvement note`,label:`What should change?`,placeholder:`Describe the improvement you want Copilot to make...`,save:`Save note`,saveEdit:`Save changes`,cancel:`Cancel`,discard:`Discard draft`,keep:`Keep writing`,discardTitle:`Discard your unsaved note?`,discardBody:`Your saved notes will stay unchanged.`,capture:`Captured target`,empty:`A little feedback goes a long way`,emptyBody:`Select an element or draw around an area. Collect notes across screens, then fix them together.`,emptyFilter:`No notes in this view.`,allActive:`Active notes`,readyFilter:`Ready to review`,resolvedFilter:`Resolved`,filter:`Filter improvement notes`,viewTarget:`View target`,noteActions:e=>`Note actions: ${e}`,editAction:`Edit`,deleteAction:`Delete`,deleteTitle:`Delete this improvement note?`,deleteBody:`This removes the note. It does not change the prototype.`,resolve:`Confirm resolved`,solution:`Solution`,solutionUnavailable:`The solution summary is not available in this canvas.`,readyReadOnly:`Ready notes are read-only. Add a new note to request further changes.`,reopen:`Reopen`,retryFix:`Retry fix`,noteSent:`Sent in the simulated batch. No real agent has started.`,noteReady:`Simulated change is ready. Review the target before resolving.`,noteBlocked:`Simulated agent could not safely identify the change. Edit the note or retry.`,handoff:`Demo handoff to Copilot`,handoffNotice:`This is the captured batch, not a live agent request. New notes stay out of this batch.`,complete:`Simulate ready to review`,block:`Simulate blocked`,closeHandoff:`Continue annotating`,sent:`Demo batch captured. No code was changed.`,finished:`Simulated result received. Review each note before resolving.`,fixBusy:`Finish or close the current simulated batch before sending another.`,syncControls:`Demo connection`,offline:`Offline`,connected:`Connected`,syncFailure:`Sync failure`,syncRetry:`Retry demo sync`,syncFailed:`Demo sync failed. Your note remains in this demo; retry when connected.`,syncSuccess:`Demo sync completed.`,targetMissing:`This sample target is no longer available. The saved capture is still shown.`,previewUnavailable:`The demo preview is unavailable. Try selecting the target again.`,saved:`Note added.`,savedLocally:`Notes are saved locally.`,storageLoading:`Loading your notes...`,productionSent:`Notes sent to Copilot. Review the changes before confirming resolution.`,productionBusy:`Copilot is working on the captured batch.`,branchChanged:`The prototype branch changed. Close this draft and select the target again.`,workChanged:`The open improvements changed while syncing. Review them and select Fix all again.`,returnToActive:`Return to active`,regionTarget:`Selected region`,closeComposer:`Close note composer`,closeDiscard:`Close discard confirmation`,closeDelete:`Close delete confirmation`,closeBatch:`Close demo handoff`,exit:`Exit annotation mode`,sampleScreens:`Sample prototype screens`,sampleWorkspace:`Octocat's workspace`,projects:`Projects`,settings:`Settings`,navigationHint:`Navigate between screens. Your notes stay together.`,authorContext:`Across this prototype · Demo author: octocat`,batchHint:`Fix only this batch. Do not commit, push, or publish. Report per-note results for the author to review.`,perNoteResult:`Simulate a result for this note`,batchLabel:e=>`View demo batch (${e})`,statuses:{open:`Open`,sent:`Sent to Copilot`,ready:`Ready to review`,resolved:`Resolved`,blocked:`Needs attention`},sync:{local:`Demo: local only`,synced:`Demo: synced`,failed:`Demo: sync failed`}};function ie(e,t){let n=[e.thread?.originalStatus??e.status,...e.thread?.messages.filter(e=>e.role===`author`).map(e=>e.status)??[]];return{id:e.id,revision:e.revision,body:e.body,capture:e.capture,author:e.thread?.originalAuthor?`@${e.thread.originalAuthor.login}`:e.author===`local`?S.localAuthor:`@${e.author}`,avatarUrl:(e.thread?.originalAuthor??e.authorProfile)?.avatarUrl,target:e.target,path:e.route,status:e.status,originalPending:(e.thread?.originalStatus??e.status)===`open`,...n.includes(`sent`)?{retryStatus:`sent`}:n.includes(`blocked`)?{retryStatus:`blocked`}:{},messages:e.thread?.messages.map(e=>({...e,...e.role===`author`&&e.author?{author:`@${e.author.login}`,avatarUrl:e.author.avatarUrl}:{author:void 0},pending:e.role===`author`&&e.status===`open`}))??(e.result?[{id:`legacy-result`,role:`copilot`,body:e.result,status:e.status===`blocked`?`blocked`:`ready`}]:[]),...t&&(t.status===`resolved`||t.status===`moved`)?{point:t.point}:{}}}function ae(e,t){let n=e.cloneNode(!0);if(!(n instanceof SVGSVGElement))throw Error(`The demo preview could not be captured.`);return n.setAttribute(`viewBox`,`${t.x} ${t.y} ${t.width} ${t.height}`),n.setAttribute(`width`,String(t.width)),n.setAttribute(`height`,String(t.height)),n.removeAttribute(`class`),`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(n))}`}var oe=[{id:`projects-heading`,label:`Projects heading`,route:`/projects`,rect:{x:40,y:35,width:640,height:78}},{id:`new-project`,label:`New project button`,route:`/projects`,rect:{x:764,y:42,width:156,height:42}},{id:`activity`,label:`Activity summary`,route:`/projects`,rect:{x:40,y:144,width:880,height:100}},{id:`welcome-card`,label:`Welcome project card`,route:`/projects`,rect:{x:40,y:285,width:420,height:230}},{id:`onboarding-card`,label:`Onboarding project card`,route:`/projects`,rect:{x:500,y:285,width:420,height:230}},{id:`settings-heading`,label:`Settings heading`,route:`/settings`,rect:{x:40,y:35,width:700,height:78}},{id:`workspace-name`,label:`Workspace name field`,route:`/settings`,rect:{x:40,y:152,width:880,height:138}},{id:`notifications`,label:`Notifications settings`,route:`/settings`,rect:{x:40,y:318,width:880,height:130}},{id:`save-settings`,label:`Save settings button`,route:`/settings`,rect:{x:40,y:478,width:166,height:42}}],se=[{id:1,kind:`improvement_note`,author:`octocat`,body:`Make the primary action more prominent and shorten the label to 'New project'.`,route:`/projects`,target:`New project button`,selector:`[data-improvement-target="new-project"]`,rect:{x:764,y:42,width:156,height:42},capture:``,status:`open`,sync:`local`,revision:1},{id:2,kind:`improvement_note`,author:`octocat`,body:`Give the two cards a little more breathing room and align their metadata.`,route:`/projects`,target:`Selected region`,selector:null,rect:{x:28,y:273,width:904,height:250},capture:``,status:`open`,sync:`local`,revision:1},{id:3,kind:`improvement_note`,author:`octocat`,body:`Explain what notifications this switch controls before asking me to enable it.`,route:`/settings`,target:`Notifications settings`,selector:`[data-improvement-target="notifications"]`,rect:{x:40,y:318,width:880,height:130},capture:``,status:`ready`,sync:`synced`,revision:1}],C=u();function ce({route:e}){return(0,C.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 960 560`,className:`improvement-demo__scene`,role:`group`,"aria-label":`Sample prototype ${e}`,fontFamily:`system-ui, sans-serif`,children:[(0,C.jsx)(`rect`,{width:`960`,height:`560`,fill:`#f8fafc`}),oe.filter(t=>t.route===e).map(t=>(0,C.jsxs)(`g`,{"data-improvement-target":t.id,children:[(0,C.jsx)(`rect`,{...t.rect,rx:`10`,fill:t.id.includes(`heading`)?`#f8fafc`:t.id===`new-project`||t.id===`save-settings`?`#155d3d`:`#ffffff`,stroke:t.id.includes(`heading`)?`none`:`#dce3e9`}),t.id.includes(`heading`)?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`40`,y:`67`,fill:`#172b24`,fontSize:`28`,fontWeight:`650`,children:e===`/projects`?`Your projects`:`Workspace settings`}),(0,C.jsx)(`text`,{x:`40`,y:`99`,fill:`#596b65`,fontSize:`15`,children:e===`/projects`?`A home for your team's next great idea.`:`Make this space work for your team.`})]}):t.id===`new-project`||t.id===`save-settings`?(0,C.jsx)(`text`,{x:t.rect.x+t.rect.width/2,y:t.rect.y+26,textAnchor:`middle`,fill:`#ffffff`,fontSize:`14`,fontWeight:`600`,children:t.id===`new-project`?`+ Create project`:`Save settings`}):t.id===`activity`?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`64`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`THIS WEEK`}),(0,C.jsx)(`text`,{x:`64`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`12 prototypes`}),(0,C.jsx)(`text`,{x:`348`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`IN REVIEW`}),(0,C.jsx)(`text`,{x:`348`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`4 conversations`}),(0,C.jsx)(`text`,{x:`642`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`YOUR TEAM`}),(0,C.jsx)(`text`,{x:`642`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`Making things happen`})]}):t.id.includes(`card`)?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`rect`,{x:t.rect.x+16,y:`301`,width:`388`,height:`100`,rx:`6`,fill:t.id===`welcome-card`?`#e3efe9`:`#eee9f7`}),(0,C.jsx)(`rect`,{x:t.rect.x+40,y:`323`,width:`100`,height:`10`,rx:`4`,fill:`#ffffff`}),(0,C.jsx)(`rect`,{x:t.rect.x+40,y:`345`,width:`196`,height:`6`,rx:`3`,fill:`#ffffff`}),(0,C.jsx)(`rect`,{x:t.rect.x+40,y:`363`,width:`156`,height:`6`,rx:`3`,fill:`#ffffff`}),(0,C.jsx)(`text`,{x:t.rect.x+24,y:`437`,fill:`#172b24`,fontSize:`18`,fontWeight:`600`,children:t.id===`welcome-card`?`Welcome experience`:`A better onboarding`}),(0,C.jsx)(`text`,{x:t.rect.x+24,y:`463`,fill:`#596b65`,fontSize:`13`,children:t.id===`welcome-card`?`prototype/welcome`:`prototype/onboarding`}),(0,C.jsx)(`circle`,{cx:t.rect.x+30,cy:`490`,r:`5`,fill:`#2a7954`}),(0,C.jsx)(`text`,{x:t.rect.x+44,y:`495`,fill:`#596b65`,fontSize:`12`,children:`Updated today · The Octocat`})]}):t.id===`workspace-name`?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`64`,y:`184`,fill:`#172b24`,fontSize:`17`,fontWeight:`600`,children:`Workspace name`}),(0,C.jsx)(`text`,{x:`64`,y:`209`,fill:`#596b65`,fontSize:`13`,children:`This is how your workspace appears to your team.`}),(0,C.jsx)(`rect`,{x:`64`,y:`230`,width:`600`,height:`38`,rx:`6`,fill:`#f8fafc`,stroke:`#dce3e9`}),(0,C.jsx)(`text`,{x:`78`,y:`255`,fill:`#172b24`,fontSize:`14`,children:`Octocat's workspace`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`64`,y:`351`,fill:`#172b24`,fontSize:`17`,fontWeight:`600`,children:`Notifications`}),(0,C.jsx)(`text`,{x:`64`,y:`385`,fill:`#596b65`,fontSize:`14`,children:`Keep me in the loop`}),(0,C.jsx)(`rect`,{x:`824`,y:`366`,width:`48`,height:`26`,rx:`13`,fill:`#155d3d`}),(0,C.jsx)(`circle`,{cx:`857`,cy:`379`,r:`9`,fill:`#ffffff`})]})]},t.id))]})}function le(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ue({frameRef:e,prototypeUrl:t,previewUrl:n,notes:r,annotating:i,composing:a,onSelect:o,onRoute:s,onCancel:c,onProblem:l}){let u=n??t,[d,f]=(0,b.useState)(null),[p,h]=(0,b.useState)(new Map),g=JSON.stringify(r.filter(e=>e.anchor).slice(0,200).map(e=>({id:e.id,anchor:e.anchor}))),ee=(0,b.useEffectEvent)(e=>{if(!i||a)return;let t=v.safeParse(e);t.success?o(t.data):(c(),l(S.previewUnavailable))}),y=(0,b.useCallback)((t,n={})=>{u&&d&&e?.current?.contentWindow&&e.current.contentWindow.postMessage({type:t,nonce:d.nonce,...n},new URL(u).origin)},[d,e,u]);return(0,b.useEffect)(()=>{let t=e?.current;if(!t||!u)return;let n=new URL(u).origin,r=crypto.randomUUID(),i=Date.now(),a=JSON.parse(g);function o(){t?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:r},n),t?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:r,anchors:a},n)}function d(){r=crypto.randomUUID(),i=Date.now(),f({nonce:r,ready:!1}),h(new Map),c(),o()}function p(e){let a=e.data;if(e.source===t?.contentWindow&&e.origin===n&&le(a)&&a.nonce===r){if(a.type===`replica:canvas:ready`){let e=m.safeParse(a.route);if(a.protocolVersion!==1||a.improvementSelection!==!0||!e.success){f({nonce:r,ready:!1}),l(S.bridgeUnavailable);return}i=Date.now(),f(e=>e?.nonce===r&&e.ready?e:{nonce:r,ready:!0}),s(e.data.pathname+e.data.search+e.data.hash)}else if(a.type===`replica:canvas:selected`)ee(a.anchor);else if(a.type===`replica:canvas:resolved`&&Array.isArray(a.results)){let e=new Map;for(let t of a.results){if(!le(t))continue;let n=_.safeParse({commentId:t.id,status:`resolved`,point:{x:t.x,y:t.y},rect:t.rect??{x:t.x,y:t.y,width:1,height:1}});n.success&&e.set(n.data.commentId,n.data)}h(e)}else a.type===`replica:canvas:selection-failed`||a.type===`replica:canvas:bridge-error`?(c(),l(a.reason===`area-too-small`?S.regionSmall:S.bridgeUnavailable)):a.type===`replica:canvas:selection-cancelled`?a.reason!==`command`&&c():a.type===`replica:canvas:conversation-dismiss-requested`&&window.dispatchEvent(new Event(`replica:review-dismiss`))}}t.addEventListener(`load`,d),window.addEventListener(`message`,p),f({nonce:r,ready:!1}),o();let v=window.setInterval(()=>{Date.now()-i>2e4&&(f({nonce:r,ready:!1}),h(new Map),c(),l(S.bridgeUnavailable)),o()},2e3);return()=>{t.removeEventListener(`load`,d),window.removeEventListener(`message`,p),window.clearInterval(v),t.contentWindow?.postMessage({type:`replica:canvas:cancel-selection`,nonce:r},n),t.contentWindow?.postMessage({type:`replica:canvas:clear-selection`,nonce:r},n)}},[g,e,u,c,l,s]),(0,b.useEffect)(()=>{d?.ready&&(i&&!a?y(`replica:canvas:select`,{mode:`improvement`}):y(`replica:canvas:cancel-selection`),a||y(`replica:canvas:clear-selection`))},[i,a,d?.ready,y]),{ready:d?.ready===!0,resolutions:p}}function de(e){let[t,n]=(0,b.useState)(null),[r,i]=(0,b.useState)(``),[a,o]=(0,b.useState)(``),[s,c]=(0,b.useState)(!1),l=(0,b.useRef)(null),u=(0,b.useRef)(!1),d=(0,b.useRef)(null),f=(0,b.useRef)(!1),m=(0,b.useRef)(0);function h(e){f.current&&(l.current=e,n(e))}(0,b.useEffect)(()=>{if(!e)return;f.current=!0;let t=!1,r=!1,a=0;async function s(){if(u.current||r)return;r=!0;let s=m.current;try{let n=await p(`/api/improvement-notes`,e);if(u.current||s!==m.current||t)return;if(h(n),Date.now()-a>15e3){a=Date.now();let r=p(`/api/improvement-notes/sync`,e,{method:`POST`,body:JSON.stringify({identity:n.identity,revision:n.revision})}).then(e=>{t||h(e)});d.current=r;try{await r}finally{d.current===r&&(d.current=null)}}t||o(``)}catch(e){t||(e instanceof Error&&`statusCode`in e&&e.statusCode===403&&(l.current=null,n(null),i(``)),o(e instanceof Error?e.message:String(e)))}finally{r=!1}}s();let c=window.setInterval(()=>void s(),3e3);return()=>{f.current=!1,t=!0,window.clearInterval(c)}},[e]);async function g(t,n={}){if(!e||!l.current||u.current)return!1;let r=l.current.identity,a=l.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`);u.current=!0,m.current++,c(!0),i(``);try{if(await d.current,!f.current)return!1;if(!l.current||l.current.identity!==r)throw Error(S.branchChanged);if(t===`fix`&&l.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`)!==a)throw Error(S.workChanged);return h(await p(t===`fix`?`/api/improvement-notes/fix`:`/api/improvement-notes`,e,{method:`POST`,body:JSON.stringify({identity:l.current.identity,revision:l.current.revision,operation:t,...n})})),!0}catch(e){return f.current&&i(e instanceof Error?e.message:String(e)),!1}finally{u.current=!1,f.current&&c(!1)}}async function _(){if(!e)return null;i(``);try{return await p(`/api/improvement-notes/capture`,e,{method:`POST`})}catch(e){return i(`${e instanceof Error?e.message:String(e)} ${S.sourceUnavailable}`),null}}return{state:t,error:r||a,busy:s,change:g,capture:_}}var fe=e({ImprovementNotesPrototype:()=>pe});function pe({initial:e=`empty`,canvas:t}){let[r,o]=(0,b.useState)(()=>se.slice(0,e===`empty`?0:e===`single`?1:3).map(e=>{let t=new DOMParser().parseFromString((0,re.renderToStaticMarkup)((0,C.jsx)(ce,{route:e.route})),`image/svg+xml`).documentElement;if(!(t instanceof SVGSVGElement))throw Error(`The sample preview could not be captured.`);return{...e,capture:ae(t,e.rect)}})),s=de(t?.token),u=s.state?.syncError===`Notes are saved locally until Hub discovers this branch.`?null:s.state?.syncError,p=t?.token?s.state?.notes??[]:r,[m,_]=(0,b.useState)(`/projects`),[v,y]=(0,b.useState)(!1),[le,fe]=(0,b.useState)(!1),[pe,me]=(0,b.useState)(null),he=(0,b.useRef)(0),[ge,w]=(0,b.useState)(!0),[T,E]=(0,b.useState)(null),[D,O]=(0,b.useState)(null),[k,A]=(0,b.useState)(``),[_e,ve]=(0,b.useState)(!1),[j,ye]=(0,b.useState)(null),[M,N]=(0,b.useState)(`active`),[P,be]=(0,b.useState)(`offline`),[F,xe]=(0,b.useState)([]),[Se,I]=(0,b.useState)(!1),[Ce,L]=(0,b.useState)(``),[we,R]=(0,b.useState)(null),[z,B]=(0,b.useState)(!1),[V,Te]=(0,b.useState)({x:160,y:160}),[H,U]=(0,b.useState)(null),[Ee,De]=(0,b.useState)(null),[W,G]=(0,b.useState)(null),K=(0,b.useRef)(null),Oe=(0,b.useRef)(null),q=(0,b.useRef)(null),ke=(0,b.useRef)(null),J=(0,b.useRef)(null),Ae=(0,b.useRef)(e===`empty`?1:e===`single`?2:4),Y=p.filter(e=>e.status===`open`),X=!t?.token||s.state!==null,je=T!==null&&!_e&&X;(0,b.useLayoutEffect)(()=>{je&&ke.current?.focus()},[je]);let Me=!!t?.token&&T!==null&&T.identity!==s.state?.identity,Ne=D!==null&&p.some(e=>e.id===D&&e.status===`ready`),Pe=p.filter(e=>e.status!==`resolved`).length,Fe=M===`ready`?S.readyFilter:M===`resolved`?S.resolvedFilter:S.allActive,Ie=p.filter(e=>M===`resolved`?e.status===`resolved`:M===`ready`?e.status===`ready`:e.status!==`resolved`),Le=!!s.state?.activeBatch||F.some(e=>p.some(t=>t.id===e.id&&t.revision===e.revision&&t.status===`sent`)),Re=p.filter(e=>e.route===m&&e.status!==`resolved`),ze=p.find(e=>e.id===we&&e.route===m),Be=(0,b.useCallback)(e=>{let t=e.kind===`element`?e.accessibleName||e.tagName:S.regionTarget;E({identity:pe?.identity??s.state?.identity,sourceId:pe?.sourceId,anchor:e,route:e.route.pathname+e.route.search+e.route.hash,target:t,selector:e.kind===`element`?e.selector:null,rect:e.rect,capture:``,capturePlaceholder:!0}),O(null),A(``)},[s.state?.identity,pe]),Ve=(0,b.useCallback)(()=>{he.current++,fe(!1),q.current?.getAttribute(`aria-pressed`)===`true`&&q.current.focus(),y(!1)},[]);async function He(){let e=++he.current;fe(!0);let n=t?.token?await s.capture():null;e===he.current&&(fe(!1),me(n),y(!0),w(!1),L(S.selectHint),B(!1),U(null),G(null))}let Ue=t?.frameRef,Z=ue({frameRef:Ue,prototypeUrl:t?.prototypeUrl,previewUrl:t?.previewUrl,notes:p,annotating:v,composing:T!==null,onSelect:Be,onRoute:_,onCancel:Ve,onProblem:L}),Q=!!t;(0,b.useLayoutEffect)(()=>{Ue&&De(Ue.current?.closest(`.canvas-shell`)?.querySelector(`#canvas-improvement-controls`)??null)},[Ue]);function We(){w(!0),t?.onOpenNotes()}function Ge(e,t){let n=Oe.current?.querySelector(`svg`);n?(E({route:m,target:t?.label??S.regionTarget,selector:t?`[data-improvement-target="${t.id}"]`:null,rect:e,capture:ae(n,e)}),A(``),O(null),G(null),U(null),B(!1)):L(S.previewUnavailable)}function Ke(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),width:Math.abs(t.x-e.x),height:Math.abs(t.y-e.y)}}function qe(e){let t=Oe.current?.getBoundingClientRect();return!t?.width||!t.height?(L(S.previewUnavailable),null):{x:Math.max(0,Math.min(960,(e.clientX-t.left)/t.width*960)),y:Math.max(0,Math.min(560,(e.clientY-t.top)/t.height*560))}}function Je(e,t){let n=Ke(e,t);G(null),U(null),n.width<8||n.height<8?L(S.regionSmall):Ge(n)}function Ye(){let e=T?.originalBody??``;k===e?(E(null),O(null),t?.token&&Ve()):ve(!0)}async function Xe(){if(Ne){L(S.readyReadOnly);return}if(!T||!k.trim()||s.busy||Me)return;if(t?.token){if(!await s.change(D===null?`create`:`edit`,{id:D,identity:T.identity,sourceId:T.sourceId,expectedNoteRevision:T.noteRevision,body:k.trim(),anchor:T.anchor,capture:T.capturePlaceholder?``:T.capture}))return;N(`active`),We(),Ve(),E(null),O(null),L(S.saved);return}let e=P===`connected`?`synced`:P===`failed`?`failed`:`local`;if(D!==null)o(t=>t.map(t=>t.id===D?{...t,body:k.trim(),revision:t.revision+1,status:`open`,sync:e}:t));else{let t={...T,id:Ae.current++,body:k.trim(),kind:`improvement_note`,author:`octocat`,status:`open`,sync:e,revision:1};o(e=>[...e,t]),R(t.id)}N(`active`),We(),E(null),O(null),L(P===`failed`?S.syncFailed:S.saved)}async function Ze(){Y.length&&!Le&&(t?.token?await s.change(`fix`)&&L(S.productionSent):(xe(Y.map(e=>({...e}))),o(e=>e.map(e=>e.status===`open`?{...e,status:`sent`}:e)),I(!0),L(S.sent)))}function Qe(e){o(t=>t.map(t=>F.some(e=>e.id===t.id&&e.revision===t.revision)&&t.status===`sent`?{...t,status:e}:t)),I(!1),w(!0),L(S.finished)}async function $(e,n){t?.token?await s.change(`status`,{id:e.id,status:n,identity:s.state?.identity,expectedNoteRevision:e.revision})&&J.current?.focus():(o(t=>t.map(t=>t.id===e.id?{...t,status:n,sync:P===`connected`?`synced`:P===`failed`?`failed`:`local`}:t)),J.current?.focus())}let $e=(0,C.jsx)(`div`,{className:`improvement-demo__actions`,children:(0,C.jsxs)(`div`,{role:`group`,"aria-label":S.title,className:`improvement-demo__split`,children:[(0,C.jsx)(x.Button,{ref:q,size:`small`,variant:`secondary`,className:`canvas-toolbar-compact-button`,"aria-label":S.annotate,title:S.annotate,leadingVisual:(0,C.jsx)(a,{}),"aria-pressed":v,disabled:le||Q&&(!Z.ready||!!t?.token&&!s.state),onClick:()=>{v?Ve():He()},children:(0,C.jsx)(`span`,{className:`canvas-toolbar-button-label`,children:S.annotate})}),(0,C.jsx)(x.Button,{ref:J,size:`small`,variant:`secondary`,"aria-label":S.openNotes(Pe),"aria-expanded":ge&&!t?.hubOpen,onClick:We,children:(0,C.jsx)(ee,{children:Pe})})]})});return(0,C.jsxs)(`section`,{"aria-label":S.title,className:`improvement-demo${Q?` improvement-demo--embedded`:``}`,onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||T||j!==null||Se||(y(!1),B(!1),U(null),G(null),K.current=null,v&&q.current?.focus())},children:[Q?null:(0,C.jsxs)(`header`,{className:`improvement-demo__browser`,children:[(0,C.jsx)(`span`,{className:`improvement-demo__browser-dot`}),(0,C.jsxs)(`code`,{children:[`localhost:5173`,m]}),(0,C.jsx)(`span`,{className:`improvement-demo__badge`,children:S.demo})]}),Q?Ee&&(0,ne.createPortal)($e,Ee):(0,C.jsxs)(`header`,{className:`improvement-demo__toolbar`,children:[(0,C.jsxs)(`div`,{className:`improvement-demo__identity`,children:[(0,C.jsx)(`strong`,{children:S.branch}),(0,C.jsx)(`span`,{children:S.title})]}),$e]}),Q?null:(0,C.jsx)(`div`,{className:`improvement-demo__disclaimer`,children:S.demoNotice}),(0,C.jsxs)(`div`,{className:`improvement-demo__workspace`,children:[Q?null:(0,C.jsxs)(`section`,{className:`improvement-demo__preview`,"aria-label":`Prototype preview`,children:[(0,C.jsxs)(`nav`,{className:`improvement-demo__pages`,"aria-label":S.sampleScreens,children:[(0,C.jsx)(`span`,{className:`improvement-demo__app-name`,children:S.sampleWorkspace}),[`/projects`,`/settings`].map(e=>(0,C.jsx)(`button`,{type:`button`,"aria-current":m===e?`page`:void 0,onClick:()=>{_(e),R(null),U(null),G(null)},children:e===`/projects`?S.projects:S.settings},e))]}),(0,C.jsxs)(`div`,{ref:Oe,className:`improvement-demo__stage${v?` improvement-demo__stage--selecting`:``}`,role:z?`button`:`group`,tabIndex:v?0:-1,"aria-describedby":`improvement-selection-hint`,"aria-label":z?`Choose region corners`:`Selectable preview`,onKeyDown:e=>{if(e.key===`Escape`)e.preventDefault(),y(!1),B(!1),U(null),G(null),K.current=null,q.current?.focus();else if(v&&e.shiftKey&&e.key===`Enter`)e.preventDefault(),B(!z),U(null),G(null),L(z?S.selectHint:S.regionHint);else if(z&&[`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Enter`,` `].includes(e.key)){if(e.preventDefault(),e.key===`Enter`||e.key===` `)H?Je(H,V):(U(V),L(S.firstCorner));else{let t={x:Math.max(0,Math.min(960,V.x+(e.key===`ArrowRight`?10:e.key===`ArrowLeft`?-10:0))),y:Math.max(0,Math.min(560,V.y+(e.key===`ArrowDown`?10:e.key===`ArrowUp`?-10:0)))};Te(t),H&&G(Ke(H,t))}}},onPointerDown:e=>{if(!v||e.button!==0||e.target instanceof Element&&e.target.closest(`[data-note-pin]`))return;e.preventDefault();let t=qe(e);if(!t)return;if(z){Te(t),K.current={start:t,target:void 0,pointerId:e.pointerId},e.currentTarget.setPointerCapture(e.pointerId);return}let n=e.target instanceof Element?e.target.closest(`[data-improvement-target]`):null;K.current={start:t,target:oe.find(e=>e.id===n?.getAttribute(`data-improvement-target`)),pointerId:e.pointerId},e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:e=>{if(!K.current||K.current.pointerId!==e.pointerId)return;let t=qe(e);if(!t)return;if(z){Te(t),H&&G(Ke(H,t));return}let n=Ke(K.current.start,t);Math.hypot(n.width,n.height)>=8&&G(n)},onPointerUp:e=>{let t=K.current;if(!t||t.pointerId!==e.pointerId)return;K.current=null,e.currentTarget.releasePointerCapture(e.pointerId);let n=qe(e);if(!n)return;if(z){Te(n),H?Je(H,n):(U(n),L(S.firstCorner));return}let r=Ke(t.start,n);Math.hypot(r.width,r.height)>=8?Je(t.start,n):t.target&&Ge(t.target.rect,t.target),G(null)},onPointerCancel:()=>{K.current=null,G(null)},onLostPointerCapture:()=>{K.current=null,G(null)},children:[(0,C.jsx)(ce,{route:m}),v&&!z?oe.filter(e=>e.route===m).map(e=>(0,C.jsx)(`button`,{type:`button`,"data-improvement-target":e.id,className:`improvement-demo__element-target`,"aria-label":e.label,style:{left:`${e.rect.x/960*100}%`,top:`${e.rect.y/560*100}%`,width:`${e.rect.width/960*100}%`,height:`${e.rect.height/560*100}%`},onClick:()=>{T||Ge(e.rect,e)}},e.id)):null,W?(0,C.jsx)(`div`,{className:`improvement-demo__outline`,style:{left:`${W.x/960*100}%`,top:`${W.y/560*100}%`,width:`${W.width/960*100}%`,height:`${W.height/560*100}%`}}):null,z?(0,C.jsx)(`span`,{className:`improvement-demo__corner`,style:{left:`${V.x/960*100}%`,top:`${V.y/560*100}%`}}):null,Re.map(e=>(0,C.jsx)(`button`,{"data-note-pin":!0,type:`button`,className:`improvement-demo__pin${we===e.id?` improvement-demo__pin--selected`:``}`,style:{left:`${Math.min(e.rect.x+e.rect.width,930)/960*100}%`,top:`${e.rect.y/560*100}%`},"aria-label":`Open improvement note ${e.id}: ${e.target}`,onClick:()=>{R(e.id),w(!0),N(`active`)},children:e.id},e.id)),ze?(0,C.jsx)(`div`,{className:`improvement-demo__outline improvement-demo__outline--saved`,style:{left:`${ze.rect.x/960*100}%`,top:`${ze.rect.y/560*100}%`,width:`${ze.rect.width/960*100}%`,height:`${ze.rect.height/560*100}%`}}):null]}),(0,C.jsxs)(`footer`,{className:`improvement-demo__preview-footer`,children:[(0,C.jsx)(`span`,{id:`improvement-selection-hint`,children:v?S.keyboardHint:S.navigationHint}),(0,C.jsx)(`span`,{children:`960 × 560`})]})]}),Q&&!t?.token?(0,C.jsx)(`div`,{className:`canvas-improvement-markers`,children:Re.map(e=>{let t=Z.resolutions.get(e.id);return!t||t.status!==`resolved`&&t.status!==`moved`?null:(0,C.jsx)(`button`,{type:`button`,className:`improvement-demo__pin`,style:{left:t.point.x,top:t.point.y},"aria-label":`Open improvement note ${e.id}: ${e.target}`,onClick:()=>{R(e.id),N(e.status===`ready`?`ready`:`active`),We()},children:e.id},e.id)})}):null,t?.token?(0,C.jsx)(te,{identity:s.state?.identity??``,controls:!1,returnFocusRef:J,open:ge&&!t.hubOpen&&!T,active:(ge||v)&&!t.hubOpen&&!T,onOpen:We,onClose:()=>{w(!1),J.current?.focus()},threads:p.map(e=>ie(e,Z.resolutions.get(e.id))),busy:s.busy||!s.state,activeBatch:!!s.state?.activeBatch,error:s.error||u||s.state?.profileError||(s.state?Z.ready?``:S.bridgeUnavailable:S.storageLoading),onSelect:e=>{let n=p.find(t=>t.id===e);n&&n.route!==m&&t.onNavigate(new URL(n.route,t.prototypeUrl).href)},onFollowUp:(e,t)=>s.change(`follow-up`,{id:e.id,expectedNoteRevision:e.revision,body:t}),onResolve:e=>s.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`resolved`}),onDelete:e=>s.change(`delete`,{id:e.id,expectedNoteRevision:e.revision}),onFix:()=>s.change(`fix`),onRetry:e=>s.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`open`})}):(0,C.jsxs)(h,{className:`improvement-notes-sidebar`,contentClassName:`improvement-demo__panel`,title:S.notes,open:ge&&!t?.hubOpen,closeLabel:S.closeNotes,onClose:()=>{w(!1),J.current?.focus()},children:[s.error&&(!T||!X)?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:s.error}):null,u?(0,C.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:u}):null,t?.token&&!s.state?(0,C.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:S.storageLoading}):null,Q&&!Z.ready?(0,C.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:S.bridgeUnavailable}):null,(0,C.jsxs)(`div`,{className:`improvement-demo__filters`,children:[(0,C.jsxs)(x.ActionMenu,{size:`small`,selectionVariant:`single`,menuAlignment:`start`,onSelect:N,children:[(0,C.jsx)(x.ActionMenu.Button,{size:`small`,variant:`secondary`,"aria-label":`${S.filter}: ${Fe}`,children:Fe}),(0,C.jsx)(x.ActionMenu.Overlay,{"aria-label":S.filter,children:[{value:`active`,label:S.allActive},{value:`ready`,label:S.readyFilter},{value:`resolved`,label:S.resolvedFilter}].map(e=>(0,C.jsx)(x.ActionMenu.Item,{value:e.value,selected:M===e.value,role:`menuitemradio`,onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:e.label},e.value))})]}),M===`active`?(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,className:`improvement-demo__fix-all`,leadingVisual:(0,C.jsx)(l,{}),"aria-label":S.fixAll(Y.length),disabled:!Y.length||Le||s.busy,title:Le?Q?S.productionBusy:S.fixBusy:void 0,onClick:()=>void Ze(),children:(0,C.jsxs)(`span`,{className:`improvement-demo__fix-label`,children:[S.fix,(0,C.jsx)(ee,{children:Y.length})]})}):null]}),(0,C.jsxs)(`div`,{className:`improvement-demo__note-list`,children:[Ie.length?null:(0,C.jsxs)(`div`,{className:`improvement-demo__empty`,children:[(0,C.jsx)(d,{size:28}),(0,C.jsx)(`h2`,{children:p.length?S.emptyFilter:S.empty}),p.length?null:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{children:S.emptyBody}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,leadingVisual:(0,C.jsx)(a,{}),disabled:le||Q&&(!Z.ready||!X),onClick:()=>{He(),q.current?.focus()},children:S.annotate})]})]}),Ie.map(e=>(0,C.jsxs)(`article`,{"aria-label":`Improvement note ${e.id}`,className:`improvement-demo__note${we===e.id?` improvement-demo__note--focused`:``}`,children:[(0,C.jsxs)(`div`,{className:`improvement-demo__note-header`,children:[e.status===`ready`?(0,C.jsx)(`span`,{className:`improvement-demo__status improvement-demo__status--ready`,children:S.statuses.ready}):null,(0,C.jsx)(`p`,{className:`improvement-demo__body`,children:e.body}),(0,C.jsx)(`div`,{className:`improvement-demo__note-menu`,children:(0,C.jsxs)(x.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,children:[(0,C.jsx)(x.ActionMenu.Button,{className:`improvement-demo__menu-trigger`,variant:`subtle`,"aria-label":S.noteActions(e.target),leadingVisual:(0,C.jsx)(n,{size:16}),children:``}),(0,C.jsxs)(x.ActionMenu.Overlay,{"aria-label":S.noteActions(e.target),children:[(0,C.jsx)(x.ActionMenu.Item,{value:`edit`,className:`improvement-demo__menu-item`,leadingVisual:(0,C.jsx)(d,{size:16}),disabled:e.status===`ready`,title:e.status===`ready`?S.readyReadOnly:void 0,onClick:()=>{e.status===`ready`?L(S.readyReadOnly):(E({...e,identity:s.state?.identity,noteRevision:e.revision,originalBody:e.body}),O(e.id),A(e.body))},onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:S.editAction}),(0,C.jsx)(x.ActionMenu.Item,{value:`delete`,className:`improvement-demo__menu-item improvement-demo__delete-item`,leadingVisual:(0,C.jsx)(c,{size:16}),onClick:()=>ye({id:e.id,revision:e.revision,body:e.body,identity:s.state?.identity}),onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:S.deleteAction})]})]})})]}),(0,C.jsxs)(`div`,{className:`improvement-demo__note-meta`,children:[(0,C.jsx)(`span`,{children:e.target}),(0,C.jsx)(`span`,{className:`improvement-demo__note-separator`,"aria-hidden":`true`}),(0,C.jsx)(`button`,{className:`improvement-demo__note-route`,type:`button`,"aria-label":`${S.viewTarget}: ${e.target} (${e.route})`,onClick:()=>{if(t&&e.anchor){let n=new URL(t.prototypeUrl);n.pathname=e.anchor.route.pathname,n.search=e.anchor.route.search,n.hash=e.anchor.route.hash,t.onNavigate(n.href)}else _(e.route);R(e.id)},children:(0,C.jsx)(`code`,{children:e.route})})]}),e.status!==`open`&&e.status!==`ready`?(0,C.jsx)(`span`,{className:`improvement-demo__status improvement-demo__status--${e.status}`,children:S.statuses[e.status]}):null,e.status===`ready`?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`details`,{className:`improvement-demo__solution`,children:[(0,C.jsxs)(`summary`,{children:[(0,C.jsx)(i,{size:14,"aria-hidden":`true`}),S.solution]}),(0,C.jsx)(`p`,{children:e.result||(Q?S.solutionUnavailable:S.noteReady)})]}),(0,C.jsx)(`p`,{className:`improvement-demo__read-only`,children:S.readyReadOnly})]}):e.result?(0,C.jsx)(`p`,{className:`improvement-demo__result`,children:e.result}):null,e.capture&&!e.capturePlaceholder?(0,C.jsx)(`img`,{className:`improvement-demo__thumbnail`,src:e.capture,alt:`${e.capturePlaceholder?S.capturePlaceholder:S.capture}: ${e.target}`}):null,!Q&&(e.status===`sent`||e.status===`blocked`)?(0,C.jsx)(`p`,{className:`improvement-demo__result`,children:e.status===`sent`?S.noteSent:S.noteBlocked}):null,(0,C.jsxs)(`div`,{className:`improvement-demo__note-actions`,children:[Q&&e.status===`sent`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>void $(e,`open`),children:S.returnToActive}):null,e.status===`ready`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,leadingVisual:(0,C.jsx)(f,{}),onClick:()=>$(e,`resolved`),children:S.resolve}):null,e.status===`resolved`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`open`),children:S.reopen}):null,e.status===`blocked`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`open`),children:S.retryFix}):null]}),!Q&&e.status===`sent`?(0,C.jsxs)(`details`,{className:`improvement-demo__simulation`,children:[(0,C.jsx)(`summary`,{children:S.perNoteResult}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`ready`),children:S.complete}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`blocked`),children:S.block})]}):null,Q?null:(0,C.jsx)(`small`,{className:e.sync===`failed`?`improvement-demo__sync-error`:``,children:S.sync[e.sync]})]},e.id))]}),!Q&&Le?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>I(!0),children:S.batchLabel(F.length)}):null,Q?null:(0,C.jsxs)(`footer`,{className:`improvement-demo__connection`,children:[(0,C.jsxs)(`label`,{children:[S.syncControls,(0,C.jsxs)(`select`,{value:P,onChange:e=>{let t=e.target.value;(t===`offline`||t===`connected`||t===`failed`)&&(be(t),t!==`offline`&&o(e=>e.map(e=>({...e,sync:t===`connected`?`synced`:`failed`}))))},children:[(0,C.jsx)(`option`,{value:`offline`,children:S.offline}),(0,C.jsx)(`option`,{value:`connected`,children:S.connected}),(0,C.jsx)(`option`,{value:`failed`,children:S.syncFailure})]})]}),p.some(e=>e.sync===`failed`)?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{children:S.syncFailed}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>{be(`connected`),o(e=>e.map(e=>({...e,sync:`synced`}))),L(S.syncSuccess)},children:S.syncRetry})]}):null]})]})]}),(0,C.jsx)(`p`,{className:`improvement-demo__announcement${Q?` visually-hidden`:``}`,role:`status`,children:Ce}),je?(0,C.jsxs)(g,{title:D===null?S.add:S.edit,closeLabel:S.closeComposer,returnFocusRef:q,onClose:Ye,className:`improvement-demo__composer`,children:[s.error?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:s.error}):null,Me?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:S.branchChanged}):null,Ne?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:S.readyReadOnly}):null,(0,C.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),Xe()},children:[(0,C.jsxs)(x.FormControl,{fullWidth:!0,children:[(0,C.jsx)(x.FormControl.Label,{children:S.label}),(0,C.jsx)(x.Textarea,{ref:ke,value:k,maxLength:1e4,rows:4,placeholder:S.placeholder,readOnly:Ne,onChange:e=>A(e.target.value),required:!0})]}),(0,C.jsx)(`div`,{className:`improvement-demo__dialog-actions`,children:(0,C.jsx)(x.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!k.trim()||s.busy||Me||Ne,children:D===null?S.save:S.saveEdit})})]})]}):null,_e&&X?(0,C.jsxs)(g,{title:S.discardTitle,closeLabel:S.closeDiscard,returnFocusRef:q,onClose:()=>ve(!1),children:[(0,C.jsx)(`p`,{children:S.discardBody}),(0,C.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>ve(!1),children:S.keep}),(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,onClick:()=>{ve(!1),E(null),O(null),A(``),t?.token&&Ve()},children:S.discard})]})]}):null,j!==null&&X?(0,C.jsxs)(g,{title:S.deleteTitle,closeLabel:S.closeDelete,returnFocusRef:J,onClose:()=>ye(null),children:[(0,C.jsx)(`p`,{children:S.deleteBody}),(0,C.jsx)(`blockquote`,{className:`improvement-demo__delete-preview`,children:j.body}),(0,C.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>ye(null),children:S.cancel}),(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,className:`improvement-demo__delete-confirm`,onClick:async()=>{(!t?.token||await s.change(`delete`,{id:j.id,identity:j.identity,expectedNoteRevision:j.revision}))&&(o(e=>e.filter(e=>e.id!==j.id)),ye(null),R(null))},children:S.deleteAction})]})]}):null,Se?(0,C.jsxs)(g,{title:S.handoff,closeLabel:S.closeBatch,returnFocusRef:J,onClose:()=>I(!1),className:`improvement-demo__handoff`,children:[(0,C.jsx)(`p`,{children:S.handoffNotice}),(0,C.jsxs)(`div`,{className:`improvement-demo__batch-context`,children:[(0,C.jsx)(`code`,{children:t?.branch??S.branch}),(0,C.jsxs)(`span`,{children:[Q?S.canvasBatchSource:S.sampleBatchSource,` · `,F.length,` notes`]})]}),(0,C.jsx)(`ol`,{children:F.map(e=>(0,C.jsxs)(`li`,{children:[(0,C.jsxs)(`strong`,{children:[`#`,e.id,` · `,e.target]}),(0,C.jsxs)(`code`,{children:[e.route,` · revision `,e.revision]}),(0,C.jsx)(`p`,{children:e.body}),(0,C.jsx)(`img`,{className:`improvement-demo__thumbnail`,src:e.capture,alt:`${e.capturePlaceholder?S.capturePlaceholder:S.capture}: ${e.target}`}),(0,C.jsx)(`code`,{children:e.selector??`Region: ${e.rect.x}, ${e.rect.y}, ${e.rect.width} × ${e.rect.height}`})]},`${e.id}-${e.revision}`))}),(0,C.jsx)(`p`,{className:`improvement-demo__form-hint`,children:S.batchHint}),(0,C.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>I(!1),children:S.closeHandoff}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>Qe(`blocked`),children:S.block}),(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,onClick:()=>Qe(`ready`),children:S.complete})]})]}):null]})}export{fe as t};
\ No newline at end of file
diff --git a/.github/extensions/replica-prototype/capture-review-revision/index.mjs b/.github/extensions/replica-prototype/capture-review-revision/index.mjs
new file mode 100644
index 00000000..56422f37
--- /dev/null
+++ b/.github/extensions/replica-prototype/capture-review-revision/index.mjs
@@ -0,0 +1,97 @@
+import { mkdtemp, rm } from "node:fs/promises"
+import path from "node:path"
+
+import { runCommand } from "../run-command/index.mjs"
+
+export async function captureReviewRevision(context) {
+ const gitDirectory = await runCommand(
+ "git",
+ ["rev-parse", "--absolute-git-dir"],
+ context.repositoryPath,
+ )
+ if (!gitDirectory.ok) throw new Error("Could not locate the local review Git directory.")
+ const directory = await mkdtemp(path.join(gitDirectory.stdout.trim(), "replica-review-"))
+ const env = { ...process.env, GIT_INDEX_FILE: path.join(directory, "index") }
+ const config = ["-c", "core.fsmonitor=false", "-c", "core.hooksPath=/dev/null"]
+ async function git(args, optional = false) {
+ const result = await runCommand("git", [...config, ...args], context.repositoryPath, { env })
+ if (!result.ok && !(optional && result.exitCode === 1))
+ throw new Error(`Could not capture the local review revision: ${result.error}`)
+ return result
+ }
+ try {
+ // Snapshotting must not execute repository-defined clean filters or filter processes.
+ const filters = await git(
+ ["config", "--name-only", "--get-regexp", "^filter\\..*\\.(clean|process|required)$"],
+ true,
+ )
+ for (const key of filters.stdout.trim().split("\n").filter(Boolean)) {
+ config.push("-c", `${key}=${key.endsWith(".required") ? "false" : ""}`)
+ }
+ const head = (await git(["rev-parse", "HEAD"])).stdout.trim()
+ const branch = (await git(["branch", "--show-current"])).stdout.trim()
+ const headTree = (await git(["rev-parse", "HEAD^{tree}"])).stdout.trim()
+ if (!/^[0-9a-f]{40}$/.test(head) || !branch)
+ throw new Error("Open a committed, named branch before commenting.")
+ await git(["read-tree", head])
+ const files = (
+ await git(["ls-files", "-z", "--cached", "--others", "--exclude-standard"])
+ ).stdout
+ .split("\0")
+ .filter(Boolean)
+ for (let offset = 0; offset < files.length; offset += 100) {
+ const attributes = (
+ await git([
+ "--literal-pathspecs",
+ "check-attr",
+ "-z",
+ "filter",
+ "--",
+ ...files.slice(offset, offset + 100),
+ ])
+ ).stdout.split("\0")
+ for (let index = 2; index < attributes.length; index += 3) {
+ if (!["unspecified", "unset"].includes(attributes[index]))
+ throw new Error("Local review revisions do not support Git clean filters.")
+ }
+ }
+ const submodules = await git([
+ "diff",
+ "--no-ext-diff",
+ "--no-textconv",
+ "--ignore-submodules=none",
+ "--name-only",
+ "-z",
+ "--diff-filter=M",
+ head,
+ "--",
+ ])
+ const changedPaths = new Set(submodules.stdout.split("\0"))
+ const entries = (await git(["ls-files", "--stage", "-z"])).stdout
+ if (
+ entries
+ .split("\0")
+ .some(
+ (entry) =>
+ entry.startsWith("160000 ") && changedPaths.has(entry.slice(entry.indexOf("\t") + 1)),
+ )
+ )
+ throw new Error("Commit or discard submodule changes before commenting on this preview.")
+ await git(["add", "--all", "--", "."])
+ const treeSha = (await git(["write-tree"])).stdout.trim()
+ const currentHead = (await git(["rev-parse", "HEAD"])).stdout.trim()
+ const currentBranch = (await git(["branch", "--show-current"])).stdout.trim()
+ const remaining = await git(
+ ["diff", "--no-ext-diff", "--no-textconv", "--quiet", "--ignore-submodules=none"],
+ true,
+ )
+ const untracked = (await git(["ls-files", "--others", "--exclude-standard"])).stdout
+ if (currentHead !== head || currentBranch !== branch || !remaining.ok || untracked)
+ throw new Error("The checkout changed while capturing this review revision. Try again.")
+ if (!/^[0-9a-f]{40}$/.test(treeSha))
+ throw new Error("Could not verify the local review source tree.")
+ return { treeSha, commitSha: head, clean: treeSha === headTree }
+ } finally {
+ await rm(directory, { recursive: true, force: true })
+ }
+}
diff --git a/.github/extensions/replica-prototype/improvement-notes/index.mjs b/.github/extensions/replica-prototype/improvement-notes/index.mjs
index 61e5a12b..8c2872d9 100644
--- a/.github/extensions/replica-prototype/improvement-notes/index.mjs
+++ b/.github/extensions/replica-prototype/improvement-notes/index.mjs
@@ -6,6 +6,7 @@ import { isDeepStrictEqual } from "node:util"
import { createPrivateStore } from "../private-store/index.mjs"
import { currentCanvasContext } from "../create-canvas-context/index.mjs"
+import { captureReviewRevision } from "../capture-review-revision/index.mjs"
import { runCommand } from "../run-command/index.mjs"
import { validateAnchor } from "../assets/review-anchor-validation.mjs"
import { improvementBatchResult } from "../improvement-batch-result/index.mjs"
@@ -21,6 +22,8 @@ const statuses = new Set(["open", "sent", "ready", "resolved", "blocked"])
const maximumCapture = 1_500_000
const maximumNotes = 200
const maximumStoreBytes = maximumNotes * (maximumCapture + 64_000) * 2
+const missingSourceMessage =
+ "This local improvement has no captured source. It cannot sync. Keep it locally or select its target again as a new improvement."
const pickAndPolishSkillUrl = new URL("../skills/replica-pick-and-polish/SKILL.md", import.meta.url)
export async function readPickAndPolishInstructions(skillUrl = pickAndPolishSkillUrl) {
@@ -54,6 +57,13 @@ function checkNote(note, owner) {
Buffer.byteLength(note.body) > 10_000 ||
!Number.isSafeInteger(note.revision) ||
note.revision < 1 ||
+ (note.buildNumber !== undefined &&
+ (!Number.isSafeInteger(note.buildNumber) || note.buildNumber < 1)) ||
+ (note.source !== undefined &&
+ (!/^[0-9a-f]{40}$/.test(note.source?.treeSha) ||
+ !/^[0-9a-f]{40}$/.test(note.source?.commitSha) ||
+ typeof note.source?.clean !== "boolean" ||
+ !Number.isFinite(Date.parse(note.createdAt)))) ||
(note.syncedRevision !== undefined &&
(!Number.isSafeInteger(note.syncedRevision) ||
note.syncedRevision < 1 ||
@@ -106,6 +116,7 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
options.directory || path.join(os.homedir(), ".config", "replica", "improvement-notes")
const store = createPrivateStore(directory)
const profiles = new Map()
+ const captures = new Map()
async function identity() {
const context = await currentCanvasContext(getContext())
@@ -302,6 +313,16 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
}
return {
+ async capture() {
+ const { key, context } = await identity()
+ const source = await captureReviewRevision(context)
+ if ((await identity()).key !== key)
+ fail("The prototype branch changed while selecting a target. Try again.", 409)
+ const sourceId = randomUUID()
+ if (captures.size >= maximumNotes) captures.delete(captures.keys().next().value)
+ captures.set(sourceId, { identity: key, source })
+ return { identity: key, sourceId }
+ },
async load() {
const { key, context } = await identity()
const record = await read(key)
@@ -382,6 +403,9 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
if (record.notes.length >= maximumNotes)
fail("This prototype has reached its 200-note storage limit.")
const { anchor, body, capture = "" } = input
+ const selected = input.sourceId === undefined ? null : captures.get(input.sourceId)
+ if (input.sourceId !== undefined && selected?.identity !== input.identity)
+ fail("The selected source expired. Select the target again before saving.", 409)
const note = checkNote({
id: record.nextId++,
localId: randomUUID(),
@@ -393,6 +417,8 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
revision: 1,
status: "open",
sync: "local",
+ createdAt: new Date().toISOString(),
+ ...(selected ? { source: selected.source } : {}),
})
if (author) {
if (profile?.owner) record.owner = profile.owner
@@ -410,6 +436,7 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
rect: anchor.rect,
})
record.notes.push(note)
+ if (!selected) record.syncError = missingSourceMessage
return
}
const note = record.notes.find((item) => item.id === input.id && !item.deleted)
@@ -550,6 +577,13 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
if (item.kind !== "improvement_note" || item.author?.login !== owner.login)
fail("Hub returned another author's improvement note.", 502)
const existing = record.notes.find((note) => note.localId === item.localId)
+ if (existing?.buildNumber !== undefined && item.buildNumber !== existing.buildNumber)
+ fail("Hub returned a changed improvement Build.", 409)
+ if (existing?.syncedRevision && item.buildNumber !== undefined) {
+ if (!Number.isSafeInteger(item.buildNumber) || item.buildNumber < 1)
+ fail("Hub returned an invalid improvement Build.", 502)
+ existing.buildNumber = item.buildNumber
+ }
if (existing && existing.sync !== "synced") continue
if (existing && item.revision < existing.revision)
fail("Hub returned an older improvement-note revision.", 409)
@@ -564,6 +598,7 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
author: item.thread?.originalAuthor ? owner.login : "local",
revision: item.revision,
syncedRevision: item.revision,
+ ...(item.buildNumber !== undefined ? { buildNumber: item.buildNumber } : {}),
body: item.body ?? existing?.body ?? "Deleted improvement note",
status: item.status,
anchor,
@@ -591,8 +626,50 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
return
}
invalidateBatchRequests(record)
+ let publishedTree
for (const note of record.notes.filter((item) => item.sync !== "synced")) {
try {
+ if (note.buildNumber === undefined && !note.syncedRevision) {
+ if (note.deleted) continue
+ if (!note.source) {
+ record.syncError = missingSourceMessage
+ continue
+ }
+ const build = status.prototype.build
+ if (!build) {
+ record.syncError =
+ "Improvements are saved locally until their captured source has a published Build."
+ continue
+ }
+ if (
+ !Number.isSafeInteger(build.number) ||
+ build.number < 1 ||
+ !/^[0-9a-f]{40}$/.test(build.commitSha) ||
+ !Number.isFinite(Date.parse(build.publishedAt))
+ )
+ fail("Hub did not return a valid published Build.", 502)
+ if (publishedTree === undefined) {
+ const tree = await runCommand(
+ "git",
+ ["rev-parse", `${build.commitSha}^{tree}`],
+ context.repositoryPath,
+ )
+ if (!tree.ok)
+ fail("Fetch the published Build commit to sync local improvements.", 409)
+ publishedTree = tree.stdout.trim()
+ }
+ if (
+ note.source.treeSha !== publishedTree ||
+ Date.parse(build.publishedAt) < Date.parse(note.createdAt)
+ ) {
+ record.syncError =
+ "Improvements are saved locally until their captured source has a published Build."
+ continue
+ }
+ // Keep the selected Build on retries, even if the upload response is lost.
+ note.buildNumber = build.number
+ await store.write(`${input.identity}.json`, record)
+ }
const result = await hub.request(base, {
...requestOptions,
method: "POST",
@@ -600,6 +677,7 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
local_id: note.localId,
revision: note.revision,
previous_revision: note.syncedRevision ?? 0,
+ ...(note.buildNumber !== undefined ? { build_number: note.buildNumber } : {}),
body: note.body,
anchor: note.anchor,
status: note.status,
@@ -611,10 +689,14 @@ export function createImprovementNotes(getContext, session, getHub, options = {}
if (
result.localId !== note.localId ||
result.revision !== note.revision ||
+ (note.buildNumber !== undefined && result.buildNumber !== note.buildNumber) ||
+ (result.buildNumber !== undefined &&
+ (!Number.isSafeInteger(result.buildNumber) || result.buildNumber < 1)) ||
!isDeepStrictEqual(result.thread, note.deleted ? null : note.thread)
)
fail("Hub did not confirm the saved note revision.", 502)
note.sync = "synced"
+ if (result.buildNumber !== undefined) note.buildNumber = result.buildNumber
note.syncedRevision = note.revision
if (note.author !== "local" || note.thread.originalAuthor) note.author = owner.login
} catch (error) {
diff --git a/.github/extensions/replica-prototype/improvement-notes/index.test.mjs b/.github/extensions/replica-prototype/improvement-notes/index.test.mjs
index fb9c04de..a370d077 100644
--- a/.github/extensions/replica-prototype/improvement-notes/index.test.mjs
+++ b/.github/extensions/replica-prototype/improvement-notes/index.test.mjs
@@ -31,6 +31,19 @@ async function fixture(run) {
await mkdir(root, { recursive: true })
const exec = promisify(execFile)
await exec("git", ["init", "-q", "-b", "prototype/demo", root])
+ await exec("git", [
+ "-C",
+ root,
+ "-c",
+ "user.name=Test",
+ "-c",
+ "user.email=test@example.com",
+ "commit",
+ "-qm",
+ "Initial prototype",
+ "--allow-empty",
+ ])
+ const commitSha = (await exec("git", ["-C", root, "rev-parse", "HEAD"])).stdout.trim()
await exec("git", [
"-C",
root,
@@ -66,9 +79,48 @@ async function fixture(run) {
...storeOptions,
})
}
+ function createPublished(getHub, storeOptions) {
+ const store = create(async () => {
+ const hub = await getHub()
+ if (!hub) return null
+ return {
+ ...hub,
+ status: async (...args) => {
+ const status = await hub.status(...args)
+ if (status.prototype && status.prototype.build === undefined)
+ status.prototype.build = {
+ number: 1,
+ commitSha,
+ publishedAt: new Date(Date.now() + 1000).toISOString(),
+ }
+ return status
+ },
+ request: async (...args) => {
+ const response = await hub.request(...args)
+ if (args[1]?.method === "POST")
+ return { buildNumber: args[1].body.build_number, ...response }
+ return {
+ ...response,
+ ...(response.notes
+ ? { notes: response.notes.map((note) => ({ buildNumber: 1, ...note })) }
+ : {}),
+ }
+ },
+ }
+ }, storeOptions)
+ return {
+ ...store,
+ save: async (input) =>
+ store.save({
+ ...(input.operation === "create" ? await store.capture() : {}),
+ ...input,
+ }),
+ }
+ }
try {
await run({
create,
+ createPublished,
context,
messages,
session,
@@ -99,9 +151,231 @@ it("keeps notes across provider restarts and sessions without committing them",
})
})
+it("publishes only the selected source after its Build imports and retains that Build for later changes", async () => {
+ await fixture(async ({ create, anchor, root, exec }) => {
+ const originalCommit = (await exec("git", ["-C", root, "rev-parse", "HEAD"])).stdout.trim()
+ let build = null
+ const writes = []
+ const hub = {
+ origin: "https://hub.example.com",
+ status: async () => ({
+ state: "connected",
+ repository: "example/prototype",
+ branch: "prototype/demo",
+ prototype: {
+ id: 7,
+ repositoryId: 9,
+ viewerLogin: "octocat",
+ viewerId: 1,
+ build,
+ },
+ }),
+ request: async (_url, options) => {
+ if (options.method !== "POST") return { threadVersion: 2, notes: [] }
+ writes.push(structuredClone(options.body))
+ return {
+ localId: options.body.local_id,
+ revision: options.body.revision,
+ thread: options.body.deleted ? null : options.body.thread,
+ buildNumber: options.body.build_number,
+ }
+ },
+ }
+ const store = create(async () => hub)
+ await writeFile(path.join(root, "screen.txt"), "Selected preview")
+ await exec("git", ["-C", root, "add", "screen.txt"])
+ await writeFile(path.join(root, "screen.txt"), "Selected preview with unstaged changes")
+ const indexBefore = await readFile(path.join(root, ".git/index"))
+ const selection = await store.capture()
+ assert.deepEqual(await readFile(path.join(root, ".git/index")), indexBefore)
+ await writeFile(path.join(root, "screen.txt"), "Edited after selecting the target")
+ let state = await store.save({
+ ...(await store.load()),
+ ...selection,
+ operation: "create",
+ body: "Clarify the selected preview",
+ anchor,
+ })
+ const source = state.notes[0].source
+ assert.equal(source.commitSha, originalCommit)
+ assert.equal(source.clean, false)
+ state = await store.sync(state)
+ assert.equal(writes.length, 0)
+ build = {
+ number: 1,
+ commitSha: originalCommit,
+ publishedAt: new Date(Date.now() + 1000).toISOString(),
+ }
+ state = await store.sync(state)
+ assert.equal(writes.length, 0)
+
+ async function commitPreview() {
+ await exec("git", ["-C", root, "add", "screen.txt"])
+ await exec("git", [
+ "-C",
+ root,
+ "-c",
+ "user.name=Test",
+ "-c",
+ "user.email=test@example.com",
+ "commit",
+ "-qm",
+ "Publish preview",
+ ])
+ return (await exec("git", ["-C", root, "rev-parse", "HEAD"])).stdout.trim()
+ }
+ build = { ...build, number: 2, commitSha: await commitPreview() }
+ const restarted = create(async () => hub)
+ state = await restarted.sync(state)
+ assert.equal(writes.length, 0)
+ assert.deepEqual(state.notes[0].source, source)
+ await writeFile(path.join(root, "screen.txt"), "Selected preview with unstaged changes")
+ build = {
+ number: 3,
+ commitSha: await commitPreview(),
+ publishedAt: "2000-01-01T00:00:00Z",
+ }
+ state = await restarted.sync(state)
+ assert.equal(writes.length, 0)
+ build.publishedAt = new Date(Date.now() + 1000).toISOString()
+ await writeFile(path.join(root, "screen.txt"), "Another local edit")
+ state = await restarted.sync(state)
+ assert.equal(state.notes[0].sync, "synced")
+ assert.equal(state.notes[0].buildNumber, 3)
+ assert.equal(writes.length, 1)
+ assert.equal(writes[0].build_number, 3)
+ assert.deepEqual(writes[0].anchor, anchor)
+
+ build = null
+ state = await restarted.save({
+ ...state,
+ operation: "follow-up",
+ id: 1,
+ expectedNoteRevision: state.notes[0].revision,
+ body: "A later request",
+ })
+ state = await restarted.sync(state)
+ assert.equal(writes[1].build_number, 3)
+ assert.equal(writes[1].previous_revision, 1)
+ assert.deepEqual(state.notes[0].source, source)
+ assert.equal(state.notes[0].body, "Clarify the selected preview")
+ state = await restarted.save({
+ ...state,
+ operation: "delete",
+ id: 1,
+ expectedNoteRevision: state.notes[0].revision,
+ })
+ await restarted.sync(state)
+ assert.equal(writes[2].build_number, 3)
+ assert.equal(writes[2].deleted, true)
+ })
+})
+
+it("keeps legacy notes without captured provenance local instead of assigning the current source", async () => {
+ await fixture(async ({ create, anchor, root, exec }) => {
+ const commitSha = (await exec("git", ["-C", root, "rev-parse", "HEAD"])).stdout.trim()
+ let uploads = 0
+ const hub = {
+ origin: "https://hub.example.com",
+ status: async () => ({
+ state: "connected",
+ repository: "example/prototype",
+ branch: "prototype/demo",
+ prototype: {
+ id: 7,
+ repositoryId: 9,
+ viewerLogin: "octocat",
+ viewerId: 1,
+ build: { number: 1, commitSha, publishedAt: new Date().toISOString() },
+ },
+ }),
+ request: async (_url, options) => {
+ if (options.method !== "POST") return { threadVersion: 2, notes: [] }
+ uploads++
+ return {}
+ },
+ }
+ const store = create(async () => hub)
+ let state = await store.save({
+ ...(await store.load()),
+ operation: "create",
+ body: "Saved by an older client",
+ anchor,
+ })
+ state = await create(async () => hub).sync(state)
+ assert.equal(uploads, 0)
+ assert.equal(state.notes[0].sync, "local")
+ assert.equal(state.notes[0].source, undefined)
+ assert.equal(state.notes[0].buildNumber, undefined)
+ assert.match(state.syncError, /no captured source/)
+ await assert.rejects(
+ store.save({
+ ...state,
+ operation: "create",
+ sourceId: randomUUID(),
+ body: "Expired selection",
+ anchor,
+ }),
+ /selected source expired/,
+ )
+ })
+})
+
+it("persists the selected Build before an uncertain upload and reuses it after a restart", async () => {
+ await fixture(async ({ createPublished, create, anchor }) => {
+ const builds = []
+ let currentBuild
+ const hub = {
+ origin: "https://hub.example.com",
+ status: async () => ({
+ state: "connected",
+ repository: "example/prototype",
+ branch: "prototype/demo",
+ prototype: {
+ id: 7,
+ repositoryId: 9,
+ viewerLogin: "octocat",
+ viewerId: 1,
+ build: currentBuild,
+ },
+ }),
+ request: async (_url, options) => {
+ if (options.method !== "POST") return { threadVersion: 2, notes: [] }
+ builds.push(options.body.build_number)
+ const persisted = await create(async () => hub).load()
+ assert.equal(persisted.notes[0].buildNumber, 1)
+ if (builds.length === 1) throw new Error("Upload result lost")
+ return {
+ localId: options.body.local_id,
+ revision: options.body.revision,
+ thread: options.body.thread,
+ }
+ },
+ }
+ const store = createPublished(async () => hub)
+ let state = await store.save({
+ ...(await store.load()),
+ operation: "create",
+ body: "Retain the original Build",
+ anchor,
+ })
+ state = await store.sync(state)
+ assert.equal(state.notes[0].sync, "failed")
+ assert.match(state.syncError, /Upload result lost/)
+ currentBuild = {
+ number: 2,
+ commitSha: "f".repeat(40),
+ publishedAt: new Date().toISOString(),
+ }
+ state = await createPublished(async () => hub).sync(state)
+ assert.equal(state.notes[0].sync, "synced")
+ assert.deepEqual(builds, [1, 1])
+ })
+})
+
it("snapshots verified authors without attributing unowned originals and gates older Hub synchronization", async () => {
- await fixture(async ({ create, anchor, directory }) => {
- const offline = create()
+ await fixture(async ({ createPublished: create, anchor, directory }) => {
+ const offline = create(async () => null)
let state = await offline.save({
...(await offline.load()),
operation: "create",
@@ -906,8 +1180,8 @@ it("reports dispatch failure durably without automatically replaying the request
})
})
-it("syncs a discovered branch before a Build and refuses another author's account", async () => {
- await fixture(async ({ create, anchor }) => {
+it("syncs a published branch and refuses another author's account", async () => {
+ await fixture(async ({ createPublished: create, anchor }) => {
let login = "octocat"
const writes = []
const hub = {
@@ -924,7 +1198,6 @@ it("syncs a discovered branch before a Build and refuses another author's accoun
repositoryId: 9,
viewerLogin: login,
viewerId: login === "octocat" ? 1 : 2,
- build: null,
registered: false,
},
}
@@ -1069,7 +1342,7 @@ it("retains local notes when Hub cannot sync and rejects malformed note input",
})
it("cancels a pending batch after Hub reopens its captured requests", async () => {
- await fixture(async ({ create, anchor, messages }) => {
+ await fixture(async ({ createPublished: create, anchor, messages }) => {
let remote
const hub = {
origin: "https://hub.example.com",
@@ -1126,7 +1399,7 @@ it("cancels a pending batch after Hub reopens its captured requests", async () =
})
it("pulls creator notes while preserving unsynchronized edits and rejecting foreign authors", async () => {
- await fixture(async ({ create, anchor }) => {
+ await fixture(async ({ createPublished: create, anchor }) => {
let remote = []
let rejectUpload = false
const hub = {
@@ -1295,7 +1568,7 @@ it("rejects an older draft even after polling advances the collection revision",
})
it("does not upload owner-bound notes after the Hub connection changes during a pull", async () => {
- await fixture(async ({ create, anchor }) => {
+ await fixture(async ({ createPublished: create, anchor }) => {
let account = "octocat"
let writes = 0
const hub = {
@@ -1565,7 +1838,7 @@ it("reserves escaped answer bytes and preserves saved history when full", async
})
it("roundtrips immutable requests and answers through Hub to another isolated local store", async () => {
- await fixture(async ({ create, anchor, directory }) => {
+ await fixture(async ({ createPublished: create, anchor, directory }) => {
const remote = []
let supported = false
const hub = {
@@ -1646,6 +1919,7 @@ it("roundtrips immutable requests and answers through Hub to another isolated lo
directory: path.join(directory, "another-local-store"),
})
const pulled = await second.sync(await second.load())
+ assert.equal(pulled.notes[0].buildNumber, 1)
assert.deepEqual(pulled.notes[0].thread, state.notes[0].thread)
assert.equal(pulled.notes[0].body, "Original")
assert.equal(pulled.notes[0].thread.messages[0].body, "Saved answer")
@@ -1804,7 +2078,7 @@ for (const status of ["open", "sent"]) {
}
it("saves and pulls the canonical validator's zero-size elements and narrow areas", async () => {
- await fixture(async ({ create, anchor, directory }) => {
+ await fixture(async ({ createPublished: create, anchor, directory }) => {
const remote = []
const hub = {
origin: "https://hub.example.com",
@@ -1920,7 +2194,7 @@ it("keeps a freshly pulled original unattributed until explicitly claimed despit
for (const statusCode of [409, 422, undefined, 401, 403, 429, 500]) {
it(`${[409, 422].includes(statusCode) ? "continues independent uploads after" : "stops uploads after"} ${statusCode ?? "a connection failure"} without clearing its error`, async () => {
- await fixture(async ({ create, anchor }) => {
+ await fixture(async ({ createPublished: create, anchor }) => {
const uploaded = []
const hub = {
origin: "https://hub.example.com",
@@ -1961,7 +2235,7 @@ for (const statusCode of [409, 422, undefined, 401, 403, 429, 500]) {
}
it("ignores an old batch's reopened request after a remote resend while another note keeps the batch alive", async () => {
- await fixture(async ({ create, anchor }) => {
+ await fixture(async ({ createPublished: create, anchor }) => {
const remote = []
const hub = {
origin: "https://hub.example.com",
@@ -2029,7 +2303,7 @@ for (const scenario of [
"partial legacy page",
]) {
it(`${scenario === "complete" ? "collects every page before applying remote notes or uploading" : `preserves every local note and skips uploads after ${scenario}`}`, async () => {
- await fixture(async ({ create, anchor }) => {
+ await fixture(async ({ createPublished: create, anchor }) => {
let paging = false
let pageReads = 0
const uploaded = []
diff --git a/.github/extensions/replica-prototype/start-canvas-server/index.mjs b/.github/extensions/replica-prototype/start-canvas-server/index.mjs
index bc64f318..e79c9675 100644
--- a/.github/extensions/replica-prototype/start-canvas-server/index.mjs
+++ b/.github/extensions/replica-prototype/start-canvas-server/index.mjs
@@ -350,6 +350,10 @@ async function routeRequest(
}
requireToken(request, token)
+ if (requestUrl.pathname === "/api/improvement-notes/capture" && request.method === "POST") {
+ sendJson(response, 200, await improvementNotes.capture())
+ return
+ }
if (requestUrl.pathname === "/api/improvement-notes" && request.method === "GET") {
sendJson(response, 200, await improvementNotes.load())
return
diff --git a/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs b/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs
index 47fed930..96a8351d 100644
--- a/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs
+++ b/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs
@@ -36,6 +36,9 @@ describe("startCanvasServer()", () => {
const headers = { "X-Replica-Canvas-Token": token }
const endpoint = new URL("/api/improvement-notes", canvas.url)
assert.equal((await fetch(endpoint)).status, 403)
+ const captureEndpoint = new URL("/api/improvement-notes/capture", canvas.url)
+ assert.equal((await fetch(captureEndpoint, { method: "POST" })).status, 403)
+ const captured = await (await fetch(captureEndpoint, { method: "POST", headers })).json()
const state = await (await fetch(endpoint, { headers })).json()
const response = await fetch(endpoint, {
method: "POST",
@@ -44,6 +47,7 @@ describe("startCanvasServer()", () => {
identity: state.identity,
revision: state.revision,
operation: "create",
+ sourceId: captured.sourceId,
body: "Improve the selected button.",
anchor: {
schemaVersion: 1,
@@ -61,6 +65,7 @@ describe("startCanvasServer()", () => {
})
const saved = await response.json()
assert.equal(response.status, 200, JSON.stringify(saved))
+ assert.match(saved.notes[0].source.treeSha, /^[0-9a-f]{40}$/)
await canvas.close()
canvas = await startCanvasServer(context, { send: assert.fail }, options)
const reopenedHtml = await (await fetch(canvas.url)).text()
diff --git a/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx b/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx
index 9b377aac..f3bf41df 100644
--- a/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx
+++ b/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx
@@ -40,7 +40,7 @@ function receive(
})
}
-function savedNotesFixture() {
+function savedNotesFixture(captureFails = false) {
const { fetch } = sharingFixture()
const original = fetch.getMockImplementation()!
const saved = {
@@ -52,6 +52,10 @@ function savedNotesFixture() {
}
fetch.mockImplementation(async (path, options) => {
if (!path.startsWith("/api/improvement-notes")) return original(path, options)
+ if (path.endsWith("/capture"))
+ return captureFails
+ ? Response.json({ error: "Source capture unavailable." }, { status: 409 })
+ : Response.json({ identity: saved.identity, sourceId: "selected-source" })
if (options?.method === "POST") {
if (typeof options.body !== "string") throw new Error("Expected a JSON notes request.")
const input: unknown = JSON.parse(options.body)
@@ -260,6 +264,7 @@ describe("App()", () => {
})
await waitFor(() => expect(annotate).toBeEnabled())
fireEvent.click(annotate)
+ await waitFor(() => expect(annotate).toHaveAttribute("aria-pressed", "true"))
receive(frame, { type: "replica:canvas:selected", anchor })
const composer = within(screen.getByRole("dialog", { name: copy.add }))
fireEvent.change(composer.getByRole("textbox", { name: copy.label }), {
@@ -325,7 +330,7 @@ describe("App()", () => {
fireEvent.click(screen.getByRole("button", { name: threadCopy.close }))
expect(screen.queryByRole("button", { name: threadCopy.point(1) })).not.toBeInTheDocument()
fireEvent.click(picker)
- expect(picker).toHaveAttribute("aria-pressed", "true")
+ await waitFor(() => expect(picker).toHaveAttribute("aria-pressed", "true"))
expect(screen.queryByRole("complementary", { name: copy.notes })).not.toBeInTheDocument()
const marker = screen.getByRole("button", { name: threadCopy.point(1) })
expect(marker).toBeVisible()
@@ -350,6 +355,7 @@ describe("App()", () => {
fireEvent.click(picker)
expect(screen.queryByRole("button", { name: threadCopy.point(1) })).not.toBeInTheDocument()
fireEvent.click(picker)
+ await waitFor(() => expect(picker).toHaveAttribute("aria-pressed", "true"))
expect(screen.getByRole("button", { name: threadCopy.point(1) })).toBeVisible()
receive(frame, { type: "replica:canvas:resolved", results: [] })
expect(screen.queryByRole("button", { name: threadCopy.point(1) })).not.toBeInTheDocument()
@@ -476,6 +482,7 @@ describe("App()", () => {
await waitFor(() => expect(annotate).toBeEnabled())
const post = vi.spyOn(frame.contentWindow!, "postMessage")
fireEvent.click(annotate)
+ await waitFor(() => expect(annotate).toHaveAttribute("aria-pressed", "true"))
expect(post).toHaveBeenCalledWith(
{ type: "replica:canvas:select", nonce, mode: "improvement" },
previewOrigin,
@@ -560,14 +567,51 @@ describe("App()", () => {
.filter(([, options]) => options?.method === "POST")
.slice(initialWrites.length)
expect(writes.map(([path]) => path)).toEqual([
+ "/api/improvement-notes/capture",
"/api/improvement-notes",
"/api/improvement-notes/fix",
])
+ const savedBody = writes.find(([path]) => path === "/api/improvement-notes")?.[1]?.body
+ if (typeof savedBody !== "string") throw new Error("Expected a serialized improvement.")
+ expect(JSON.parse(savedBody)).toMatchObject({ sourceId: "selected-source", anchor })
expect(saved.notes[0]).toMatchObject({ capture: "", anchor, body: "Clarify this action." })
view.unmount()
},
)
+ it("explains capture failure while still allowing an improvement to be saved privately", async () => {
+ vi.spyOn(crypto, "randomUUID").mockReturnValue(nonce)
+ const { fetch, saved } = savedNotesFixture(true)
+ render(
+ ,
+ )
+ const frame = screen.getByTitle("Demo prototype")
+ if (!(frame instanceof HTMLIFrameElement)) throw new Error("Expected the prototype iframe.")
+ const picker = await screen.findByRole("button", { name: copy.annotate })
+ receive(frame, {
+ type: "replica:canvas:ready",
+ protocolVersion: 1,
+ improvementSelection: true,
+ route: anchor.route,
+ })
+ await waitFor(() => expect(picker).toBeEnabled())
+ fireEvent.click(picker)
+ await waitFor(() => expect(picker).toHaveAttribute("aria-pressed", "true"))
+ receive(frame, { type: "replica:canvas:selected", anchor })
+ const composer = within(screen.getByRole("dialog", { name: copy.add }))
+ expect(composer.getByRole("alert")).toHaveTextContent(copy.sourceUnavailable)
+ fireEvent.change(composer.getByRole("textbox", { name: copy.label }), {
+ target: { value: "Keep this private local request" },
+ })
+ fireEvent.click(composer.getByRole("button", { name: copy.save }))
+ await waitFor(() => expect(saved.notes).toHaveLength(1))
+ const write = fetch.mock.calls.find(
+ ([path, options]) => path === "/api/improvement-notes" && options?.method === "POST",
+ )
+ if (typeof write?.[1]?.body !== "string") throw new Error("Expected a local save.")
+ expect(JSON.parse(write[1].body)).not.toHaveProperty("sourceId")
+ })
+
it("preserves images already stored with saved notes", async () => {
vi.spyOn(crypto, "randomUUID").mockReturnValue(nonce)
const { saved } = savedNotesFixture()
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts
index 408448e1..e2791a45 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts
@@ -11,6 +11,8 @@ export const copy = {
bridgeUnavailable:
"Annotation needs the updated Replica preview bridge. Reconnect or reload the preview after updating the canvas.",
capturePlaceholder: "UI-only capture placeholder",
+ sourceUnavailable:
+ "You can still save this improvement locally, but it cannot sync without a captured source.",
annotate: "Pick & polish",
fix: "Fix all",
openNotes: (count: number) => `Open improvement notes (${count})`,
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx b/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx
index d16a048c..a4b44797 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx
@@ -74,6 +74,12 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
const notes = canvas?.token ? (saved.state?.notes ?? []) : demoNotes
const [route, setRoute] = useState("/projects")
const [annotating, setAnnotating] = useState(false)
+ const [capturingSource, setCapturingSource] = useState(false)
+ const [selectedSource, setSelectedSource] = useState<{
+ identity: string
+ sourceId: string
+ } | null>(null)
+ const captureGeneration = useRef(0)
const [panelOpen, setPanelOpen] = useState(true)
const [selection, setSelection] = useState(null)
const [editing, setEditing] = useState(null)
@@ -140,7 +146,8 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
const target =
anchor.kind === "element" ? anchor.accessibleName || anchor.tagName : copy.regionTarget
setSelection({
- identity: saved.state?.identity,
+ identity: selectedSource?.identity ?? saved.state?.identity,
+ sourceId: selectedSource?.sourceId,
anchor,
route: anchor.route.pathname + anchor.route.search + anchor.route.hash,
target,
@@ -152,12 +159,28 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
setEditing(null)
setDraft("")
},
- [saved.state?.identity],
+ [saved.state?.identity, selectedSource],
)
const cancelPreviewSelection = useCallback(() => {
+ captureGeneration.current++
+ setCapturingSource(false)
if (annotateRef.current?.getAttribute("aria-pressed") === "true") annotateRef.current.focus()
setAnnotating(false)
}, [])
+ async function beginSelection() {
+ const generation = ++captureGeneration.current
+ setCapturingSource(true)
+ const source = canvas?.token ? await saved.capture() : null
+ if (generation !== captureGeneration.current) return
+ setCapturingSource(false)
+ setSelectedSource(source)
+ setAnnotating(true)
+ setPanelOpen(false)
+ setMessage(copy.selectHint)
+ setRegionMode(false)
+ setFirstCorner(null)
+ setDragRect(null)
+ }
const canvasFrameRef = canvas?.frameRef
const preview = usePreviewSelection({
frameRef: canvasFrameRef,
@@ -246,6 +269,7 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
}
setSelection(null)
setEditing(null)
+ if (canvas?.token) cancelPreviewSelection()
}
async function save() {
@@ -259,6 +283,7 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
!(await saved.change(editing === null ? "create" : "edit", {
id: editing,
identity: selection.identity,
+ sourceId: selection.sourceId,
expectedNoteRevision: selection.noteRevision,
body: draft.trim(),
anchor: selection.anchor,
@@ -268,6 +293,7 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
return
setFilter("active")
openNotes()
+ cancelPreviewSelection()
setSelection(null)
setEditing(null)
setMessage(copy.saved)
@@ -376,16 +402,13 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
title={copy.annotate}
leadingVisual={}
aria-pressed={annotating}
- disabled={embedded && (!preview.ready || (Boolean(canvas?.token) && !saved.state))}
+ disabled={
+ capturingSource ||
+ (embedded && (!preview.ready || (Boolean(canvas?.token) && !saved.state)))
+ }
onClick={() => {
- setAnnotating(!annotating)
- if (!annotating) {
- setPanelOpen(false)
- setMessage(copy.selectHint)
- }
- setRegionMode(false)
- setFirstCorner(null)
- setDragRect(null)
+ if (annotating) cancelPreviewSelection()
+ else void beginSelection()
}}
>
{copy.annotate}
@@ -859,10 +882,11 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
size="small"
variant="secondary"
leadingVisual={}
- disabled={embedded && (!preview.ready || !notesAvailable)}
+ disabled={
+ capturingSource || (embedded && (!preview.ready || !notesAvailable))
+ }
onClick={() => {
- setAnnotating(true)
- setPanelOpen(false)
+ void beginSelection()
annotateRef.current?.focus()
}}
>
@@ -1203,6 +1227,7 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
setSelection(null)
setEditing(null)
setDraft("")
+ if (canvas?.token) cancelPreviewSelection()
}}
>
{copy.discard}
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts
index 0439af99..5c3867ed 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts
@@ -51,4 +51,4 @@ export type Note = {
export type Selection = Pick<
Note,
"route" | "target" | "selector" | "rect" | "capture" | "anchor" | "capturePlaceholder"
-> & { identity?: string; noteRevision?: number; originalBody?: string }
+> & { identity?: string; sourceId?: string; noteRevision?: number; originalBody?: string }
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/use-saved-notes/index.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/use-saved-notes/index.ts
index ef56e0b2..63211ee4 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/use-saved-notes/index.ts
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/use-saved-notes/index.ts
@@ -132,5 +132,18 @@ export function useSavedNotes(token: string | undefined) {
}
}
- return { state, error: error || refreshError, busy, change }
+ async function capture(): Promise<{ identity: string; sourceId: string } | null> {
+ if (!token) return null
+ setError("")
+ try {
+ return await request("/api/improvement-notes/capture", token, { method: "POST" })
+ } catch (problem) {
+ setError(
+ `${problem instanceof Error ? problem.message : String(problem)} ${copy.sourceUnavailable}`,
+ )
+ return null
+ }
+ }
+
+ return { state, error: error || refreshError, busy, change, capture }
}
diff --git a/hub/docs/prototype-canvas.md b/hub/docs/prototype-canvas.md
index e1275086..8455da34 100644
--- a/hub/docs/prototype-canvas.md
+++ b/hub/docs/prototype-canvas.md
@@ -24,7 +24,11 @@ An author can explicitly claim selected older unowned local improvements after b
Owner-only files under `~/.config/replica/improvement-notes/` keep notes across canvas, provider, and conversation reloads. Identity uses the Git common directory, repository, and actual current branch, not the panel, port, route, commit, or session workspace. Notes in different worktrees of the same local repository and branch share that identity; different clones remain independent until Hub synchronization. Atomic writes, locks, and collection revisions reject stale panels rather than replacing another panel's work. A prototype supports up to 200 retained notes, including deletion tombstones. Conversations are bounded; saving a follow-up reserves the worst-case serialized answer for each open and sent request group, including escaped text, request references and status changes. Claims recheck that capacity after adding author snapshots. A full conversation reports an error and requires a new improvement instead of truncating history. Corrupt or non-private storage is reported without replacement.
-Notes are saved locally before attempting Hub synchronization. The canvas retries synchronization periodically when a Hub connection is available, pulls the current author's notes, and uploads pending revisions idempotently. Background synchronization does not disable unchanged eligible actions. An explicit mutation waits for an ongoing sync, then uses the refreshed collection revision while preserving its captured note revision and identity; foreground mutations still disable controls and prevent duplicate submissions. Fix all requires another explicit selection if synchronization changed its pending work. Each upload must match the last synchronized Hub revision, so offline work cannot overwrite another clone's history. Follow-ups append against the current note revision without changing the original; polling preserves unsaved composer text. Deletion confirmations retain their opened note revision. A branch must have been discovered by Hub; note storage does not require registration, a successful Build, or publication. Note loading, saving, and synchronization use read-only identity verification and cannot register the prototype, push a branch, or initiate a Build. Undiscovered branches, unavailable connections, access failures, or conflicting revisions leave local notes intact. The informational branch-discovery notice is hidden; actionable synchronization errors remain visible. First synchronization binds the local collection to the Hub origin and immutable Hub user ID; a different connected account cannot read or mutate that collection. Identity verification and each synchronization request share a pinned connection and checkout; changing either stops the operation.
+Notes are saved locally before attempting Hub synchronization. Starting target selection captures an immutable Git source tree and commit with an isolated index; later edits and submission never replace that source. A new improvement stays local until Hub reports a successful imported Build whose exact Git tree matches the captured source and whose publication time is no earlier than the saved request. An older Build, a clean checkout, or a matching commit alone cannot authorize an upload. The published commit must be available locally to verify its tree. A capture failure still allows private local saving with an explicit synchronization limitation. Older local notes without provenance are never assigned the current checkout's source and remain local; selecting the target again creates a new improvement without rewriting the original.
+
+The canvas retries synchronization periodically when a Hub connection is available, pulls the current author's notes, and uploads pending revisions idempotently. Initial upload includes `build_number`; the client persists that Build identity before sending, including when an upload result is uncertain. Later follow-ups, status changes, and deletions retain the saved `buildNumber` returned by Hub instead of using the current checkout or latest Build. Published improvements remain private owner notes, separate from ordinary review comments. Background synchronization does not disable unchanged eligible actions. An explicit mutation waits for an ongoing sync, then uses the refreshed collection revision while preserving its captured note revision and identity; foreground mutations still disable controls and prevent duplicate submissions. Fix all requires another explicit selection if synchronization changed its pending work. Each upload must match the last synchronized Hub revision, so offline work cannot overwrite another clone's history. Follow-ups append against the current note revision without changing the original target, source, or history; polling preserves unsaved composer text. Deletion confirmations retain their opened note revision.
+
+A branch must have been discovered by Hub to synchronize; local note storage does not require registration, a successful Build, or publication. Note loading, saving, and synchronization use read-only identity verification and cannot register the prototype, push a branch, or initiate a Build. Undiscovered branches, unavailable connections, access failures, or conflicting revisions leave local notes intact. The informational branch-discovery notice is hidden; actionable synchronization errors remain visible. First synchronization binds the local collection to the Hub origin and immutable Hub user ID; a different connected account cannot read or mutate that collection. Identity verification and each synchronization request share a pinned connection and checkout; changing either stops the operation.
The client follows the collection's opaque `nextCursor` while `hasMore` is true, using the same pinned connection and checkout for every page. It retrieves and checks the complete collection before applying remote notes or uploading local work. Failed traversal, repeated cursors, inconsistent versions or invalid pagination leave local notes unchanged and expose a synchronization error. Older complete responses without pagination fields remain supported. Keyset pages are not a whole-collection snapshot; ordinary revision checks still protect writes.
From 1f75e639b359c1791cafce4479129779f44a057b Mon Sep 17 00:00:00 2001
From: Lukas Oppermann
Date: Wed, 21 Oct 2026 03:09:38 +0200
Subject: [PATCH 3/4] feat(hub): sync unpublished preview comments (#37)
## Why
Authors need to comment before publishing, including with uncommitted
edits. Keeping that feedback on their device avoids storing unpublished
comments in Hub or attaching them to the wrong Build.
## What changes
The canvas saves unpublished comments privately on the author's device
across restarts. Authors can edit or delete them. Source edits, commits
and preview reloads preserve the target captured when selection starts.
While open, the canvas uploads comments only when a newer imported Build
matches their saved source. Confirmed uploads remove the local copy;
failures retain it and show an error. Uncertain uploads are checked
against Hub rather than blindly sent again. Published conversations keep
their existing API and access rules, with no Hub draft records or
migration.
Local commenting requires a named branch with an initial commit. Source
capture preserves staged files; active Git clean filters and changed
submodules report an explicit limitation.

End-to-end publication against an authenticated Hub and full keyboard
and screen-reader review remain unverified. Complete-suite runs also
encountered intermittent canvas publication and checkout UI timeouts.
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 1a0f3eb5-727a-4361-b09e-256fd982857d
Copilot-Session: 81640dc7-0f59-4d95-9037-01b4eb681d03
---
.../extensions/replica-prototype/README.md | 6 +-
.../replica-prototype/assets/canvas-bridge.js | 2 +-
.../replica-prototype/assets/renderer.js | 10 +-
.../capture-review-revision/index.mjs | 92 ++
.../capture-review-revision/index.test.mjs | 142 +++
.../authorization.test.mjs | 0
.../automatic-registration.test.mjs | 0
.../fresh-authorization.test.mjs | 0
.../index.mjs | 45 +-
.../index.test.mjs | 11 +-
.../rate-limits.test.mjs | 0
.../renewal.test.mjs | 0
.../index.mjs | 10 +-
.../index.mjs | 2 +-
.../index.test.mjs | 2 +-
.../index.mjs | 4 +-
.../index.test.mjs | 0
.../create-local-review-comments/index.mjs | 219 ++++
.../index.test.mjs | 307 +++++
.../replica-prototype/discover-hub/index.mjs | 2 +-
.../discover-hub/index.test.mjs | 2 +-
.../invalid-hub-origin/index.mjs | 1 +
.../normalize-hub-origin/index.mjs | 10 +
.../normalize-selected-hub-origin/index.mjs | 5 +
.../replica-prototype/parse-hub-url/index.mjs | 22 +
.../register-prototype-canvas/index.mjs | 6 +-
.../register-prototype-canvas/index.test.mjs | 2 +-
.../start-canvas-server/index.mjs | 199 ++-
.../start-canvas-server/index.test.mjs | 231 +++-
.../build-controls/controls.js | 2 +-
.../application/prototype-canvas/index.tsx | 4 +-
.../install-replica-controls-bridge/bridge.js | 2 +-
.../bridge-health.test.tsx | 136 +-
.../comment-visibility.test.tsx | 163 +--
.../prototype-canvas-hub-panel/index.test.tsx | 1118 +++++++++--------
.../prototype-canvas-hub-panel/index.tsx | 254 +++-
.../reaction-updates.test.tsx | 37 +-
.../prototype-canvas-hub-panel/stories.tsx | 88 +-
.../index.tsx | 34 +
.../review-comment-composer/index.tsx | 4 +-
.../review-comment-composer/stories.tsx | 14 +
.../features/review-comment-composer/types.ts | 1 +
.../features/review-comment-row/index.tsx | 7 +-
.../review-comments-sidebar/index.tsx | 4 +-
.../review-thread-conversation/index.tsx | 88 +-
.../features/review-thread-message/index.tsx | 2 +-
.../javascript/utils/prototype-canvas/en.ts | 7 +
.../utils/prototype-canvas/types.ts | 15 +
.../resolve-prototype-publication/fixtures.ts | 12 +
.../utils/review-comment/schemas.ts | 5 +-
.../index.test.ts | 172 ++-
.../review-thread-matches-filters/index.ts | 10 +-
.../review-thread-matches-filters/types.ts | 3 +-
hub/docs/prototype-canvas.md | 14 +-
54 files changed, 2468 insertions(+), 1060 deletions(-)
create mode 100644 .github/extensions/replica-prototype/capture-review-revision/index.mjs
create mode 100644 .github/extensions/replica-prototype/capture-review-revision/index.test.mjs
rename .github/extensions/replica-prototype/{hub-client => create-hub-client}/authorization.test.mjs (100%)
rename .github/extensions/replica-prototype/{hub-client => create-hub-client}/automatic-registration.test.mjs (100%)
rename .github/extensions/replica-prototype/{hub-client => create-hub-client}/fresh-authorization.test.mjs (100%)
rename .github/extensions/replica-prototype/{hub-client => create-hub-client}/index.mjs (96%)
rename .github/extensions/replica-prototype/{hub-client => create-hub-client}/index.test.mjs (98%)
rename .github/extensions/replica-prototype/{hub-client => create-hub-client}/rate-limits.test.mjs (100%)
rename .github/extensions/replica-prototype/{hub-client => create-hub-client}/renewal.test.mjs (100%)
rename .github/extensions/replica-prototype/{hub-connection => create-hub-connection}/index.mjs (91%)
rename .github/extensions/replica-prototype/{hub-origin-store => create-hub-origin-store}/index.mjs (95%)
rename .github/extensions/replica-prototype/{hub-origin-store => create-hub-origin-store}/index.test.mjs (95%)
rename .github/extensions/replica-prototype/{recall-learnings => create-learnings-hook}/index.mjs (98%)
rename .github/extensions/replica-prototype/{recall-learnings => create-learnings-hook}/index.test.mjs (100%)
create mode 100644 .github/extensions/replica-prototype/create-local-review-comments/index.mjs
create mode 100644 .github/extensions/replica-prototype/create-local-review-comments/index.test.mjs
create mode 100644 .github/extensions/replica-prototype/invalid-hub-origin/index.mjs
create mode 100644 .github/extensions/replica-prototype/normalize-hub-origin/index.mjs
create mode 100644 .github/extensions/replica-prototype/normalize-selected-hub-origin/index.mjs
create mode 100644 .github/extensions/replica-prototype/parse-hub-url/index.mjs
create mode 100644 hub/app/javascript/features/prototype-canvas-hub-panel/test-support/render-prototype-canvas-hub-panel/index.tsx
diff --git a/.github/extensions/replica-prototype/README.md b/.github/extensions/replica-prototype/README.md
index 2626fc61..539bc5ae 100644
--- a/.github/extensions/replica-prototype/README.md
+++ b/.github/extensions/replica-prototype/README.md
@@ -264,7 +264,7 @@ Without a usable connection, the canvas offers a dismissible dialog once per ope
Seven-day access tokens renew automatically while repository access remains valid and the connection has not been revoked or inactive for 30 days. Focus and user-initiated Hub actions count as activity; background polling and renewal do not. Expiry or revocation requires approval again. Temporary outages keep the preview usable and preserve saved credentials. Older connections keep their original expiry and need one new approval to become renewable. **Disconnect Hub** revokes the selected connection; you can also revoke it at `/canvas/connections` in Hub. Switching Hubs does not revoke an earlier connection.
-The canvas follows branch changes. If Hub has not discovered the branch, the repository remains connected; push the branch and wait for discovery to use its Builds and reviews. Once Hub imports a successful Build of the current checkout, the canvas automatically registers eligible prototypes using the branch name as the initial title. Existing metadata is preserved. Use **Edit metadata** in **Hub** to change the title or description afterward. Registration requires write access and Hub's branch eligibility checks; errors appear in the shared critical banner and status polling retries automatically. Updated Hub APIs supply a `registrationReason` code explaining missing write access, excluded branches, missing remote heads, or branch authorship requirements. Unknown codes and older Hubs retain a generic error; independently verified permission and remote-ref facts can supply a specific explanation. Installing the extension does not deploy the updated Hub API.
+The canvas follows branch changes. If Hub has not discovered the branch, the repository remains connected and comments can be saved locally; push the branch and wait for discovery to use its published Builds and reviews. Once Hub imports a successful Build of the current checkout, the canvas automatically registers eligible prototypes using the branch name as the initial title. Existing metadata is preserved. Use **Edit metadata** in **Hub** to change the title or description afterward. Registration requires write access and Hub's branch eligibility checks; errors appear in the shared critical banner and status polling retries automatically. Updated Hub APIs supply a `registrationReason` code explaining missing write access, excluded branches, missing remote heads, or branch authorship requirements. Unknown codes and older Hubs retain a generic error; independently verified permission and remote-ref facts can supply a specific explanation. Installing the extension does not deploy the updated Hub API.
For a Hub started in [local development mode](https://github.com/github/replica/blob/main/hub/docs/local-development.md), open Copilot in Hub's `.local/prototypes/example` checkout and pass `"repository": "local/example"` when opening the canvas. Local repository hints only apply to matching checkouts under `.local/prototypes/` with a loopback Hub origin; they cannot redirect a remote checkout to another Hub repository. Start that example's dev server on a port reachable from the canvas before opening it.
@@ -282,7 +282,9 @@ Pending commit-and-publish requests remain deduplicated across verified descenda
Copilot uses the existing push workflow, not manual Actions dispatch or another publishing path. It follows `refresh_status`, registers discovered branches with `update_metadata`, and preserves saved metadata. If it stops before pushing, it calls `report_publish_result` with the request target and a `blocked`, `canceled`, or `failed` outcome so the canvas stops waiting and offers a retry. A later push of the current HEAD clears that failure so the canvas follows the new workflow and Build. The action rejects other canvases, targets, or modes, and any request whose push was already observed. It waits for Hub's imported Build matching the pushed commit and returns its exact URL. An older Build or Actions success alone is not enough. The local preview stays open. Entry-page checks still apply; incomplete landing-page verification is reported, not silently repaired and republished.
-The canvas header uses Hub's review controls: **Add a comment** sits beside a comment count with unread state, and selecting the count opens the dedicated comments sidebar. The sidebar includes Hub's search, build/page/participant/read/resolved filters, pin visibility control, conversation rows, and thread view; the **Hub** panel remains focused on connection, prototype metadata, and publication state. Select a preview marker or conversation row to open the thread beside its target and reply without leaving the canvas. Markers use the same participant avatars, overflow, unread, resolved, focus, and accessible-label behavior as Hub. When the local checkout matches the imported Build's exact commit, **Add a comment** supports the same element and highlighted-area targets as Hub and saves the new thread directly to Hub. You can also reply, edit or delete your own messages, react, and resolve or reopen threads. Live changes arrive over Hub's review channel, with periodic refresh if that connection is unavailable. Hub credentials stay in the extension process and are never sent to the local preview.
+**Add a comment** targets an element or highlighted area. Comments on unpublished changes stay on the author's device until a matching Build is published; comments on a clean checkout of the published Build save directly to Hub. See [local preview comments](../../../hub/docs/prototype-canvas.md#local-preview-comments) for requirements, storage and recovery.
+
+The header's comment count opens a sidebar with Hub's search, filters, unread state and pin visibility controls. Select a marker or row to open its conversation beside the target. Published conversations support replies, edits, deletion, reactions and resolution. Hub sends live updates, with periodic refresh when unavailable. The **Hub** panel remains focused on connection, metadata and publication. Hub credentials never reach the local preview.
Open an already-running unauthenticated loopback prototype in this canvas. The extension's per-panel reverse proxy supplies its bundled bridge to ordinary Vite dev/preview and static HTML servers. Multiple prototypes, including servers in the same checkout, have independent proxy ports and lifecycles. Closing a panel stops only its proxy.
diff --git a/.github/extensions/replica-prototype/assets/canvas-bridge.js b/.github/extensions/replica-prototype/assets/canvas-bridge.js
index ff6253cb..2531d90d 100644
--- a/.github/extensions/replica-prototype/assets/canvas-bridge.js
+++ b/.github/extensions/replica-prototype/assets/canvas-bridge.js
@@ -1,4 +1,4 @@
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=/* @__PURE__ */ ((n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n)))((/* @__PURE__ */ o((e=>{var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),n=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),i=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=r();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t}));e.validateShape=P;var a={type:`object`,additionalProperties:!1,required:[`version`,`scope`,`controls`],properties:{$schema:{type:`string`},version:{const:1},scope:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},role:{enum:[`shared`,`page`]},container:{$ref:`#/$defs/selector`},panel:{type:`object`,additionalProperties:!1,required:[`width`],properties:{width:{type:`integer`,minimum:160,maximum:4096}}},groups:{type:`array`,maxItems:100,items:{type:`object`,additionalProperties:!1,required:[`id`,`label`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},when:{$ref:`#/$defs/condition`}}}},controls:{type:`array`,maxItems:500,items:{oneOf:[{$ref:`#/$defs/boolean`},{$ref:`#/$defs/number`},{$ref:`#/$defs/slider`},{$ref:`#/$defs/choice`},{$ref:`#/$defs/checkboxGroup`},{$ref:`#/$defs/text`},{$ref:`#/$defs/color`},{$ref:`#/$defs/button`}]}}}},o=Object.prototype.hasOwnProperty,s=n().default,c=RegExp(`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`,`u`),l={type:[`string`,`number`,`boolean`]},u=i().default,d={validate:f};function f(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0,s=o,p=!1,m=null,h=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.equals===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`equals`},message:`must have required property 'equals'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`equals`){let e={instancePath:t,schemaPath:`#/oneOf/0/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.equals!==void 0){let n=e.equals;if(typeof n!=`string`&&!(typeof n==`number`&&isFinite(n))&&typeof n!=`boolean`){let e={instancePath:t+`/equals`,schemaPath:`#/$defs/scalar/type`,keyword:`type`,params:{type:l.type},message:`must be string,number,boolean`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=h===o;g&&(p=!0,m=0);let _=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.in===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`in`},message:`must have required property 'in'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`in`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.in!==void 0){let n=e.in;if(Array.isArray(n)){if(n.length>20){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/maxItems`,keyword:`maxItems`,params:{limit:20},message:`must NOT have more than 20 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r1){outer0:for(;r--;)for(i=r;i--;)if(u(n[r],n[i])){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[e]:a.push(e),o++;break outer0}}}else{let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=_===o;if(g&&p)p=!1,m=[m,1];else{g&&(p=!0,m=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.includes===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`includes`},message:`must have required property 'includes'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`includes`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.includes!==void 0&&typeof e.includes!=`string`){let e={instancePath:t+`/includes`,schemaPath:`#/oneOf/2/properties/includes/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=n===o;if(g&&p)p=!1,m=[m,2];else{g&&(p=!0,m=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.all===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`all`},message:`must have required property 'all'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`all`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.all!==void 0){let n=e.all;if(Array.isArray(n)){if(n.length>10){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r10){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=d===o;f&&(l=!0,u=0);let v=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.selector===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`selector`},message:`must have required property 'selector'`};a===null?a=[e]:a.push(e),o++}if(e.property===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`property`},message:`must have required property 'property'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`selector`&&n!==`property`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`style`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/1/properties/type/const`,keyword:`const`,params:{allowedValue:`style`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.selector!==void 0){let n=e.selector;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.property!==void 0){let n=e.property;if(typeof n==`string`){if(s(n)>100){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/maxLength`,keyword:`maxLength`,params:{limit:100},message:`must NOT have more than 100 characters`};a===null?a=[e]:a.push(e),o++}if(!m.test(n)){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/pattern`,keyword:`pattern`,params:{pattern:`^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$`},message:`must match pattern "^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=v===o;if(f&&l)l=!1,u=[u,1];else{f&&(l=!0,u=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.key===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`key`},message:`must have required property 'key'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`key`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`query`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/2/properties/type/const`,keyword:`const`,params:{allowedValue:`query`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.key!==void 0){let n=e.key;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/2/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[2].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,2];else{f&&(l=!0,u=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`hash`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/3/properties/type/const`,keyword:`const`,params:{allowedValue:`hash`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/3/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[3].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/3/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,3];else{f&&(l=!0,u=3);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.object===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`object`},message:`must have required property 'object'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`object`&&n!==`read`&&n!==`write`&&n!==`action`&&n!==`subscribe`&&n!==`pollMs`){let e={instancePath:t,schemaPath:`#/oneOf/4/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`api`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/4/properties/type/const`,keyword:`const`,params:{allowedValue:`api`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.object!==void 0){let n=e.object;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(!h.test(n)){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$`},message:`must match pattern "^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.read!==void 0){let n=e.read;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.write!==void 0){let n=e.write;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.action!==void 0){let n=e.action;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.subscribe!==void 0){let n=e.subscribe;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.pollMs!==void 0){let n=e.pollMs;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),o++}if(typeof n==`number`&&isFinite(n)){if(n>6e4||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:6e4},message:`must be <= 60000`};a===null?a=[e]:a.push(e),o++}if(n<100||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:100},message:`must be >= 100`};a===null?a=[e]:a.push(e),o++}}}}else{let e={instancePath:t,schemaPath:`#/oneOf/4/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;f&&l?(l=!1,u=[u,4]):f&&(l=!0,u=4)}}}if(l)o=c,a!==null&&(c?a.length=c:a=null);else{let e={instancePath:t,schemaPath:`#/oneOf`,keyword:`oneOf`,params:{passingSchemas:u},message:`must match exactly one schema in oneOf`};a===null?a=[e]:a.push(e),o++}return _.errors=a,o===0}function v(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return v.errors=a,o===0}var y={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`number`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function b(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return b.errors=a,l===0}var x={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`slider`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function S(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return S.errors=a,l===0}var C={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`options`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`select`,`radio`,`segmented`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},options:{$ref:`#/$defs/options`},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function w(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return w.errors=a,o===0}function T(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return T.errors=a,o===0}var E={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`text`,`textarea`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},minLength:{type:`integer`,minimum:0},maxLength:{type:`integer`,minimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function D(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return D.errors=a,l===0}var O=RegExp(`^#[0-9a-fA-F]{6}$`,`u`);function k(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return k.errors=a,o===0}function A(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return A.errors=a,o===0}function j(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let l=null,u=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.version===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`version`},message:`must have required property 'version'`};l===null?l=[e]:l.push(e),u++}if(e.scope===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`scope`},message:`must have required property 'scope'`};l===null?l=[e]:l.push(e),u++}if(e.controls===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`controls`},message:`must have required property 'controls'`};l===null?l=[e]:l.push(e),u++}for(let n in e)if(!o.call(a.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};l===null?l=[e]:l.push(e),u++}if(e.$schema!==void 0&&typeof e.$schema!=`string`){let e={instancePath:t+`/$schema`,schemaPath:`#/properties/%24schema/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}if(e.version!==void 0&&e.version!==1){let e={instancePath:t+`/version`,schemaPath:`#/properties/version/const`,keyword:`const`,params:{allowedValue:1},message:`must be equal to constant`};l===null?l=[e]:l.push(e),u++}if(e.scope!==void 0){let n=e.scope;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return L.errors=a,o===0}e.number=R;function R(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return R.errors=a,l===0}e.slider=ee;function ee(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return ee.errors=a,l===0}e.choice=te;function te(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return te.errors=a,o===0}e.checkboxGroup=ne;function ne(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ne.errors=a,o===0}e.text=re;function re(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return re.errors=a,l===0}e.color=z;function z(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return z.errors=a,o===0}e.button=ie;function ie(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ie.errors=a,o===0}})))(),1);function l(e){if(e&&typeof e==`object`){for(let t of Object.values(e))l(t);Object.freeze(e)}return e}function u(e){return Array.isArray(e)?`[${e.map(u).join(`,`)}]`:e&&typeof e==`object`?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${u(e[t])}`).join(`,`)}}`:JSON.stringify(e)}function d(e,t){if(!e)return!0;if(e.all)return e.all.every(e=>d(e,t));if(e.any)return e.any.some(e=>d(e,t));let n=t[e.control];return`equals`in e?n===e.equals:`in`in e?e.in.includes(n):Array.isArray(n)&&n.includes(e.includes)}var{validateDocumentShape:f,validateDeclaration:p}=c.default,m={boolean:`boolean`,number:`number`,slider:`slider`,select:`choice`,radio:`choice`,segmented:`choice`,checkboxGroup:`checkboxGroup`,text:`text`,textarea:`text`,color:`color`,button:`button`};function h(e){let t=[...p.errors].filter(e=>!/^\/controls\/\d+(?:\/|$)/.test(e.instancePath)).map(e=>({...e}));return Array.isArray(e?.controls)&&e.controls.forEach((e,n)=>{let r=Object.hasOwn(m,e?.type)?m[e.type]:void 0,i=r&&c.default[r];i?i(e)||t.push(...i.errors.map(e=>({...e,instancePath:`/controls/${n}${e.instancePath}`}))):t.push({instancePath:`/controls/${n}/type`,message:`must name a supported control type`})}),t.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params}))}var g=class extends Error{constructor(e){super(`Invalid controls.replica.json:\n${e.map(e=>` ${e.path||`/`}: ${e.message}`).join(`
`)}`),this.name=`ControlsValidationError`,this.issues=e}};function _(e,t){switch(e.type){case`boolean`:return typeof t==`boolean`?null:`must be a boolean`;case`number`:case`slider`:{if(typeof t!=`number`||!Number.isFinite(t))return`must be a finite number`;if(e.min!==void 0&&t= min`;if(e.max!==void 0&&t>e.max)return`must be <= max`;let n=(t-e.min)/(e.step??1);return!Number.isFinite(n)||Math.abs(n-Math.round(n))>1e-8?`must align with step (anchored at min)`:null}case`select`:case`radio`:case`segmented`:return e.options.includes(t)?null:`must be a declared option`;case`checkboxGroup`:return Array.isArray(t)&&new Set(t).size===t.length&&t.every(t=>e.options.includes(t))?null:`must be unique declared options`;case`text`:case`textarea`:return typeof t==`string`?e.minLength!==void 0&&[...t].lengthe.maxLength?`longer than maxLength`:null:`must be a string`;case`color`:return typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?null:`must be a six-digit hex color`;default:return`button controls have no value`}}function v(e){return e?e.control?[e.control]:(e.all??e.any).flatMap(v):[]}function y(e){let t=new Map((e.groups??[]).map(e=>[e.id,e])),n=new Map(e.controls.map(e=>[e.id,e])),r=/* @__PURE__ */ new Set,i=/* @__PURE__ */ new Set,a=[];function o(e){if(r.has(e))return;if(i.has(e))throw new g([{path:`/controls/${e}/when`,message:`conditional dependency cycle (including groups)`}]);i.add(e);let s=n.get(e);for(let e of[...v(s.when),...v(t.get(s.group)?.when)])o(e);i.delete(e),r.add(e),a.push(e)}for(let e of n.keys())o(e);return a}function b(e){let t=/* @__PURE__ */ new Set;function n(e,r=0){if(r>24)throw new g([{path:`/`,message:`document nesting exceeds 24`}]);if(typeof e==`number`&&!Number.isFinite(e))throw new g([{path:`/`,message:`numbers must be finite`}]);if(![`string`,`number`,`boolean`,`object`].includes(typeof e))throw new g([{path:`/`,message:`must contain only JSON values`}]);if(e&&typeof e==`object`){if(!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new g([{path:`/`,message:`must contain only JSON objects`}]);if(t.has(e))throw new g([{path:`/`,message:`must be an acyclic JSON document`}]);t.add(e);for(let t of Object.values(e))n(t,r+1);t.delete(e)}}n(e)}function x(e){b(e);let t=e&&typeof e==`object`&&Object.hasOwn(e,`sets`)?e.sets:[e];if(!e||typeof e!=`object`||!Object.hasOwn(e,`sets`))return C(e),S(e),e;if(!f(e))throw new g(f.errors.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params})));let n=/* @__PURE__ */ new Set;return t.forEach((e,t)=>{try{C(e),S(e)}catch(e){throw e instanceof g?new g(e.issues.map(e=>({...e,path:`/sets/${t}${e.path}`}))):e}if(n.has(e.scope))throw new g([{path:`/sets/${t}/scope`,message:`duplicate scope ${e.scope}`}]);n.add(e.scope)}),e}function S(e){let t=[];for(let[n,r]of e.controls.entries()){let e=r.binding,i=`/controls/${n}/binding`;e?((r.type===`button`&&![`button`,`api`].includes(e.type)||r.type!==`button`&&e.type===`button`)&&t.push({path:i,message:`binding does not match the control type`}),e.type===`query`&&(e.key===`rc`||e.key.startsWith(`rc.`))&&t.push({path:i,message:`rc and rc.* are reserved for control settings`}),e.type===`api`&&(([`window`,`globalThis`,`self`,`parent`,`top`,`document`,`location`,`history`,`navigator`].includes(e.object.split(`.`)[0])||[e.read,e.write,e.action,e.subscribe].some(e=>[`eval`,`Function`].includes(e)))&&t.push({path:i,message:`API bindings must name an app-owned object and ordinary methods`}),e.object.split(`.`).some(e=>[`constructor`,`prototype`,`__proto__`].includes(e))&&t.push({path:i,message:`API object must name the app's own exposed object`}),r.type===`button`?(!e.action||e.read||e.write||e.subscribe||e.pollMs)&&t.push({path:i,message:`API buttons require only object and action`}):(!e.read||!e.write||e.action||!!e.subscribe==!!e.pollMs)&&t.push({path:i,message:`API values require read, write, and either subscribe or pollMs`}))):t.push({path:i,message:`each control requires a binding`})}if(t.length)throw new g(t)}function C(e){if(b(e),!p(e))throw new g(h(e));let t=[];function n(e,n){t.push({path:e,message:n})}let r=/* @__PURE__ */ new Set,i=new Map((e.groups??[]).map(e=>[e.id,e])),a=new Map(e.controls.map(e=>[e.id,e]));for(let[t,i]of[[`groups`,e.groups??[]],[`controls`,e.controls]])i.forEach((e,i)=>{r.has(e.id)&&n(`/${t}/${i}/id`,`duplicate ID ${e.id}`),r.add(e.id)});function o(e,t,r=0){if(!e)return;if(r>4){n(t,`conditions support at most five levels`);return}if(e.all||e.any){let n=e.all?`all`:`any`;e[n].forEach((e,i)=>o(e,`${t}/${n}/${i}`,r+1));return}let i=a.get(e.control);if(!i||i.type===`button`)n(t,`condition must reference a value control`);else if(`includes`in e)(i.type!==`checkboxGroup`||!i.options.includes(e.includes))&&n(t,`includes requires a declared checkboxGroup option`);else if(i.type===`checkboxGroup`)n(t,`checkboxGroup conditions must use includes`);else for(let r of`in`in e?e.in:[e.equals]){let e=_(i,r);e&&n(t,`invalid condition for ${i.id}: ${e}`)}}if(e.controls.forEach((e,t)=>{let r=`/controls/${t}`;if(e.group&&!i.has(e.group)&&n(`${r}/group`,`unknown group`),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&n(r,`min must not exceed max`),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&n(r,`minLength must not exceed maxLength`),e.type===`segmented`&&e.options.length>3&&n(`${r}/options`,`segmented supports at most three options`),e.type!==`button`){let t=_(e,e.default);t&&n(`${r}/default`,t)}o(e.when,`${r}/when`)}),(e.groups??[]).forEach((e,t)=>o(e.when,`/groups/${t}/when`)),t.length)throw new g(t);return y(e),e}var w=Symbol.for(`replica.controls.injected.runtime`),T=/* @__PURE__ */ new WeakMap;function E(){let e=globalThis[w];if(e&&e.version!==2)throw Error(`Replica controls runtime version mismatch; reload the page`);if(!e){let e=/* @__PURE__ */ new Map,t=/* @__PURE__ */ new Set,n=Object.freeze({version:2,create:e=>D(e),list:()=>Object.freeze([...e.values()].map(e=>e.controller)),subscribe(e){return t.add(e),()=>t.delete(e)}});T.set(n,{scopes:e,notify:()=>{for(let e of[...t])e()}}),globalThis[w]=n}return globalThis[w]}function D(e){C(e);let t=l(structuredClone(e)),n=u(t),r=E(),i=r.list().find(e=>e.declaration.scope===t.scope);if(i){if(u(i.declaration)!==n)throw Error(`Conflicting controls declaration for scope "${t.scope}"; reload after schema changes`);return i}let a=T.get(r);if(!a)return r.create(e);let o=new Map(t.controls.map(e=>[e.id,e])),s=new Map((t.groups??[]).map(e=>[e.id,e])),c=y(t),f=/* @__PURE__ */ new Set,p=/* @__PURE__ */ new Map,m=/* @__PURE__ */ new Set,h={},g=0,v=!1,b=!1,x;function S(e){for(let t of[...p.values()].reverse()){let n=t();if(Object.hasOwn(n,e)&&typeof n[e]==`function`)return n}}function w(e){let n={};for(let t of c){let r=o.get(t);n[t]=d(r.when,e)&&d(s.get(r.group)?.when,e),!n[t]&&r.type!==`button`&&(e[t]=structuredClone(r.default))}return l({values:e,visible:n,groups:Object.fromEntries([...s].map(([t,n])=>[t,d(n.when,e)])),actions:Object.fromEntries(t.controls.filter(e=>e.type===`button`).map(e=>[e.id,{available:!!S(e.id)&&!h[e.id]?.error,busy:m.has(e.id)}])),...Object.keys(h).length?{bindings:structuredClone(h)}:{}})}function D(){return Object.fromEntries(t.controls.filter(e=>e.type!==`button`).map(e=>[e.id,structuredClone(e.default)]))}x=l({...w(D()),revision:g});function O(e){let t=w(e),n={values:x.values,visible:x.visible,groups:x.groups,actions:x.actions,...x.bindings?{bindings:x.bindings}:{}};if(u(t)!==u(n)&&(x=l({...t,revision:++g}),b=!0,!v)){v=!0;try{for(;b;){b=!1;for(let e of[...f])e();a.notify()}}finally{v=!1}}}function k(e){let t=o.get(e);if(!t)throw Error(`Unknown control "${e}"`);if(!x.visible[e])throw Error(`Control "${e}" is hidden`);return t}let A=Object.freeze({declaration:t,getSnapshot:()=>x,subscribe(e){return f.add(e),()=>f.delete(e)},update(e,t){let n=_(k(e),t);if(n)throw Error(`Control "${e}": ${n}`);O({...x.values,[e]:structuredClone(t)})},restore(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Controls restore requires an object`);let t={...x.values};for(let[n,r]of Object.entries(e)){let e=o.get(n);if(!e)throw Error(`Unknown control "${n}"`);let i=_(e,r);if(i)throw Error(`Control "${n}": ${i}`);t[n]=structuredClone(r)}O(t)},refreshActions(){O({...x.values})},bindingStatus(e,t,n=!1,r=!t){if(!o.has(e))throw Error(`Unknown control "${e}"`);h[e]={error:t.slice(0,500),busy:n,available:r},O({...x.values})},reset(e){if(e===void 0)return O(D());let t=k(e);if(t.type===`button`)throw Error(`Buttons cannot be reset`);O({...x.values,[e]:structuredClone(t.default)})},async action(e){if(k(e).type!==`button`)throw Error(`Control "${e}" is not a button`);let t=S(e);if(!t)throw Error(`No mounted action handler for "${e}"`);if(m.has(e))throw Error(`Action "${e}" is busy`);m.add(e),O({...x.values});try{return await t[e]()}finally{m.delete(e),O({...x.values})}},mount(e=()=>({})){let t=Symbol();p.set(t,e);try{O({...x.values}),a.notify()}catch(e){throw p.delete(t),O({...x.values}),a.notify(),e}let n=!0;return()=>{n&&(n=!1,p.delete(t),O({...x.values}),a.notify())}},get mountedCount(){return p.size}});return a.scopes.set(t.scope,Object.freeze({canonical:n,controller:A})),a.notify(),A}function O(e,t=!1){if(!(e instanceof HTMLElement)||!e.isConnected)return`The binding target is missing or stale.`;let n=e.getBoundingClientRect();for(let t=e;t;t=t.parentElement){let e=window.getComputedStyle(t);if(t.hasAttribute(`hidden`)||t.hasAttribute(`inert`)||t.getAttribute(`aria-hidden`)===`true`||t.getAttribute(`aria-disabled`)===`true`||e.visibility===`hidden`||e.visibility===`collapse`||e.display===`none`||Number(e.opacity||1)===0)return`The binding target is hidden or disabled.`}if(e.hasAttribute(`data-replica-canvas-bridge`)||e.matches(`:disabled`)||!n.width||!n.height)return`The binding target is hidden or disabled.`;if(!t)return``;let r=document.elementFromPoint(n.left+n.width/2,n.top+n.height/2);if(!r||r!==e&&!e.contains(r))return`The binding target is blocked by another element.`;let i=e.closest(`button, input, select, textarea, [role="button"], [role="link"], a`),a=e.closest(`form`)||(e instanceof HTMLButtonElement||e instanceof HTMLInputElement?e.form:null);if(i!==e||a)return`The binding target is not a safe standalone control.`;let o=e.closest(`a`);if(o){let e=o.getAttribute(`href`),t;try{t=new URL(e||``,window.location.href)}catch{return`The binding target has an invalid link URL.`}if(!e||![`http:`,`https:`].includes(t.protocol)||t.origin!==window.location.origin||t.username||t.password||o.hasAttribute(`download`)||o.hasAttribute(`target`)&&o.getAttribute(`target`)!==`_self`)return`The binding target leaves the prototype or downloads a file.`}return``}function k(e,t){return JSON.stringify(e)===JSON.stringify(t)}function A(){let e=new URL(window.location.href);for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);return e.href}function j(e){let t=document.querySelectorAll(e);if(t.length!==1)throw Error(t.length?`The binding target is ambiguous.`:`The binding target is missing.`);return t[0]}function M(e){let t=window;for(let n of e.split(`.`)){if(!t||!Object.hasOwn(t,n))throw Error(`The app API "${e}" is unavailable.`);t=t[n]}if(!t||typeof t!=`object`&&typeof t!=`function`)throw Error(`The app API "${e}" is not an object.`);if([window,window.document,window.location,window.history,window.navigator].includes(t))throw Error(`API bindings must use an app-owned object, not a browser API.`);return t}function N(e){let t=e.binding;if(t.type===`api`){let e=M(t.object);for(let n of[t.read,t.write,t.action,t.subscribe].filter(Boolean))if(!Object.hasOwn(e,n)||typeof e[n]!=`function`)throw Error(`The app API method "${n}" is unavailable.`);return e}if(t.type===`query`||t.type===`hash`)return window;let n=j(t.selector),r=O(n,t.type===`button`);if(r)throw Error(r);if(t.type===`field`){if(!(n instanceof HTMLInputElement||n instanceof HTMLSelectElement||n instanceof HTMLTextAreaElement)||n instanceof HTMLInputElement&&[`button`,`submit`,`reset`,`image`,`file`,`password`,`hidden`].includes(n.type))throw Error(`The binding requires a supported native form field.`);if(e.type===`boolean`&&!(n instanceof HTMLInputElement&&n.type===`checkbox`))throw Error(`A boolean field binding requires a checkbox.`);if(e.type===`checkboxGroup`&&!(n instanceof HTMLSelectElement&&n.multiple))throw Error(`A checkboxGroup field binding requires a multiple select.`);if(n.readOnly)throw Error(`The binding target is read-only.`)}if(t.type===`style`&&e.type===`checkboxGroup`)throw Error(`Style bindings require a scalar control.`);return n}function P(e,t){if(e.type===`boolean`)return t===`true`||t!==`false`&&t;if(e.type===`number`||e.type===`slider`)return t.trim()===``?NaN:Number(t);if(e.type===`checkboxGroup`)return JSON.parse(t);if(e.type===`color`&&/^rgb\(/.test(t)){let e=t.match(/\d+/g);if(e?.length===3)return`#${e.map(e=>Number(e).toString(16).padStart(2,`0`)).join(``)}`}return t}function F(e){return Array.isArray(e)?JSON.stringify(e):String(e)}function I(e,t){let n=e.binding;if(n.type===`api`)return t[n.read]();if(n.type===`field`)return e.type===`boolean`?t.checked:e.type===`checkboxGroup`?[...t.selectedOptions].map(e=>e.value):P(e,t.value);if(n.type===`style`)return P(e,window.getComputedStyle(t).getPropertyValue(n.property).trim());let r=new URL(window.location.href),i=n.type===`query`?r.searchParams.get(n.key):decodeURIComponent(r.hash.slice(1));return i===null?structuredClone(e.default):P(e,i)}function L(e){let t=typeof e==`string`?e:e?.message;return Error(typeof t==`string`&&t?t:`The app binding failed without an error message.`)}async function R(e,t=5e3){let n;try{return await Promise.race([Promise.resolve().then(e),new Promise((e,r)=>{n=window.setTimeout(()=>r(/* @__PURE__ */ Error(`The app API timed out. Its outcome is unknown.`)),t)})])}catch(e){throw L(e)}finally{window.clearTimeout(n)}}function ee(e,t,n){let r=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLSelectElement?HTMLSelectElement.prototype:HTMLTextAreaElement.prototype;Object.getOwnPropertyDescriptor(r,t).set.call(e,n)}async function te(e,t,n){let r=e.binding;if(r.type===`api`){await R(()=>t[r.write](structuredClone(n)));return}if(r.type===`field`){if(t instanceof HTMLSelectElement)for(let e of Array.isArray(n)?n:[F(n)]){let n=[...t.options].filter(t=>t.value===e);if(n.length!==1||n[0].disabled||n[0].closest(`optgroup[disabled], [hidden], [inert]`))throw Error(`The native option is missing, ambiguous, hidden or disabled.`)}if(e.type===`checkboxGroup`)for(let e of t.options)e.selected=n.includes(e.value);else e.type===`boolean`?t.checked!==n&&t.click():ee(t,`value`,F(n));t.dispatchEvent(new Event(`input`,{bubbles:!0})),t.dispatchEvent(new Event(`change`,{bubbles:!0}));return}if(r.type===`style`){t.style.setProperty(r.property,F(n));return}let i=new URL(window.location.href);if(r.type===`query`?i.searchParams.set(r.key,F(n)):i.hash=`#${F(n).replace(/%/g,`%25`)}`,i.href===window.location.href)return;if(i.origin!==window.location.origin)throw Error(`URL bindings cannot leave the prototype.`);if(r.mode===`navigate`)return i;window.history.replaceState(window.history.state,``,i);let a=new Event(r.type===`hash`?`hashchange`:`popstate`);Object.defineProperty(a,"replicaControlsBinding",{value:!0}),window.dispatchEvent(a)}function ne(e){x(e);let t=(e.sets??[e]).map(e=>({controller:D(e),release:void 0,records:new Map(e.controls.map(e=>[e.id,{control:e,object:void 0,cleanup:void 0,initialized:!1,lastRead:0,reading:!1}]))})),n=!1,r=0,i=Promise.resolve(),a=Promise.resolve(),o=!1,s=!1,c,l=/* @__PURE__ */ new Set,u=``;function d(){let e=JSON.stringify(t.map(({controller:e})=>[e.declaration.scope,e.mountedCount,e.getSnapshot().revision]));if(e!==u){u=e;for(let e of l)e()}}let f=E().subscribe(()=>{!s&&!r&&d()});function p(e){if(!e.controller.declaration.container)return!0;let t=document.querySelectorAll(e.controller.declaration.container);if(t.length>1)throw Error(`The page container is ambiguous.`);return t.length===1&&!O(t[0])}function m(e,t){let n=t.cleanup;t.cleanup=void 0,t.object=void 0,t.initialized=!1;try{n?.()}catch(n){let r=/* @__PURE__ */ Error(`API cleanup failed: ${L(n).message}`);return e.controller.bindingStatus(t.control.id,r.message),r}}function h(e){let n=e.binding;if(n.type===`query`||n.type===`hash`){let e=/* @__PURE__ */ new Set;for(let r of t){let t;try{t=p(r)}catch{continue}if(t)for(let t of r.records.values()){let i=t.control.binding;i.type===n.type&&(n.type===`hash`||i.key===n.key)&&e.add(F(r.controller.getSnapshot().values[t.control.id]))}}if(e.size>1)throw Error(`This URL setting has conflicting active Controls bindings.`)}return N(e)}function g(e,t,r,i){let a=t.control.binding.type===`api`?new URL(A()).origin!==new URL(i).origin:A()!==i;if(n||!p(e)||a||h(t.control)!==r)throw Error(`The binding target or prototype route changed. The outcome is unknown.`)}async function v(e,t,n,r){let i=await R(()=>I(t.control,n));g(e,t,n,r);let a=_(t.control,i);if(a)throw Error(`The app value ${a}.`);return e.controller.restore({[t.control.id]:i}),t.lastRead=Date.now(),i}async function b(e,t,n){let{control:r}=t,i=e.controller.getSnapshot().values[r.id],a=A(),o;e.controller.bindingStatus(r.id,``,!0);try{o=h(r);let i=await te(r,o,n);if(i){let t=new URL(c?.href??window.location.href);return r.binding.type===`query`?t.searchParams.set(r.binding.key,i.searchParams.get(r.binding.key)):t.hash=i.hash,c=t,e.controller.restore({[r.id]:n}),e.controller.bindingStatus(r.id,``),n}await new Promise(e=>{let t=window.setTimeout(()=>{window.cancelAnimationFrame(n),e()},100),n=window.requestAnimationFrame(()=>{window.clearTimeout(t),e()})});let s=[`query`,`hash`].includes(r.binding.type),l=await v(e,t,o,s?A():a);if(!k(l,n))throw t.rejection=`The app rejected or adjusted this value. Its actual value is shown.`,t.rejectedValue=l,Error(`The app rejected or adjusted this value. Its actual value is shown.`);return t.rejection=``,e.controller.bindingStatus(r.id,``),l}catch(s){let c=L(s),l=!1;if(o)try{let n=await v(e,t,o,a);t.rejection=c.message,t.rejectedValue=n,l=!0}catch(e){c=/* @__PURE__ */ Error(`${c.message} ${L(e).message}`)}throw!l&&k(e.controller.getSnapshot().values[r.id],n)&&e.controller.restore({[r.id]:i}),e.controller.bindingStatus(r.id,c.message,!1,l),c}}async function S(e,t){let{control:n}=t;if(!t.reading){t.reading=!0;try{let r=h(n);if(t.object!==r){let i=m(e,t);if(i)throw i;if(t.object=r,n.binding.type===`api`&&n.binding.subscribe){let e=r[n.binding.subscribe](()=>{t.lastRead=0,C()});if(typeof e!=`function`)throw Error(`The API notification method must return a cleanup function.`);t.cleanup=e}}if(n.type===`button`){e.controller.bindingStatus(n.id,t.rejection||``,!1,!0);return}if(!t.initialized)t.initialized=!0,await b(e,t,e.controller.getSnapshot().values[n.id]);else{let i=n.binding.type===`api`?n.binding.pollMs:250;if(t.lastRead===0||i&&Date.now()-t.lastRead>=i){if(!e.controller.getSnapshot().visible[n.id]&&!k(await R(()=>I(n,r)),n.default))await b(e,t,n.default);else{let n=await v(e,t,r,A());t.rejection&&!k(n,t.rejectedValue)&&(t.rejection=``)}e.controller.bindingStatus(n.id,t.rejection||``,!1,!0)}}}catch(t){e.controller.bindingStatus(n.id,L(t).message)}finally{t.reading=!1}}}function C(){return o||(o=!0,a=a.then(async()=>{if(!(n||r)){s=!0;try{await Promise.all(t.map(async e=>{let t,n=!1;try{t=p(e)}catch(r){t=!0,n=!0;for(let t of e.records.values())e.controller.bindingStatus(t.control.id,`Invalid page container: ${r.message}`)}if(t){if(!e.release){let t=Object.fromEntries([...e.records.values()].filter(e=>e.control.type===`button`).map(t=>[t.control.id,async()=>{let n=h(t.control),r=A();t.control.binding.type===`api`?await R(()=>n[t.control.binding.action](),3e4):n.click(),g(e,t,n,r)}]));e.release=e.controller.mount(()=>t)}n||await Promise.all([...e.records.values()].map(t=>S(e,t)))}else{e.release?.(),e.release=void 0;for(let t of e.records.values())m(e,t)}}))}finally{s=!1,d()}}}).finally(()=>{o=!1})),a}function w(e,t){let n=i.then(async()=>{await a,t?.(),c=void 0,r++;try{return await e()}catch(e){throw c=void 0,e}finally{r--,d()}});return i=n.catch(()=>{}),n}function T(e){let n=t.find(t=>t.controller===e);if(!n)throw Error(`Unknown controls set.`);return n}async function j(e,t,n){let r=T(e),i=e.getSnapshot();n?.(),e.restore(t);let a=[];for(let o of y(e.declaration)){n?.();let s=r.records.get(o);if(s.control.type===`button`)continue;let c=e.getSnapshot().values[o];if(Object.hasOwn(t,o)||!k(c,i.values[o])||[`query`,`hash`].includes(s.control.binding.type)&&s.control.binding.mode===`navigate`)try{await b(r,s,c)}catch(t){e.getSnapshot().bindings[o]?.available!==!0&&k(e.getSnapshot().values[o],c)&&e.restore({[o]:i.values[o]}),a.push(`${s.control.label}: ${t.message}`)}}if(n?.(),a.length)throw Error(a.join(`
`).slice(0,1e3))}let M=window.setInterval(()=>{C()},250);function P(e){for(let n of t)for(let t of n.records.values())if(t.control.binding.type!==`api`&&t.control.type!==`button`){if(e.type===`input`||e.type===`change`){if(e.target!==t.object)continue;try{let e=I(t.control,t.object),r=_(t.control,e);if(r)throw Error(`The app value ${r}.`);n.controller.restore({[t.control.id]:e})}catch(e){n.controller.bindingStatus(t.control.id,e.message)}}t.lastRead=0}C()}for(let e of[`input`,`change`,`popstate`,`hashchange`])window.addEventListener(e,P);return C(),{runtime:E(),pending:()=>r>0||s,subscribe(e){return l.add(e),()=>l.delete(e)},settled:()=>a,restore:(e,t,n)=>w(()=>j(e,t,n),n),update:(e,t,n,r)=>w(()=>{let i=e.declaration.controls.find(e=>e.id===t),a=i?_(i,n):`Unknown control.`;if(a)throw Error(a);if(!e.getSnapshot().visible[t])throw Error(`This control is hidden.`);return j(e,{[t]:n},r)},r),takeNavigation(){if(!c)return;let e=c;c=void 0;for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);for(let[t,n]of new URL(window.location.href).searchParams)(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.append(t,n);return e.href},navigate(){let e=this.takeNavigation();e&&window.location.assign(e)},reset:(e,n)=>w(async()=>{let r=e?[T(e)]:t,i=[];for(let e of r){let t=Object.fromEntries(e.controller.declaration.controls.filter(e=>e.type!==`button`).map(e=>[e.id,e.default]));if(!e.release)e.controller.reset();else try{await j(e.controller,t,n)}catch(e){i.push(e.message)}}if(i.length)throw Error(i.join(`
-`).slice(0,1e3))},n),dispose(){n=!0,f(),window.clearInterval(M);for(let e of[`input`,`change`,`popstate`,`hashchange`])window.removeEventListener(e,P);for(let e of t){e.release?.();for(let t of e.records.values())m(e,t)}}}}async function re(){let e=await fetch(`/controls.replica.json`,{credentials:`same-origin`,redirect:`error`});if(e.status===404||e.status===410)return;if(!e.ok)throw Error(`controls.replica.json returned HTTP ${e.status}.`);let t=``,n=e.body?.getReader();if(n){let e=new TextDecoder,r=0;for(;;){let{done:i,value:a}=await n.read();if(i)break;if(r+=a.byteLength,r>256e3)throw await n.cancel(),Error(`controls.replica.json exceeds the 256,000-byte limit.`);t+=e.decode(a,{stream:!0})}t+=e.decode()}else t=await e.text();if(new TextEncoder().encode(t).length>256e3)throw Error(`controls.replica.json exceeds the 256,000-byte limit.`);if(!(e.headers.get(`content-type`)?.startsWith(`text/html`)&&/^\s*<(?:!doctype html|html)/i.test(t)))return ne(JSON.parse(t))}function z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var ie=`replica:controls`;function ae(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&z(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||z({[r.id]:r.value}))}catch{return!1}}function oe(e){return C(e.declaration),JSON.parse(JSON.stringify({declaration:e.declaration,fingerprint:JSON.stringify(e.declaration),snapshot:e.getSnapshot()}))}var se=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function B(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!z(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!se.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function ce(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=/* @__PURE__ */ new Map,i=!1;for(let[e,a]of n){let n=se.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!z({[s]:c})){i=!0;continue}let l=r.get(o)??/* @__PURE__ */ new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{B(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function le(e,t){let n=new URL(e,window.location.href),r=ce(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(B(r.scopes)))n.searchParams.set(e,t);return n.toString()}function ue(e,t,n){let r=window.history.pushState.bind(window.history),i=window.history.replaceState.bind(window.history),a=!1,o=document.readyState===`complete`||(performance.getEntriesByType?.(`navigation`)??[]).some(e=>`domContentLoadedEventStart`in e&&typeof e.domContentLoadedEventStart==`number`&&e.domContentLoadedEventStart>0),s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString();function c(){try{let e=B({...ce(s).scopes,...t()});return n(``),e}catch(e){return n(e instanceof Error?e.message:`Controls could not be saved in the URL.`),s}}function l(e){if(!a||!o)return new URL(String(e??window.location.href),window.location.href).toString();let t=new URL(le(String(e??window.location.href),c()));return t.searchParams.set(`rc`,`1`),t.toString()}function u(e,t,n){r(e,t,l(n))}function d(e,t,n){i(e,t,l(n))}window.history.pushState=u,window.history.replaceState=d;function f(t){`replicaControlsBinding`in t&&t.replicaControlsBinding===!0||(s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString(),e(s))}function p(e){if(!a||!o||e.defaultPrevented||!(e.target instanceof Element))return;let t=e.target.closest(`a[href]`);if(!(t instanceof HTMLAnchorElement)||t.hasAttribute(`download`)||t.target&&t.target!==`_self`)return;let n=new URL(t.href);n.origin===window.location.origin&&(t.href=l(n))}window.addEventListener(`popstate`,f),window.addEventListener(`click`,p,!0);function m(){if(!a||!o)return;s=c();let e=l(window.location.href);e!==window.location.href&&i(window.history.state,``,e)}function h(){o=!0,m()}return document.addEventListener(`DOMContentLoaded`,h,{once:!0}),{set(e){let t=ce(e);if(t.notice)throw Error(t.notice);s=B(t.scopes),a=!0,m()},refresh:m,current(){return new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString()},managed(){return new URLSearchParams(window.location.search).get(`rc`)===`1`},dispose(){window.history.pushState===u&&(window.history.pushState=r),window.history.replaceState===d&&(window.history.replaceState=i),window.removeEventListener(`popstate`,f),window.removeEventListener(`click`,p,!0),document.removeEventListener(`DOMContentLoaded`,h)}}}function de(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}var fe={mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function pe(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?fe.controlsActionUnavailable:``)}}function me(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>pe(e,t)))}}function he(e){let t=``,n,r,i=``,a=!1,o=/* @__PURE__ */ new Set,s=!1,c=0,l,u,d=!1,f,p=/* @__PURE__ */ new Set,m=/* @__PURE__ */ new Set,h=``,g=ue(e=>{m.clear(),x(`snapshot`,`event`,void 0,e)},()=>Object.fromEntries((n?.list()??[]).filter(e=>m.has(e.declaration.scope)).map(e=>[e.declaration.scope,de(oe(e))])),e=>{h!==e&&(h=e,x(`snapshot`,`event`))});async function _(){try{if(u=await re(),a){u?.dispose();return}n=u?.runtime,r=u?.subscribe(S),await u?.settled();let e=u;e&&v()&&await new Promise(t=>{function n(){clearTimeout(i),a(),f=void 0,t()}function r(){v()||n()}let i=setTimeout(n,500),a=e.subscribe(r);f=n,r()})}catch(e){l={status:`invalid-config`,error:e instanceof Error?e.message.slice(0,1e3):`Controls definitions could not be read.`}}finally{d=!0}S()}function v(){return n?.list().some(e=>Object.values(e.getSnapshot().bindings??{}).some(e=>e.error))}function y(){let e=!!n;if(l)return{runtimeAvailable:e,scopes:[],...l};if(!n)return{runtimeAvailable:!1,status:d?`no-controls`:`missing-runtime`,scopes:[]};try{let e=n.list().filter(e=>e.mountedCount>0).map(oe);return e.length>100?{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Too many active controls scopes.`}:{runtimeAvailable:!0,status:e.length?`ready`:`no-controls`,scopes:e}}catch{return{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`The Controls definitions are invalid.`}}}function b(){return{...y(),scopeErrors:[],reconnectRequired:s,...s?{error:`Reconnect controls before sending more commands.`}:{},...h?{error:`${h} Changes remain in memory and are not in the URL.`}:{}}}function x(n,r,i,o){if(a||!t)return;let s={protocol:ie,version:1,type:n,epoch:t,requestId:r,sequence:++c,state:b(),...i?{error:i}:{},...o===void 0?{}:{controlQuery:o}};window.parent.postMessage(ae(s)?s:{...s,state:{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Controls exceed the transport size limit.`},error:`Controls exceed the transport size limit.`},e)}function S(){for(let e of p)e();if(!d||u?.pending())return;g?.refresh();let e=JSON.stringify(b());e!==i&&(i=e,x(`snapshot`,`event`))}async function C(r){if(r.source===window.parent&&r.origin===e&&r.data&&typeof r.data==`object`&&`type`in r.data&&r.data.type===`replica:controls:status`&&`nonce`in r.data&&typeof r.data.nonce==`string`&&r.data.nonce.length<=100&&`timeoutMs`in r.data&&Number.isInteger(r.data.timeoutMs)&&typeof r.data.timeoutMs==`number`&&r.data.timeoutMs>=0&&r.data.timeoutMs<=1e4){let{nonce:t,timeoutMs:n}=r.data;function i(){return!d||u?.pending()===!0&&!b().scopes.some(({snapshot:e})=>[...Object.values(e.actions),...Object.values(e.bindings??{})].some(e=>e.busy))}i()&&n>0&&await new Promise(e=>{function t(){clearTimeout(o),p.delete(r),e()}function r(){(a||!i())&&t()}let o=setTimeout(t,n);p.add(r),r()}),a||window.parent.postMessage({type:`replica:controls:status-result`,nonce:t,value:me(b(),i(),window.location.href)},e);return}if(r.source!==window.parent||r.origin!==e||!ae(r.data))return;let i=r.data;if(i.type===`hello`){t=i.epoch,o.clear(),s=!1,m.clear();let e=i.fromFrameUrl&&g?.managed();g?.set(e?g.current():i.controlQuery??``),d||await w,x(`reply`,i.requestId,void 0,e?g?.current():void 0);return}if(i.type!==`command`||i.epoch!==t||o.has(i.requestId))return;if(o.size>=2e3){s=!0,x(`reply`,i.requestId,`Reconnect controls before sending more commands.`);return}o.add(i.requestId);let c=i.command;function l(){if(a||t!==i.epoch)throw Error(`The preview reconnected. The command outcome is unknown.`)}try{if(c?.operation===`url`){g.set(c.query??``),c.scope&&n?.list().some(e=>e.declaration.scope===c.scope&&e.mountedCount>0)&&(m.add(c.scope),g.refresh()),x(`reply`,i.requestId);return}if(!c||!n||![`ready`,`no-controls`].includes(b().status))throw Error(`Controls runtime is unavailable.`);if(c.operation===`reset-all`){if(n.list().some(e=>Object.values(e.getSnapshot().actions).some(e=>e.busy)))throw Error(`Wait for pending actions before resetting controls.`);let e=n.list().filter(e=>e.mountedCount>0);if(!Array.isArray(c.contexts)||c.contexts.length!==e.length||e.some(e=>!c.contexts?.some(t=>t.scope===e.declaration.scope&&t.fingerprint===JSON.stringify(e.declaration)&&t.revision===e.getSnapshot().revision)))throw Error(`Controls changed. The stale reset was not applied.`);m.clear(),await u?.reset(void 0,l)}else{let e=n.list().find(e=>e.declaration.scope===c.scope&&e.mountedCount>0);if(!e)throw Error(`This controls scope is no longer active.`);if(c.fingerprint!==JSON.stringify(e.declaration)||c.revision!==e.getSnapshot().revision)throw Error(`Controls changed. The stale command was not applied.`);if(c.operation===`restore`){if(!z(c.values))throw Error(`Invalid saved controls.`);await u?.restore(e,c.values,l),m.add(e.declaration.scope),g?.refresh()}else if(c.operation===`reset`)m.add(e.declaration.scope),await u?.reset(e,l);else{let t=e.declaration.controls.find(e=>e.id===c.id);if(!t||!e.getSnapshot().visible[t.id])throw Error(`This control is unknown or hidden.`);if(m.add(e.declaration.scope),c.operation===`update`){let n={[t.id]:c.value};if(!z(n))throw Error(`Invalid control value.`);let r=n[t.id];if(r===void 0)throw Error(`Missing control value.`);await u?.update(e,t.id,r,l)}else if(c.operation===`action`)await e.action(t.id);else throw Error(`Unknown controls command.`)}S()}t===i.epoch&&(x(`reply`,i.requestId),u?.navigate())}catch(e){t===i.epoch&&x(`reply`,i.requestId,e instanceof Error?e.message.slice(0,300):`The controls command failed.`)}}let w=_();function T(e){C(e)}return window.addEventListener(`message`,T),()=>{a=!0,f?.();for(let e of p)e();r?.(),u?.dispose(),window.removeEventListener(`message`,T),g?.dispose()}}var V=`data-replica-canvas-bridge`,ge=new TextEncoder,_e=null,H=null,U=null,W=null,ve=`light-dark(#0969da, #58a6ff)`,G=null,ye=``,be=``,K=/* @__PURE__ */ new Map;function xe(){let e=J();return e.pathname+e.search+e.hash}for(let e of[`popstate`,`hashchange`])window.addEventListener(e,e=>{be=`replicaControlsBinding`in e&&e.replicaControlsBinding?xe():``});function q(e){return e.replace(/\s+/g,` `).trim()}function Se(e,t){let n=``,r=0;for(let i of e){let e=ge.encode(i).length;if(r+e>t)break;n+=i,r+=e}return n}function J(){let e=window.location.search.slice(1).split(`&`).filter(e=>{let t=new URLSearchParams(e).keys().next().value;return t!==`rc`&&!t?.startsWith(`rc.`)}).join(`&`);return{pathname:window.location.pathname,search:e?`?${e}`:``,hash:window.location.hash}}function Ce(){return{width:window.innerWidth,height:window.innerHeight,scrollX:window.scrollX,scrollY:window.scrollY}}function we(e){return{x:e.left+window.scrollX,y:e.top+window.scrollY,width:e.width,height:e.height}}function Te(e){let t=e.getAttribute(`aria-labelledby`),n=t?t.split(/\s+/).map(e=>document.getElementById(e)?.textContent||``).join(` `):``,r=`labels`in e&&e.labels?Array.from(e.labels).map(e=>e.textContent||``).join(` `):``;return Se(q(e.getAttribute(`aria-label`)||n||r||e.getAttribute(`alt`)||e.getAttribute(`title`)||``),1e3)}function Ee(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`)}function De(e){if(e.id){let t=`#${Ee(e.id)}`;if(document.querySelectorAll(t).length===1)return t}for(let t of[`data-testid`,`data-test-id`]){let n=e.getAttribute(t);if(!n)continue;let r=`[${t}="${Ee(n)}"]`;if(document.querySelectorAll(r).length===1)return r}let t=[],n=e;for(;n&&n!==document.documentElement;){let e=n.tagName.toLowerCase(),r=n.parentElement?Array.from(n.parentElement.children).filter(e=>e.tagName===n?.tagName):[],i=r.length>1?`${e}:nth-of-type(${r.indexOf(n)+1})`:e;t.unshift(i);let a=t.join(` > `);if(document.querySelectorAll(a).length===1)return a;n=n.parentElement}return t.join(` > `)}function Oe(e,t){return e.tagName.toLowerCase()!==t.tagName||t.accessibleName&&Te(e)!==t.accessibleName?!1:!t.selectedText||q(e.textContent||``).includes(t.selectedText)}function ke(e){let t=null;try{t=document.querySelector(e.selector)}catch{}if(t&&Oe(t,e))return t;if(!e.accessibleName&&!e.selectedText)return null;let n=null;for(let r of document.getElementsByTagName(e.tagName))if(r!==t&&Oe(r,e)){if(n)return null;n=r}return n}function Ae(){let e=document.createElement(`div`);return e.setAttribute(V,``),Object.assign(e.style,{position:`fixed`,colorScheme:`light dark`,zIndex:`2147483647`,pointerEvents:`none`,border:`2px solid var(--replica-selection-accent)`,borderRadius:`4px`,background:`color-mix(in srgb, var(--replica-selection-accent) 12%, transparent)`,boxSizing:`border-box`}),e.style.setProperty(`--replica-selection-accent`,ve),document.documentElement.append(e),e}function Y(e,t){let n=e.style.position===`absolute`,r=`left`in t?t.left:t.x-window.scrollX,i=`top`in t?t.top:t.y-window.scrollY;Object.assign(e.style,{left:`${r+(n?window.scrollX:0)}px`,top:`${i+(n?window.scrollY:0)}px`,width:`${t.width}px`,height:`${t.height}px`})}function je(e,t=null){U?.remove(),U=e,W=t,U.style.pointerEvents=`none`}function X(e,t){window.parent.postMessage(t,e)}function Z(){H?.(),H=null}function Me(e,t,n){Z(),X(e,{type:`replica:canvas:selection-failed`,nonce:t,reason:n})}function Ne(e,t,n){let r=e.getBoundingClientRect(),i=De(e);if(!r.width||!r.height||!i)return null;let a=Se(q(window.getSelection()?.toString()||``),2e3);return{schemaVersion:1,kind:`element`,route:J(),selector:i,accessibleName:Te(e),tagName:e.tagName.toLowerCase(),selectedText:e.contains(window.getSelection()?.anchorNode||null)?a:``,rect:we(r),viewport:Ce(),elementOffset:{x:Math.min(1,Math.max(0,(t-r.left)/r.width)),y:Math.min(1,Math.max(0,(n-r.top)/r.height))}}}function Pe(e,t){Z();let n=null,r=Ae(),i=document.documentElement.style.cursor;document.documentElement.style.cursor=`crosshair`;function a(e){let t=e.target instanceof Element?e.target.closest(`:not([${V}])`):null;!t||t===document.documentElement||t===document.body?(n=null,r.style.display=`none`):(n=t,r.style.display=`block`,Y(r,t.getBoundingClientRect()))}function o(i){if(!n)return;i.preventDefault(),i.stopImmediatePropagation();let a=Ne(n,i.clientX,i.clientY);a?(r.style.position=Le(n)?`fixed`:`absolute`,Y(r,n.getBoundingClientRect()),je(r,n),Z(),X(e,{type:`replica:canvas:selected`,nonce:t,anchor:a})):(r.remove(),Me(e,t,`element-unavailable`))}function s(n){n.key===`Escape`&&(n.preventDefault(),Z(),X(e,{type:`replica:canvas:selection-cancelled`,nonce:t}))}document.addEventListener(`pointermove`,a,!0),document.addEventListener(`click`,o,!0),document.addEventListener(`keydown`,s,!0),H=()=>{document.removeEventListener(`pointermove`,a,!0),document.removeEventListener(`click`,o,!0),document.removeEventListener(`keydown`,s,!0),document.documentElement.style.cursor=i,U!==r&&r.remove()}}function Fe(e){let t=[[e.left+e.width/2,e.top+e.height/2],[e.left+1,e.top+1],[e.right-1,e.top+1],[e.right-1,e.bottom-1],[e.left+1,e.bottom-1]],n=/* @__PURE__ */ new Set;for(let[e,r]of t){for(let t of document.elementsFromPoint(e,r))if(t.hasAttribute(V)||n.add(t),n.size>=8)break;if(n.size>=8)break}return Array.from(n).flatMap(e=>{let t=De(e),n=e.getBoundingClientRect();return!t||!n.width||!n.height?[]:[{selector:t,accessibleName:Te(e),tagName:e.tagName.toLowerCase(),role:Se(e.getAttribute(`role`)||``,64),textExcerpt:Se(q(e.textContent||``),500),rect:we(n)}]})}function Ie(e,t){Z();let n=document.createElement(`div`);n.setAttribute(V,``),Object.assign(n.style,{position:`fixed`,inset:`0`,zIndex:`2147483646`,cursor:`crosshair`,touchAction:`none`});let r=Ae();r.style.display=`none`,document.body.append(n);let i=null;function a(e,t){if(!i)return;let n=Math.min(i.x,e),a=Math.min(i.y,t),o=Math.abs(e-i.x),s=Math.abs(t-i.y);r.style.display=`block`,Y(r,new DOMRect(n,a,o,s))}function o(e){e.preventDefault(),i={x:e.clientX,y:e.clientY},n.setPointerCapture(e.pointerId),a(e.clientX,e.clientY)}function s(e){i&&(e.preventDefault(),a(e.clientX,e.clientY))}function c(a){if(!i)return;a.preventDefault();let o=new DOMRect(Math.min(i.x,a.clientX),Math.min(i.y,a.clientY),Math.abs(a.clientX-i.x),Math.abs(a.clientY-i.y));if(Math.hypot(o.width,o.height)<8){n.remove(),r.remove(),Me(e,t,`area-too-small`);return}let s={schemaVersion:1,kind:`area`,route:J(),path:[{x:0,y:0},{x:1,y:0},{x:1,y:1},{x:0,y:1},{x:0,y:0}],rect:we(o),viewport:Ce(),elements:Fe(o)};n.remove(),r.style.position=`absolute`,Y(r,o),je(r),Z(),X(e,{type:`replica:canvas:selected`,nonce:t,anchor:s})}function l(n){n.key===`Escape`&&(n.preventDefault(),Z(),X(e,{type:`replica:canvas:selection-cancelled`,nonce:t}))}n.addEventListener(`pointerdown`,o),n.addEventListener(`pointermove`,s),n.addEventListener(`pointerup`,c),document.addEventListener(`keydown`,l,!0),H=()=>{n.removeEventListener(`pointerdown`,o),n.removeEventListener(`pointermove`,s),n.removeEventListener(`pointerup`,c),document.removeEventListener(`keydown`,l,!0),n.remove(),U!==r&&r.remove()}}function Q(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Le(e){for(let t=e;t;t=t.parentElement){let e=window.getComputedStyle(t).position;if(e===`fixed`||e===`sticky`)return!0}return!1}function Re(e){let t=J();if(!Q(e)||!Q(e.route)||e.route.pathname!==t.pathname||e.route.search!==t.search||e.route.hash!==t.hash)return null;if(e.kind===`area`){if(!Q(e.rect)||typeof e.rect.x!=`number`||typeof e.rect.y!=`number`||typeof e.rect.width!=`number`||typeof e.rect.height!=`number`||!Object.values(e.rect).every(Number.isFinite))return null;let t={x:e.rect.x-window.scrollX,y:e.rect.y-window.scrollY,width:e.rect.width,height:e.rect.height};return{x:t.x+t.width,y:t.y,rect:t,viewportAnchored:!1}}if(e.kind!==`element`||typeof e.selector!=`string`||typeof e.accessibleName!=`string`||typeof e.tagName!=`string`||e.selectedText!==void 0&&typeof e.selectedText!=`string`||!Q(e.elementOffset)||typeof e.elementOffset.x!=`number`||typeof e.elementOffset.y!=`number`||!Number.isFinite(e.elementOffset.x)||!Number.isFinite(e.elementOffset.y))return null;let n=ke({selector:e.selector,accessibleName:e.accessibleName,tagName:e.tagName,selectedText:e.selectedText});if(!n)return null;let r=n.getBoundingClientRect();return!r.width||!r.height?null:{x:r.left+r.width*e.elementOffset.x,y:r.top+r.height*e.elementOffset.y,viewportAnchored:Le(n)}}function $(e=!1){if(!G||!_e)return;let t=J(),n=JSON.stringify(t);e&&=n===ye,ye=n;let r=[];for(let t of G.anchors){let n=K.get(t.id),i;if(e&&n&&!n.viewportAnchored){let e=n.scrollX-window.scrollX,t=n.scrollY-window.scrollY;i={x:n.x+e,y:n.y+t,...n.rect?{rect:{...n.rect,x:n.rect.x+e,y:n.rect.y+t}}:{}}}else{let e=Re(t.anchor);if(!e){K.delete(t.id);continue}K.set(t.id,{...e,scrollX:window.scrollX,scrollY:window.scrollY}),i={x:e.x,y:e.y,...`rect`in e?{rect:e.rect}:{}}}r.push({id:t.id,...i})}X(_e,{type:`replica:canvas:resolved`,protocolVersion:1,nonce:G.nonce,route:t,...be===xe()?{replaceRoute:!0}:{},results:r})}function ze(e){let t=e.data;if(document.querySelector(`script[src="/__replica/bridge/v1.js"]`)||e.source!==window.parent||e.origin!==_e||!Q(t)||typeof t.nonce!=`string`||t.nonce.length>100)return;if(t.type===`replica:canvas:request-ready`){X(e.origin,{type:`replica:canvas:ready`,protocolVersion:1,nonce:t.nonce,route:J(),...be===xe()?{replaceRoute:!0}:{}});return}if(t.type===`replica:canvas:theme`){if(typeof t.accent!=`string`||t.accent.length>200||!CSS.supports(`color`,t.accent))return;ve=t.accent;for(let e of document.querySelectorAll(`[${V}]`))e.style.setProperty(`--replica-selection-accent`,ve);return}if(t.type===`replica:canvas:click`){let{selector:n,expectedLabel:r,route:i}=t,a=J(),o=`The click target is unavailable or ambiguous.`,s=null;if(typeof n==`string`&&n.length>0&&n.length<=512&&typeof r==`string`&&r.length>0&&r.length<=200&&Q(i)&&typeof i.pathname==`string`&&i.pathname===a.pathname&&i.search===a.search&&i.hash===a.hash)try{let e=document.querySelectorAll(n);e.length===1&&(s=e.item(0))}catch{o=`The click selector is invalid.`}else o=`The prototype route changed or the click input is invalid.`;if(s){let n=s;if(O(n,!0)||(Te(n)||q(n.textContent||``).slice(0,200))!==r)o=`The target is hidden, blocked, disabled, unsafe, or its accessible name changed.`;else{n.click(),X(e.origin,{type:`replica:canvas:click-result`,nonce:t.nonce,clicked:!0});return}}X(e.origin,{type:`replica:canvas:click-result`,nonce:t.nonce,clicked:!1,error:o});return}if(t.type===`replica:canvas:select`){t.mode===`element`?Pe(e.origin,t.nonce):t.mode===`area`&&Ie(e.origin,t.nonce);return}if(t.type===`replica:canvas:cancel-selection`){Z(),X(e.origin,{type:`replica:canvas:selection-cancelled`,nonce:t.nonce});return}if(t.type===`replica:canvas:clear-selection`){U?.remove(),U=null,W=null;return}if(t.type!==`replica:canvas:resolve`||!Array.isArray(t.anchors)||t.anchors.length>200)return;let n=[],r=t.anchors;for(let e of r)Q(e)&&typeof e.id==`number`&&Number.isSafeInteger(e.id)&&n.push({id:e.id,anchor:e.anchor});G={nonce:t.nonce,anchors:n},K.clear(),$()}var Be=Symbol.for(`replica.canvas.bridge.v1`),Ve=window;function He(e){if(!/^http:\/\/127\.0\.0\.1:\d+$/.test(e))throw Error(`Invalid Replica canvas parent.`);let t=Ve[Be];if(t===!0)throw Error(`Remove the old source bridge before using the extension-owned bridge.`);typeof t==`function`&&t(),ve=`light-dark(#0969da, #58a6ff)`,_e=e,G=null,ye=``,K.clear();let n=he(e),r=null;function i(){r!==null&&window.cancelAnimationFrame(r),r=null,U&&W&&(U.style.position=Le(W)?`fixed`:`absolute`,Y(U,W.getBoundingClientRect())),$()}function a(){r===null&&G&&(r=window.requestAnimationFrame(i))}function o(e){U&&W&&(e.target!==document&&e.target!==window||Le(W))&&Y(U,W.getBoundingClientRect()),r===null?$(e.target===document||e.target===window):i()}function s(){$()}function c(t){if(t.key!==`Escape`||t.defaultPrevented||t.isComposing||H||!G||t.target instanceof Element&&t.target.closest(`[role="dialog"], dialog, [role="menu"]`))return;let n=G;window.setTimeout(()=>{t.defaultPrevented||H||G!==n||X(e,{type:`replica:canvas:conversation-dismiss-requested`,nonce:n.nonce})},0)}window.addEventListener(`message`,ze),window.addEventListener(`scroll`,o,{capture:!0,passive:!0}),window.addEventListener(`resize`,s),window.addEventListener(`keydown`,c);let l=new MutationObserver(e=>{e.some(e=>!(e.target instanceof Element&&e.target.closest(`[${V}], [data-replica-controls-bridge]`)))&&a()});l.observe(document.documentElement,{attributes:!0,characterData:!0,childList:!0,subtree:!0});let u=typeof ResizeObserver==`function`?new ResizeObserver(a):null;u?.observe(document.documentElement),Ve[Be]=()=>{window.removeEventListener(`message`,ze),window.removeEventListener(`scroll`,o,!0),window.removeEventListener(`resize`,s),window.removeEventListener(`keydown`,c),l.disconnect(),u?.disconnect(),r!==null&&window.cancelAnimationFrame(r),G=null,ye=``,K.clear(),n(),Z(),U?.remove(),U=null,W=null}}export{He as installBridge};
\ No newline at end of file
+`).slice(0,1e3))},n),dispose(){n=!0,f(),window.clearInterval(M);for(let e of[`input`,`change`,`popstate`,`hashchange`])window.removeEventListener(e,P);for(let e of t){e.release?.();for(let t of e.records.values())m(e,t)}}}}async function re(){let e=await fetch(`/controls.replica.json`,{credentials:`same-origin`,redirect:`error`});if(e.status===404||e.status===410)return;if(!e.ok)throw Error(`controls.replica.json returned HTTP ${e.status}.`);let t=``,n=e.body?.getReader();if(n){let e=new TextDecoder,r=0;for(;;){let{done:i,value:a}=await n.read();if(i)break;if(r+=a.byteLength,r>256e3)throw await n.cancel(),Error(`controls.replica.json exceeds the 256,000-byte limit.`);t+=e.decode(a,{stream:!0})}t+=e.decode()}else t=await e.text();if(new TextEncoder().encode(t).length>256e3)throw Error(`controls.replica.json exceeds the 256,000-byte limit.`);if(!(e.headers.get(`content-type`)?.startsWith(`text/html`)&&/^\s*<(?:!doctype html|html)/i.test(t)))return ne(JSON.parse(t))}function z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var ie=`replica:controls`;function ae(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&z(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||z({[r.id]:r.value}))}catch{return!1}}function oe(e){return C(e.declaration),JSON.parse(JSON.stringify({declaration:e.declaration,fingerprint:JSON.stringify(e.declaration),snapshot:e.getSnapshot()}))}var se=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function B(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!z(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!se.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function ce(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=/* @__PURE__ */ new Map,i=!1;for(let[e,a]of n){let n=se.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!z({[s]:c})){i=!0;continue}let l=r.get(o)??/* @__PURE__ */ new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{B(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function le(e,t){let n=new URL(e,window.location.href),r=ce(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(B(r.scopes)))n.searchParams.set(e,t);return n.toString()}function ue(e,t,n){let r=window.history.pushState.bind(window.history),i=window.history.replaceState.bind(window.history),a=!1,o=document.readyState===`complete`||(performance.getEntriesByType?.(`navigation`)??[]).some(e=>`domContentLoadedEventStart`in e&&typeof e.domContentLoadedEventStart==`number`&&e.domContentLoadedEventStart>0),s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString();function c(){try{let e=B({...ce(s).scopes,...t()});return n(``),e}catch(e){return n(e instanceof Error?e.message:`Controls could not be saved in the URL.`),s}}function l(e){if(!a||!o)return new URL(String(e??window.location.href),window.location.href).toString();let t=new URL(le(String(e??window.location.href),c()));return t.searchParams.set(`rc`,`1`),t.toString()}function u(e,t,n){r(e,t,l(n))}function d(e,t,n){i(e,t,l(n))}window.history.pushState=u,window.history.replaceState=d;function f(t){`replicaControlsBinding`in t&&t.replicaControlsBinding===!0||(s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString(),e(s))}function p(e){if(!a||!o||e.defaultPrevented||!(e.target instanceof Element))return;let t=e.target.closest(`a[href]`);if(!(t instanceof HTMLAnchorElement)||t.hasAttribute(`download`)||t.target&&t.target!==`_self`)return;let n=new URL(t.href);n.origin===window.location.origin&&(t.href=l(n))}window.addEventListener(`popstate`,f),window.addEventListener(`click`,p,!0);function m(){if(!a||!o)return;s=c();let e=l(window.location.href);e!==window.location.href&&i(window.history.state,``,e)}function h(){o=!0,m()}return document.addEventListener(`DOMContentLoaded`,h,{once:!0}),{set(e){let t=ce(e);if(t.notice)throw Error(t.notice);s=B(t.scopes),a=!0,m()},refresh:m,current(){return new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString()},managed(){return new URLSearchParams(window.location.search).get(`rc`)===`1`},dispose(){window.history.pushState===u&&(window.history.pushState=r),window.history.replaceState===d&&(window.history.replaceState=i),window.removeEventListener(`popstate`,f),window.removeEventListener(`click`,p,!0),document.removeEventListener(`DOMContentLoaded`,h)}}}function de(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}var fe={localCommentsSaved:`Comments stay on this device until a Build with matching content is published and the canvas syncs them to Hub.`,commentPagesExceeded:`Too many review comment pages.`,commentPreparationFailed:`Hub could not prepare this comment.`,commentRefreshFailed:e=>`The comment was saved, but Hub could not be refreshed: ${e}`,commentLiveUpdatesPaused:`Live updates paused; checking every 30 seconds.`,mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function pe(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?fe.controlsActionUnavailable:``)}}function me(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>pe(e,t)))}}function he(e){let t=``,n,r,i=``,a=!1,o=/* @__PURE__ */ new Set,s=!1,c=0,l,u,d=!1,f,p=/* @__PURE__ */ new Set,m=/* @__PURE__ */ new Set,h=``,g=ue(e=>{m.clear(),x(`snapshot`,`event`,void 0,e)},()=>Object.fromEntries((n?.list()??[]).filter(e=>m.has(e.declaration.scope)).map(e=>[e.declaration.scope,de(oe(e))])),e=>{h!==e&&(h=e,x(`snapshot`,`event`))});async function _(){try{if(u=await re(),a){u?.dispose();return}n=u?.runtime,r=u?.subscribe(S),await u?.settled();let e=u;e&&v()&&await new Promise(t=>{function n(){clearTimeout(i),a(),f=void 0,t()}function r(){v()||n()}let i=setTimeout(n,500),a=e.subscribe(r);f=n,r()})}catch(e){l={status:`invalid-config`,error:e instanceof Error?e.message.slice(0,1e3):`Controls definitions could not be read.`}}finally{d=!0}S()}function v(){return n?.list().some(e=>Object.values(e.getSnapshot().bindings??{}).some(e=>e.error))}function y(){let e=!!n;if(l)return{runtimeAvailable:e,scopes:[],...l};if(!n)return{runtimeAvailable:!1,status:d?`no-controls`:`missing-runtime`,scopes:[]};try{let e=n.list().filter(e=>e.mountedCount>0).map(oe);return e.length>100?{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Too many active controls scopes.`}:{runtimeAvailable:!0,status:e.length?`ready`:`no-controls`,scopes:e}}catch{return{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`The Controls definitions are invalid.`}}}function b(){return{...y(),scopeErrors:[],reconnectRequired:s,...s?{error:`Reconnect controls before sending more commands.`}:{},...h?{error:`${h} Changes remain in memory and are not in the URL.`}:{}}}function x(n,r,i,o){if(a||!t)return;let s={protocol:ie,version:1,type:n,epoch:t,requestId:r,sequence:++c,state:b(),...i?{error:i}:{},...o===void 0?{}:{controlQuery:o}};window.parent.postMessage(ae(s)?s:{...s,state:{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Controls exceed the transport size limit.`},error:`Controls exceed the transport size limit.`},e)}function S(){for(let e of p)e();if(!d||u?.pending())return;g?.refresh();let e=JSON.stringify(b());e!==i&&(i=e,x(`snapshot`,`event`))}async function C(r){if(r.source===window.parent&&r.origin===e&&r.data&&typeof r.data==`object`&&`type`in r.data&&r.data.type===`replica:controls:status`&&`nonce`in r.data&&typeof r.data.nonce==`string`&&r.data.nonce.length<=100&&`timeoutMs`in r.data&&Number.isInteger(r.data.timeoutMs)&&typeof r.data.timeoutMs==`number`&&r.data.timeoutMs>=0&&r.data.timeoutMs<=1e4){let{nonce:t,timeoutMs:n}=r.data;function i(){return!d||u?.pending()===!0&&!b().scopes.some(({snapshot:e})=>[...Object.values(e.actions),...Object.values(e.bindings??{})].some(e=>e.busy))}i()&&n>0&&await new Promise(e=>{function t(){clearTimeout(o),p.delete(r),e()}function r(){(a||!i())&&t()}let o=setTimeout(t,n);p.add(r),r()}),a||window.parent.postMessage({type:`replica:controls:status-result`,nonce:t,value:me(b(),i(),window.location.href)},e);return}if(r.source!==window.parent||r.origin!==e||!ae(r.data))return;let i=r.data;if(i.type===`hello`){t=i.epoch,o.clear(),s=!1,m.clear();let e=i.fromFrameUrl&&g?.managed();g?.set(e?g.current():i.controlQuery??``),d||await w,x(`reply`,i.requestId,void 0,e?g?.current():void 0);return}if(i.type!==`command`||i.epoch!==t||o.has(i.requestId))return;if(o.size>=2e3){s=!0,x(`reply`,i.requestId,`Reconnect controls before sending more commands.`);return}o.add(i.requestId);let c=i.command;function l(){if(a||t!==i.epoch)throw Error(`The preview reconnected. The command outcome is unknown.`)}try{if(c?.operation===`url`){g.set(c.query??``),c.scope&&n?.list().some(e=>e.declaration.scope===c.scope&&e.mountedCount>0)&&(m.add(c.scope),g.refresh()),x(`reply`,i.requestId);return}if(!c||!n||![`ready`,`no-controls`].includes(b().status))throw Error(`Controls runtime is unavailable.`);if(c.operation===`reset-all`){if(n.list().some(e=>Object.values(e.getSnapshot().actions).some(e=>e.busy)))throw Error(`Wait for pending actions before resetting controls.`);let e=n.list().filter(e=>e.mountedCount>0);if(!Array.isArray(c.contexts)||c.contexts.length!==e.length||e.some(e=>!c.contexts?.some(t=>t.scope===e.declaration.scope&&t.fingerprint===JSON.stringify(e.declaration)&&t.revision===e.getSnapshot().revision)))throw Error(`Controls changed. The stale reset was not applied.`);m.clear(),await u?.reset(void 0,l)}else{let e=n.list().find(e=>e.declaration.scope===c.scope&&e.mountedCount>0);if(!e)throw Error(`This controls scope is no longer active.`);if(c.fingerprint!==JSON.stringify(e.declaration)||c.revision!==e.getSnapshot().revision)throw Error(`Controls changed. The stale command was not applied.`);if(c.operation===`restore`){if(!z(c.values))throw Error(`Invalid saved controls.`);await u?.restore(e,c.values,l),m.add(e.declaration.scope),g?.refresh()}else if(c.operation===`reset`)m.add(e.declaration.scope),await u?.reset(e,l);else{let t=e.declaration.controls.find(e=>e.id===c.id);if(!t||!e.getSnapshot().visible[t.id])throw Error(`This control is unknown or hidden.`);if(m.add(e.declaration.scope),c.operation===`update`){let n={[t.id]:c.value};if(!z(n))throw Error(`Invalid control value.`);let r=n[t.id];if(r===void 0)throw Error(`Missing control value.`);await u?.update(e,t.id,r,l)}else if(c.operation===`action`)await e.action(t.id);else throw Error(`Unknown controls command.`)}S()}t===i.epoch&&(x(`reply`,i.requestId),u?.navigate())}catch(e){t===i.epoch&&x(`reply`,i.requestId,e instanceof Error?e.message.slice(0,300):`The controls command failed.`)}}let w=_();function T(e){C(e)}return window.addEventListener(`message`,T),()=>{a=!0,f?.();for(let e of p)e();r?.(),u?.dispose(),window.removeEventListener(`message`,T),g?.dispose()}}var V=`data-replica-canvas-bridge`,ge=new TextEncoder,_e=null,H=null,U=null,W=null,ve=`light-dark(#0969da, #58a6ff)`,G=null,ye=``,be=``,K=/* @__PURE__ */ new Map;function xe(){let e=J();return e.pathname+e.search+e.hash}for(let e of[`popstate`,`hashchange`])window.addEventListener(e,e=>{be=`replicaControlsBinding`in e&&e.replicaControlsBinding?xe():``});function q(e){return e.replace(/\s+/g,` `).trim()}function Se(e,t){let n=``,r=0;for(let i of e){let e=ge.encode(i).length;if(r+e>t)break;n+=i,r+=e}return n}function J(){let e=window.location.search.slice(1).split(`&`).filter(e=>{let t=new URLSearchParams(e).keys().next().value;return t!==`rc`&&!t?.startsWith(`rc.`)}).join(`&`);return{pathname:window.location.pathname,search:e?`?${e}`:``,hash:window.location.hash}}function Ce(){return{width:window.innerWidth,height:window.innerHeight,scrollX:window.scrollX,scrollY:window.scrollY}}function we(e){return{x:e.left+window.scrollX,y:e.top+window.scrollY,width:e.width,height:e.height}}function Te(e){let t=e.getAttribute(`aria-labelledby`),n=t?t.split(/\s+/).map(e=>document.getElementById(e)?.textContent||``).join(` `):``,r=`labels`in e&&e.labels?Array.from(e.labels).map(e=>e.textContent||``).join(` `):``;return Se(q(e.getAttribute(`aria-label`)||n||r||e.getAttribute(`alt`)||e.getAttribute(`title`)||``),1e3)}function Ee(e){return typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,e=>`\\${e}`)}function De(e){if(e.id){let t=`#${Ee(e.id)}`;if(document.querySelectorAll(t).length===1)return t}for(let t of[`data-testid`,`data-test-id`]){let n=e.getAttribute(t);if(!n)continue;let r=`[${t}="${Ee(n)}"]`;if(document.querySelectorAll(r).length===1)return r}let t=[],n=e;for(;n&&n!==document.documentElement;){let e=n.tagName.toLowerCase(),r=n.parentElement?Array.from(n.parentElement.children).filter(e=>e.tagName===n?.tagName):[],i=r.length>1?`${e}:nth-of-type(${r.indexOf(n)+1})`:e;t.unshift(i);let a=t.join(` > `);if(document.querySelectorAll(a).length===1)return a;n=n.parentElement}return t.join(` > `)}function Oe(e,t){return e.tagName.toLowerCase()!==t.tagName||t.accessibleName&&Te(e)!==t.accessibleName?!1:!t.selectedText||q(e.textContent||``).includes(t.selectedText)}function ke(e){let t=null;try{t=document.querySelector(e.selector)}catch{}if(t&&Oe(t,e))return t;if(!e.accessibleName&&!e.selectedText)return null;let n=null;for(let r of document.getElementsByTagName(e.tagName))if(r!==t&&Oe(r,e)){if(n)return null;n=r}return n}function Ae(){let e=document.createElement(`div`);return e.setAttribute(V,``),Object.assign(e.style,{position:`fixed`,colorScheme:`light dark`,zIndex:`2147483647`,pointerEvents:`none`,border:`2px solid var(--replica-selection-accent)`,borderRadius:`4px`,background:`color-mix(in srgb, var(--replica-selection-accent) 12%, transparent)`,boxSizing:`border-box`}),e.style.setProperty(`--replica-selection-accent`,ve),document.documentElement.append(e),e}function Y(e,t){let n=e.style.position===`absolute`,r=`left`in t?t.left:t.x-window.scrollX,i=`top`in t?t.top:t.y-window.scrollY;Object.assign(e.style,{left:`${r+(n?window.scrollX:0)}px`,top:`${i+(n?window.scrollY:0)}px`,width:`${t.width}px`,height:`${t.height}px`})}function je(e,t=null){U?.remove(),U=e,W=t,U.style.pointerEvents=`none`}function X(e,t){window.parent.postMessage(t,e)}function Z(){H?.(),H=null}function Me(e,t,n){Z(),X(e,{type:`replica:canvas:selection-failed`,nonce:t,reason:n})}function Ne(e,t,n){let r=e.getBoundingClientRect(),i=De(e);if(!r.width||!r.height||!i)return null;let a=Se(q(window.getSelection()?.toString()||``),2e3);return{schemaVersion:1,kind:`element`,route:J(),selector:i,accessibleName:Te(e),tagName:e.tagName.toLowerCase(),selectedText:e.contains(window.getSelection()?.anchorNode||null)?a:``,rect:we(r),viewport:Ce(),elementOffset:{x:Math.min(1,Math.max(0,(t-r.left)/r.width)),y:Math.min(1,Math.max(0,(n-r.top)/r.height))}}}function Pe(e,t){Z();let n=null,r=Ae(),i=document.documentElement.style.cursor;document.documentElement.style.cursor=`crosshair`;function a(e){let t=e.target instanceof Element?e.target.closest(`:not([${V}])`):null;!t||t===document.documentElement||t===document.body?(n=null,r.style.display=`none`):(n=t,r.style.display=`block`,Y(r,t.getBoundingClientRect()))}function o(i){if(!n)return;i.preventDefault(),i.stopImmediatePropagation();let a=Ne(n,i.clientX,i.clientY);a?(r.style.position=Le(n)?`fixed`:`absolute`,Y(r,n.getBoundingClientRect()),je(r,n),Z(),X(e,{type:`replica:canvas:selected`,nonce:t,anchor:a})):(r.remove(),Me(e,t,`element-unavailable`))}function s(n){n.key===`Escape`&&(n.preventDefault(),Z(),X(e,{type:`replica:canvas:selection-cancelled`,nonce:t}))}document.addEventListener(`pointermove`,a,!0),document.addEventListener(`click`,o,!0),document.addEventListener(`keydown`,s,!0),H=()=>{document.removeEventListener(`pointermove`,a,!0),document.removeEventListener(`click`,o,!0),document.removeEventListener(`keydown`,s,!0),document.documentElement.style.cursor=i,U!==r&&r.remove()}}function Fe(e){let t=[[e.left+e.width/2,e.top+e.height/2],[e.left+1,e.top+1],[e.right-1,e.top+1],[e.right-1,e.bottom-1],[e.left+1,e.bottom-1]],n=/* @__PURE__ */ new Set;for(let[e,r]of t){for(let t of document.elementsFromPoint(e,r))if(t.hasAttribute(V)||n.add(t),n.size>=8)break;if(n.size>=8)break}return Array.from(n).flatMap(e=>{let t=De(e),n=e.getBoundingClientRect();return!t||!n.width||!n.height?[]:[{selector:t,accessibleName:Te(e),tagName:e.tagName.toLowerCase(),role:Se(e.getAttribute(`role`)||``,64),textExcerpt:Se(q(e.textContent||``),500),rect:we(n)}]})}function Ie(e,t){Z();let n=document.createElement(`div`);n.setAttribute(V,``),Object.assign(n.style,{position:`fixed`,inset:`0`,zIndex:`2147483646`,cursor:`crosshair`,touchAction:`none`});let r=Ae();r.style.display=`none`,document.body.append(n);let i=null;function a(e,t){if(!i)return;let n=Math.min(i.x,e),a=Math.min(i.y,t),o=Math.abs(e-i.x),s=Math.abs(t-i.y);r.style.display=`block`,Y(r,new DOMRect(n,a,o,s))}function o(e){e.preventDefault(),i={x:e.clientX,y:e.clientY},n.setPointerCapture(e.pointerId),a(e.clientX,e.clientY)}function s(e){i&&(e.preventDefault(),a(e.clientX,e.clientY))}function c(a){if(!i)return;a.preventDefault();let o=new DOMRect(Math.min(i.x,a.clientX),Math.min(i.y,a.clientY),Math.abs(a.clientX-i.x),Math.abs(a.clientY-i.y));if(Math.hypot(o.width,o.height)<8){n.remove(),r.remove(),Me(e,t,`area-too-small`);return}let s={schemaVersion:1,kind:`area`,route:J(),path:[{x:0,y:0},{x:1,y:0},{x:1,y:1},{x:0,y:1},{x:0,y:0}],rect:we(o),viewport:Ce(),elements:Fe(o)};n.remove(),r.style.position=`absolute`,Y(r,o),je(r),Z(),X(e,{type:`replica:canvas:selected`,nonce:t,anchor:s})}function l(n){n.key===`Escape`&&(n.preventDefault(),Z(),X(e,{type:`replica:canvas:selection-cancelled`,nonce:t}))}n.addEventListener(`pointerdown`,o),n.addEventListener(`pointermove`,s),n.addEventListener(`pointerup`,c),document.addEventListener(`keydown`,l,!0),H=()=>{n.removeEventListener(`pointerdown`,o),n.removeEventListener(`pointermove`,s),n.removeEventListener(`pointerup`,c),document.removeEventListener(`keydown`,l,!0),n.remove(),U!==r&&r.remove()}}function Q(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Le(e){for(let t=e;t;t=t.parentElement){let e=window.getComputedStyle(t).position;if(e===`fixed`||e===`sticky`)return!0}return!1}function Re(e){let t=J();if(!Q(e)||!Q(e.route)||e.route.pathname!==t.pathname||e.route.search!==t.search||e.route.hash!==t.hash)return null;if(e.kind===`area`){if(!Q(e.rect)||typeof e.rect.x!=`number`||typeof e.rect.y!=`number`||typeof e.rect.width!=`number`||typeof e.rect.height!=`number`||!Object.values(e.rect).every(Number.isFinite))return null;let t={x:e.rect.x-window.scrollX,y:e.rect.y-window.scrollY,width:e.rect.width,height:e.rect.height};return{x:t.x+t.width,y:t.y,rect:t,viewportAnchored:!1}}if(e.kind!==`element`||typeof e.selector!=`string`||typeof e.accessibleName!=`string`||typeof e.tagName!=`string`||e.selectedText!==void 0&&typeof e.selectedText!=`string`||!Q(e.elementOffset)||typeof e.elementOffset.x!=`number`||typeof e.elementOffset.y!=`number`||!Number.isFinite(e.elementOffset.x)||!Number.isFinite(e.elementOffset.y))return null;let n=ke({selector:e.selector,accessibleName:e.accessibleName,tagName:e.tagName,selectedText:e.selectedText});if(!n)return null;let r=n.getBoundingClientRect();return!r.width||!r.height?null:{x:r.left+r.width*e.elementOffset.x,y:r.top+r.height*e.elementOffset.y,viewportAnchored:Le(n)}}function $(e=!1){if(!G||!_e)return;let t=J(),n=JSON.stringify(t);e&&=n===ye,ye=n;let r=[];for(let t of G.anchors){let n=K.get(t.id),i;if(e&&n&&!n.viewportAnchored){let e=n.scrollX-window.scrollX,t=n.scrollY-window.scrollY;i={x:n.x+e,y:n.y+t,...n.rect?{rect:{...n.rect,x:n.rect.x+e,y:n.rect.y+t}}:{}}}else{let e=Re(t.anchor);if(!e){K.delete(t.id);continue}K.set(t.id,{...e,scrollX:window.scrollX,scrollY:window.scrollY}),i={x:e.x,y:e.y,...`rect`in e?{rect:e.rect}:{}}}r.push({id:t.id,...i})}X(_e,{type:`replica:canvas:resolved`,protocolVersion:1,nonce:G.nonce,route:t,...be===xe()?{replaceRoute:!0}:{},results:r})}function ze(e){let t=e.data;if(document.querySelector(`script[src="/__replica/bridge/v1.js"]`)||e.source!==window.parent||e.origin!==_e||!Q(t)||typeof t.nonce!=`string`||t.nonce.length>100)return;if(t.type===`replica:canvas:request-ready`){X(e.origin,{type:`replica:canvas:ready`,protocolVersion:1,nonce:t.nonce,route:J(),...be===xe()?{replaceRoute:!0}:{}});return}if(t.type===`replica:canvas:theme`){if(typeof t.accent!=`string`||t.accent.length>200||!CSS.supports(`color`,t.accent))return;ve=t.accent;for(let e of document.querySelectorAll(`[${V}]`))e.style.setProperty(`--replica-selection-accent`,ve);return}if(t.type===`replica:canvas:click`){let{selector:n,expectedLabel:r,route:i}=t,a=J(),o=`The click target is unavailable or ambiguous.`,s=null;if(typeof n==`string`&&n.length>0&&n.length<=512&&typeof r==`string`&&r.length>0&&r.length<=200&&Q(i)&&typeof i.pathname==`string`&&i.pathname===a.pathname&&i.search===a.search&&i.hash===a.hash)try{let e=document.querySelectorAll(n);e.length===1&&(s=e.item(0))}catch{o=`The click selector is invalid.`}else o=`The prototype route changed or the click input is invalid.`;if(s){let n=s;if(O(n,!0)||(Te(n)||q(n.textContent||``).slice(0,200))!==r)o=`The target is hidden, blocked, disabled, unsafe, or its accessible name changed.`;else{n.click(),X(e.origin,{type:`replica:canvas:click-result`,nonce:t.nonce,clicked:!0});return}}X(e.origin,{type:`replica:canvas:click-result`,nonce:t.nonce,clicked:!1,error:o});return}if(t.type===`replica:canvas:select`){t.mode===`element`?Pe(e.origin,t.nonce):t.mode===`area`&&Ie(e.origin,t.nonce);return}if(t.type===`replica:canvas:cancel-selection`){Z(),X(e.origin,{type:`replica:canvas:selection-cancelled`,nonce:t.nonce});return}if(t.type===`replica:canvas:clear-selection`){U?.remove(),U=null,W=null;return}if(t.type!==`replica:canvas:resolve`||!Array.isArray(t.anchors)||t.anchors.length>200)return;let n=[],r=t.anchors;for(let e of r)Q(e)&&typeof e.id==`number`&&Number.isSafeInteger(e.id)&&n.push({id:e.id,anchor:e.anchor});G={nonce:t.nonce,anchors:n},K.clear(),$()}var Be=Symbol.for(`replica.canvas.bridge.v1`),Ve=window;function He(e){if(!/^http:\/\/127\.0\.0\.1:\d+$/.test(e))throw Error(`Invalid Replica canvas parent.`);let t=Ve[Be];if(t===!0)throw Error(`Remove the old source bridge before using the extension-owned bridge.`);typeof t==`function`&&t(),ve=`light-dark(#0969da, #58a6ff)`,_e=e,G=null,ye=``,K.clear();let n=he(e),r=null;function i(){r!==null&&window.cancelAnimationFrame(r),r=null,U&&W&&(U.style.position=Le(W)?`fixed`:`absolute`,Y(U,W.getBoundingClientRect())),$()}function a(){r===null&&G&&(r=window.requestAnimationFrame(i))}function o(e){U&&W&&(e.target!==document&&e.target!==window||Le(W))&&Y(U,W.getBoundingClientRect()),r===null?$(e.target===document||e.target===window):i()}function s(){$()}function c(t){if(t.key!==`Escape`||t.defaultPrevented||t.isComposing||H||!G||t.target instanceof Element&&t.target.closest(`[role="dialog"], dialog, [role="menu"]`))return;let n=G;window.setTimeout(()=>{t.defaultPrevented||H||G!==n||X(e,{type:`replica:canvas:conversation-dismiss-requested`,nonce:n.nonce})},0)}window.addEventListener(`message`,ze),window.addEventListener(`scroll`,o,{capture:!0,passive:!0}),window.addEventListener(`resize`,s),window.addEventListener(`keydown`,c);let l=new MutationObserver(e=>{e.some(e=>!(e.target instanceof Element&&e.target.closest(`[${V}], [data-replica-controls-bridge]`)))&&a()});l.observe(document.documentElement,{attributes:!0,characterData:!0,childList:!0,subtree:!0});let u=typeof ResizeObserver==`function`?new ResizeObserver(a):null;u?.observe(document.documentElement),Ve[Be]=()=>{window.removeEventListener(`message`,ze),window.removeEventListener(`scroll`,o,!0),window.removeEventListener(`resize`,s),window.removeEventListener(`keydown`,c),l.disconnect(),u?.disconnect(),r!==null&&window.cancelAnimationFrame(r),G=null,ye=``,K.clear(),n(),Z(),U?.remove(),U=null,W=null}}export{He as installBridge};
\ No newline at end of file
diff --git a/.github/extensions/replica-prototype/assets/renderer.js b/.github/extensions/replica-prototype/assets/renderer.js
index cb4036f9..9a921878 100644
--- a/.github/extensions/replica-prototype/assets/renderer.js
+++ b/.github/extensions/replica-prototype/assets/renderer.js
@@ -1,7 +1,7 @@
-import{n as e,t}from"./renderer-rolldown-runtime.js";import{A as n,B as r,C as i,D as a,E as o,F as s,G as c,H as l,I as u,K as d,L as f,M as p,N as m,O as h,P as g,R as _,S as v,T as y,U as b,V as x,W as S,_ as C,a as w,b as T,c as E,d as D,f as O,g as k,h as A,i as j,j as M,k as ee,l as N,m as P,n as F,o as I,p as L,r as R,s as z,t as te,u as B,v as ne,w as re,x as ie,y as ae,z as oe}from"./renderer-vendor.js";var V=e(d(),1),se=S(),H=l(),U=b();function ce({size:e=`medium`,className:t,label:n}){return(0,U.jsx)(`span`,{role:n?`status`:void 0,"aria-label":n,"aria-hidden":!n||void 0,className:`hub-spinner hub-spinner--${e}${t?` ${t}`:``}`})}function le({className:e,...t}){return(0,U.jsx)(`span`,{...t,className:`hub-visually-hidden${e?` ${e}`:``}`})}function W(e){let t=(0,V.useId)(),{as:n,href:r,ref:i,icon:a,description:o,loading:s=!1,size:c=`medium`,variant:l=`default`,className:u,...d}=e,f=`hub-icon-button${c===`small`?` hub-icon-button--small`:``}${l===`invisible`?` hub-icon-button--invisible`:``}${l===`danger`?` hub-icon-button--danger`:``}${u?` ${u}`:``}`,p=l===`invisible`?`subtle`:`secondary`,m=!(!o||d.title||d[`aria-describedby`]||`disabled`in d&&d.disabled),h=[d[`aria-describedby`],o&&!m?t:void 0].filter(Boolean).join(` `)||void 0,g=d.title??(m?void 0:o??d[`aria-label`]),_=o&&!m?(0,U.jsx)(le,{id:t,children:o}):null,v=s?(0,U.jsx)(ce,{decorative:!0,size:`small`}):(0,U.jsx)(a,{size:16}),y=s?!0:d[`aria-busy`];if(n===`a`){let e=i,t=(0,U.jsx)(H.Button,{...d,ref:e,as:`a`,href:r,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,U.jsx)(H.Tooltip,{ref:i,text:o,type:`description`,children:t}):t}let b=(0,U.jsx)(H.Button,{...d,ref:i,type:d.type??`button`,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,U.jsx)(H.Tooltip,{ref:i,text:o,type:`description`,children:b}):b}function ue({title:e,closeLabel:t,onClose:n,returnFocusRef:r,descriptionId:i,className:a,children:o}){let s=(0,V.useRef)(null),c=(0,V.useId)();return(0,V.useLayoutEffect)(()=>{let e=s.current,t=r?.current??(document.activeElement instanceof HTMLElement?document.activeElement:null);return e?.showModal(),()=>{e?.close(),t?.focus()}},[r]),(0,U.jsxs)(`dialog`,{ref:s,"aria-labelledby":c,"aria-describedby":i,className:a?`canvas-dialog ${a}`:`canvas-dialog`,onCancel:e=>{e.preventDefault(),n()},onClick:e=>{if(e.target!==e.currentTarget)return;let{left:t,right:r,top:i,bottom:a}=e.currentTarget.getBoundingClientRect();(e.clientXr||e.clientYa)&&n()},children:[(0,U.jsxs)(`header`,{className:`canvas-dialog-header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,id:c,children:e}),(0,U.jsx)(W,{variant:`invisible`,size:`small`,icon:B,"aria-label":t,onClick:n})]}),o]})}var G={mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function de({onClose:e,state:t,titleButtonRef:r}){let[i,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(null),l=t.stats.branchError?void 0:t.stats.branch,d=t.sessionId,f=t.stats.comparison;async function p(e,t){try{await navigator.clipboard.writeText(e),o(t),c(null)}catch{o(null),c(t===`branch`?G.branch:G.sessionId)}}function m(e,t){if(!e)return null;let r=t===`branch`?G.copyBranch:G.copySessionId,a=t===`branch`?G.branchCopied:G.sessionIdCopied;return(0,U.jsx)(H.Button,{type:`button`,className:`canvas-icon-button`,variant:`subtle`,size:`small`,leadingVisual:i===t?(0,U.jsx)(u,{size:16}):(0,U.jsx)(n,{size:16}),"aria-label":i===t?a:r,title:i===t?a:r,onClick:()=>void p(e,t),children:(0,U.jsx)(`span`,{className:`visually-hidden`,children:r})})}return(0,U.jsxs)(ue,{title:G.buildDetails,closeLabel:G.closeBuildDetails,className:`build-details-dialog`,returnFocusRef:r,onClose:e,children:[(0,U.jsxs)(`dl`,{className:`build-details-list`,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:G.branch}),(0,U.jsxs)(`dd`,{children:[(0,U.jsx)(a,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`code`,{children:l||t.stats.branchError||G.unavailable}),m(l,`branch`)]})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:G.sessionId}),(0,U.jsxs)(`dd`,{children:[(0,U.jsx)(`code`,{children:d||G.unavailable}),m(d,`sessionId`)]})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:f?.branch?`Behind ${f.branch}${f.source===`local`?` (local)`:``}`:G.comparison}),(0,U.jsx)(`dd`,{children:f?.error||(f?.behind===0?G.upToDate:f?.behind==null?G.unavailable:G.commitsBehind(f.behind))})]})]}),(0,U.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:i===`branch`?`${G.branchCopied}.`:i===`sessionId`?`${G.sessionIdCopied}.`:``}),s?(0,U.jsx)(`span`,{role:`alert`,className:`build-details-copy-error`,children:G.buildDetailsCopyFailed(s)}):null]})}function fe({pairing:e}){let[t,r]=(0,V.useState)(`idle`),i=(0,V.useRef)(null);(0,V.useEffect)(()=>{i.current?.querySelector(`a`)?.focus()},[]);async function a(){try{await navigator.clipboard.writeText(e.verificationUrl),r(`copied`)}catch{r(`failed`)}}return(0,U.jsxs)(`section`,{className:`hub-connection-approval`,"aria-label":G.connectionApproval,children:[(0,U.jsxs)(`p`,{role:`status`,children:[G.connectionWaiting,` `,(0,U.jsx)(`strong`,{children:e.userCode}),`.`]}),(0,U.jsxs)(`div`,{ref:i,className:`hub-connection-approval-actions`,role:`group`,"aria-label":G.connectionApproval,children:[(0,U.jsx)(H.Button,{as:`a`,variant:`primary`,size:`medium`,href:e.verificationUrl,target:`_blank`,rel:`noopener noreferrer`,children:G.connectToHub}),(0,U.jsx)(W,{icon:t===`copied`?u:n,size:`medium`,className:`hub-connection-approval-copy`,"aria-label":t===`copied`?G.approvalLinkCopied:G.copyApprovalLink,onClick:()=>void a()})]}),(0,U.jsx)(le,{role:`status`,children:t===`copied`?G.approvalLinkCopied:``}),t===`failed`?(0,U.jsx)(`p`,{role:`alert`,children:G.approvalCopyFailed}):null]})}function pe({status:e,pairing:t,connecting:n,error:r,onConnect:i,onSelectHub:a,onResetHub:o,onClose:s,hubButtonRef:c}){let l=(0,V.useId)(),[u,d]=(0,V.useState)(null),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(!1),[g,_]=(0,V.useState)(!1),[v,y]=(0,V.useState)(!1),[b,x]=(0,V.useState)(``),S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=f||!e?.hubOrigin||u!==null&&!m,T=(0,V.useRef)(w),E=u??e?.hubOrigin??``,D=n||g||v,O=!!t||n;(0,V.useEffect)(()=>{w&&!O?S.current?.focus():T.current&&!O&&C.current?.focus(),T.current=w},[w,O]),(0,V.useEffect)(()=>{if(f||u===null||!m||!e?.hubOrigin)return;let t=window.setTimeout(()=>d(null),0);return()=>window.clearTimeout(t)},[u,f,m,e?.hubOrigin]);async function k(){if(!D){_(!0),x(``);try{await a(E),d(null),p(!1)}catch(e){x(e instanceof Error?e.message:String(e))}finally{_(!1)}}}async function A(){if(!D&&o){y(!0),x(``);try{d(await o()),p(!!e?.hubOrigin)}catch(e){x(e instanceof Error?e.message:String(e))}finally{y(!1)}}}return(0,U.jsxs)(ue,{title:G.connectToHub,closeLabel:G.closeConnectionDialog,onClose:s,returnFocusRef:c,children:[(0,U.jsx)(`p`,{children:G.connectionDescription}),b||r?(0,U.jsx)(`p`,{role:`alert`,children:b||r}):null,(0,U.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),!D&&(!O&&w&&(f||e?.hubOrigin)?k():(x(``),e?.hubOrigin||h(!0),i(e?.hubOrigin?void 0:E)))},children:[!O&&(w?(0,U.jsxs)(`div`,{className:`hub-connection-origin-field`,children:[(0,U.jsx)(`label`,{htmlFor:l,children:G.hubUrl}),(0,U.jsxs)(`div`,{className:`hub-connection-origin-input`,children:[(0,U.jsx)(H.TextInput,{ref:S,id:l,type:`url`,value:E,onChange:e=>{h(!1),d(e.target.value)},required:!0,fullWidth:!0,disabled:D,placeholder:`https://hub.example.com`}),o?(0,U.jsx)(W,{icon:L,variant:`invisible`,size:`small`,"aria-label":G.resetHubUrl,disabled:D,"aria-busy":v,onClick:()=>void A()}):null]}),f||e?.hubOrigin?(0,U.jsx)(H.Button,{type:`submit`,variant:`subtle`,size:`small`,disabled:D,children:G.saveHub}):null]}):(0,U.jsxs)(`div`,{className:`hub-connection-origin`,children:[(0,U.jsx)(`a`,{href:e?.hubOrigin&&new URL(e.hubOrigin).origin,target:`_blank`,rel:`noopener noreferrer`,children:e?.hubOrigin}),(0,U.jsx)(W,{ref:C,icon:ae,variant:`invisible`,size:`small`,"aria-label":G.editHubUrl,disabled:D,onClick:()=>{x(``),p(!0),d(e?.hubOrigin??``)}})]})),t?(0,U.jsx)(fe,{pairing:t},t.verificationUrl):null,t?null:(0,U.jsx)(H.Button,{type:`submit`,variant:`primary`,disabled:D||!e?.repository||!O&&w&&(f||!!e?.hubOrigin),children:n?G.connectionOpeningBrowser:G.connectToHub})]})]})}function me({title:e,description:t,children:n,action:r,variant:i,layout:a,onDismiss:o,dismissLabel:c,className:l,...u}){let d=i===`critical`?A:i===`success`?s:i===`info`?y:x;return(0,U.jsxs)(`div`,{...u,role:i===`critical`||i===`warning`?`alert`:`status`,className:`hub-alert hub-alert--${i}${a===`compact`?` hub-alert--compact`:``}${l?` ${l}`:``}`,children:[(0,U.jsx)(d,{className:`hub-alert__icon`,size:20,"aria-hidden":`true`}),(0,U.jsxs)(`div`,{className:`hub-alert__content`,children:[(0,U.jsxs)(H.Text,{as:`p`,size:`100`,className:`hub-alert__message`,children:[(0,U.jsx)(`strong`,{className:`hub-alert__title`,children:e}),t?(0,U.jsx)(`span`,{className:`hub-alert__description`,children:t}):null]}),n]}),r||o?(0,U.jsxs)(`div`,{className:`hub-alert__action`,children:[r,o&&c?(0,U.jsx)(W,{icon:B,"aria-label":c,title:c,variant:`invisible`,size:`small`,onClick:o}):null]}):null]})}var K={title:`Publish uncommitted changes?`,description:`Do you want to commit changes before publishing? Publishing the committed version only excludes your local uncommitted edits.`,checkFailedTitle:`Could not check local changes`,checkFailed:`Git could not check local changes.`,retryCheck:`Retry check`,commit:`Commit changes & publish`,committed:`Publish committed version only`,close:`Close publishing dialog`,changedFiles:`Uncommitted changes`,moreChanges:e=>`${e} more`,localSkills:e=>`${e} local agent skill ${e===1?`file stays`:`files stay`} uncommitted.`,selection:`Copilot commits only changes related to this prototype task and asks if it cannot tell which changes belong.`,remember:`Always commit changes before publishing for this prototype`,settings:`Settings`,alwaysCommit:`Always commit changes before publishing`,retrySettings:`Retry settings`,preferenceTargetChanged:`The checkout changed. Refresh Settings and try again.`,invalidPreference:`Publishing settings returned an invalid response. Retry settings.`};function he({busy:e,error:t,changes:n,checkError:r,remembered:i,returnFocusRef:a,onClose:o,onChoose:s,onRetry:c}){let[l,u]=(0,V.useState)(i),d=(0,V.useId)(),f=(0,V.useId)();return(0,U.jsx)(ue,{title:r?K.checkFailedTitle:K.title,closeLabel:K.close,descriptionId:r?void 0:d,returnFocusRef:a,onClose:()=>{e||o()},className:`publish-changes-dialog`,children:(0,U.jsxs)(H.Stack,{gap:`normal`,padding:`none`,children:[r?null:(0,U.jsx)(`p`,{id:d,children:K.description}),r?(0,U.jsx)(me,{title:r,variant:`critical`,layout:`compact`}):null,n?.files.total?(0,U.jsx)(`section`,{"aria-label":K.changedFiles,children:(0,U.jsxs)(`ul`,{className:`publish-changes-dialog__files`,children:[n.files.paths.map(e=>(0,U.jsx)(`li`,{children:(0,U.jsx)(`code`,{children:e})},e)),n.files.total>n.files.paths.length?(0,U.jsx)(`li`,{children:K.moreChanges(n.files.total-n.files.paths.length)}):null]})}):null,r?null:(0,U.jsxs)(`p`,{children:[n?.localSkills.total?`${K.localSkills(n.localSkills.total)} `:null,K.selection]}),r?null:(0,U.jsxs)(H.FormControl,{id:f,fullWidth:!0,children:[(0,U.jsx)(H.Checkbox,{checked:l,disabled:e,onChange:e=>u(e.target.checked)}),(0,U.jsx)(H.FormControl.Label,{children:K.remember})]}),t?(0,U.jsx)(me,{title:t,variant:`critical`,layout:`compact`}):null,(0,U.jsxs)(`footer`,{className:`publish-changes-dialog__actions`,children:[r?(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:c,children:K.retryCheck}):null,r?null:(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:()=>s(`commit-changes`,l),children:K.commit}),(0,U.jsx)(H.Button,{size:`small`,disabled:e,onClick:()=>s(`committed-only`,!1),children:K.committed})]})]})})}function ge({value:e,label:t,copyLabel:r,copiedLabel:i,copyErrorLabel:a,compact:o=!1}){let[s,c]=(0,V.useState)(null),l=s?.value===e?s.status:null,u=l===`copied`?i:r;async function d(){try{await navigator.clipboard.writeText(e),c({value:e,status:`copied`})}catch{c({value:e,status:`failed`})}}return(0,U.jsxs)(`div`,{className:`copyable-text-input${o?` copyable-text-input--compact`:``}`,children:[(0,U.jsxs)(`div`,{className:`copyable-text-input__control`,children:[o?(0,U.jsx)(`input`,{type:`text`,value:e,"aria-label":t,readOnly:!0,className:`copyable-text-input__input`}):(0,U.jsx)(H.TextInput,{value:e,"aria-label":t,readOnly:!0,fullWidth:!0,className:`copyable-text-input__input`}),(0,U.jsx)(W,{icon:n,"aria-label":u,description:o?u:void 0,title:o?void 0:u,variant:`invisible`,size:`small`,className:`copyable-text-input__button`,onClick:()=>void d()})]}),(0,U.jsx)(le,{"aria-live":`polite`,"aria-atomic":`true`,children:l===`copied`?i:``}),l===`failed`?(0,U.jsx)(`span`,{role:`alert`,className:`copyable-text-input__error`,children:a}):null]})}function _e({children:e}){return(0,U.jsx)(`div`,{className:`prototype-workspace__body`,children:e})}function ve({title:e,description:t,trailing:n,headingAs:r=`h2`,headingRef:i}){return(0,U.jsxs)(`header`,{className:`hub-content-page-header`,children:[(0,U.jsxs)(`div`,{className:`hub-content-page-header__top`,children:[(0,U.jsx)(H.Heading,{as:r,size:`4`,ref:i,tabIndex:i?-1:void 0,children:e}),n]}),t?(0,U.jsx)(H.Text,{as:`p`,className:`hub-content-page-header__description`,children:t}):null]})}function ye({labels:e,headingRef:t,headingTrailing:n,feedback:r,form:i,formUnavailable:a,links:o,hasLinks:s,showEmpty:c=!0,listRef:l,listBusy:u,beforeLinks:d,afterLinks:f}){return(0,U.jsxs)(H.Stack,{gap:`normal`,children:[(0,U.jsx)(ve,{title:e.heading,description:e.description,headingRef:t,trailing:n}),r,i||(a===void 0?(0,U.jsxs)(`section`,{className:`share-links__empty`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.noBuildHeading}),(0,U.jsx)(H.Text,{as:`p`,className:`share-links__empty-description`,children:e.noBuildLabel})]}):a),d,s?(0,U.jsx)(`ul`,{className:`share-links__list`,ref:l,"aria-busy":u,children:o}):c?(0,U.jsxs)(`section`,{className:`share-links__empty`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.emptyHeading}),(0,U.jsx)(H.Text,{as:`p`,className:`share-links__empty-description`,children:e.emptyLabel})]}):null,f]})}function be({shareLink:e,className:t,copiedLabel:n,copyErrorLabel:r,copyLabel:i,urlLabel:a,unavailableLabel:o,highlighted:s,children:c}){return(0,U.jsx)(`li`,{"data-share-id":e.id,className:`share-link-item${s?` share-link-item--created`:``}${t?` ${t}`:``}`,children:(0,U.jsxs)(`div`,{className:`share-link-item__layout`,children:[(0,U.jsxs)(`div`,{className:`share-link-item__details`,children:[(0,U.jsx)(`h3`,{children:e.label}),(0,U.jsxs)(`span`,{className:`share-link-item__metadata`,children:[e.buildLabel,e.createdLabel?(0,U.jsxs)(U.Fragment,{children:[` · `,(0,U.jsx)(`time`,{dateTime:e.createdAt,children:e.createdLabel})]}):null,` · `,e.expiresAt?(0,U.jsx)(`time`,{dateTime:e.expiresAt,children:e.expiresLabel}):e.expiresLabel]})]}),(0,U.jsxs)(`div`,{className:`share-link-item__actions`,children:[o?(0,U.jsx)(`p`,{children:o}):(0,U.jsx)(ge,{value:e.url,label:a||e.label,copyLabel:i,copiedLabel:n,copyErrorLabel:r}),c]})]})})}function xe({data:e,action:t,hiddenFields:n,details:r,afterFields:a,onSubmit:o,label:s,onLabelChange:c,expiration:l,onExpirationChange:u,disabled:d,fieldsDisabled:f,busy:p,error:m}){let h=(0,V.useId)(),g=(0,V.useId)();return(0,U.jsxs)(`div`,{className:`share-links-form`,children:[e.buildLabel?(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.buildLabel}):null,r,(0,U.jsxs)(`form`,{action:t,method:`post`,onSubmit:o,"aria-busy":p,className:`share-links__form`,children:[n,(0,U.jsxs)(`div`,{className:`share-links__form-row`,children:[(0,U.jsxs)(H.FormControl,{id:h,required:!0,fullWidth:!0,className:`share-links__field`,children:[(0,U.jsx)(H.FormControl.Label,{children:e.labelLabel}),(0,U.jsx)(H.TextInput,{"aria-label":e.labelLabel,"aria-invalid":!!m,name:`share_link[label]`,placeholder:e.labelPlaceholder,maxLength:e.labelMaximumBytes,value:s,onChange:c,disabled:f,fullWidth:!0}),m?(0,U.jsx)(H.FormControl.Validation,{validationStatus:`error`,className:`share-links__validation`,children:m}):null]}),m?(0,U.jsx)(le,{role:`alert`,children:m}):null,(0,U.jsxs)(H.FormControl,{id:g,fullWidth:!0,className:`share-links__field`,children:[(0,U.jsx)(H.FormControl.Label,{children:e.expirationLabel}),(0,U.jsx)(H.Select,{"aria-label":e.expirationLabel,name:`share_link[expiration]`,defaultValue:l===void 0?e.expirationOptions.find(e=>e.value===`seven_days`)?.value??e.expirationOptions[0]?.value:void 0,value:l,onChange:u,disabled:f,fullWidth:!0,children:e.expirationOptions.map(e=>(0,U.jsx)(H.Select.Option,{value:e.value,children:e.label},e.value))})]}),(0,U.jsx)(`div`,{className:`share-links__form-actions`,children:(0,U.jsx)(H.Button,{type:`submit`,variant:`primary`,leadingVisual:i,disabled:d,children:e.submitLabel})})]}),a?(0,U.jsx)(`div`,{className:`share-links__form-options`,children:a}):null]})]})}var q={title:`Share prototype`,internal:`Internal prototype link`,internalDescription:`Requires GitHub sign-in and repository access.`,internalUnavailable:`Internal prototype link unavailable.`,internalCopy:`Copy internal prototype link`,internalOpen:`Open internal prototype link`,public:`Public share links`,permissionUnknown:`Hub has not confirmed permission to manage public share links.`,group:`Publish and share`,back:`Back to preview`,warning:`Anyone with a link can view its Build without signing in. The prototype may expose sensitive or customer information. Check its content before sharing. Local and uncommitted changes are not included.`,target:`New links share this published Build:`,oldBuild:`This is the last published Build, not the current local preview.`,includeControlSettings:`Include current control settings`,controlSettingsDescription:`Adds settings for all configured pages to the links you copy or open. Saved share links stay unchanged.`,controlSettingsWarning:`Settings for controls that have not been published will not take effect for shared links.`,controlSettingsWarningTitle:`Local changes are not in the shared Build`,label:`Label`,labelPlaceholder:`Usability review`,labelInvalid:`Enter a label containing no more than 100 UTF-8 bytes.`,expiry:`Expires after`,expirations:[{value:`one_day`,label:`1 day`},{value:`seven_days`,label:`7 days`},{value:`thirty_days`,label:`30 days`},{value:`never`,label:`Never`}],create:`Create share link`,creating:`Working...`,active:`Active share links`,empty:`Create a link when someone needs signed-out access.`,emptyHeading:`No active share links`,loading:`Loading share links...`,refresh:`Refresh links`,authorize:`Verify with GitHub`,authorizationRetry:`Complete authorization in your browser, then refresh links and submit the action again. No action is replayed automatically.`,paginationFailed:`Hub returned a repeated share-link page. Refresh links to try again.`,noBuild:`A successful published Build is required before creating a share link.`,noBuildHeading:`No successful Build`,build:e=>`Build ${e}`,buildDetails:(e,t,n)=>`Commit: ${e}\nAuthor: @${t}\nPublished: ${n}`,denied:`Managing public share links requires repository admin access or authorship of any successful Build for this Prototype, with current read access. Write access alone is not sufficient.`,disabled:`Public sharing is disabled for this Hub. A Hub administrator must explicitly enable it. Previously revoked links never return.`,disconnected:`Connect to Hub before managing share links.`,connect:`Connect to Hub`,unavailable:`Hub is unavailable. Restore the connection and reopen Share prototype.`,branch:`Open a named prototype branch discovered by Hub before sharing.`,stale:`Hub or checkout changed. Return to preview and reopen Share prototype.`,deleted:`Share link deleted. Its public URL no longer works.`,never:`Never expires`,expires:e=>`Expires ${e}`,createdBy:(e,t)=>`Created by @${e} ${t}`,copy:(e,t)=>`Copy ${e}, Build #${t}`,copied:`Link copied`,copyError:`Could not copy the link. Select the URL and copy it manually.`,open:(e,t)=>`Open ${e}, Build #${t}`,delete:(e,t)=>`Delete ${e}, Build #${t}`,deletePrompt:e=>`Delete "${e}"? Anyone with this link will lose access to its Build.`,deletedError:`Could not delete the link.`,failed:`The sharing request failed.`,unknown:`The sharing request may have completed. Refresh active links before trying again. A matching label does not prove which request created a link.`,expired:`This link has expired. Refresh links.`};function Se({included:e,onChange:t,publishedVersionDiffers:n,disabled:r=!1,error:i,copy:a}){let o=(0,V.useId)(),s=e&&n;return(0,U.jsxs)(`div`,{className:`share-control-settings`,children:[(0,U.jsxs)(H.FormControl,{id:o,fullWidth:!0,children:[(0,U.jsx)(H.Checkbox,{checked:e,onChange:e=>t(e.target.checked),disabled:r}),(0,U.jsx)(H.FormControl.Label,{children:a?.label??q.includeControlSettings}),(0,U.jsx)(H.FormControl.Hint,{className:`share-control-settings__hint`,children:(0,U.jsx)(`span`,{className:`share-control-settings__description`,children:a?.description??q.controlSettingsDescription})})]}),i?(0,U.jsx)(me,{title:i,variant:`critical`,layout:`compact`}):null,s?(0,U.jsx)(me,{title:q.controlSettingsWarningTitle,description:q.controlSettingsWarning,variant:`warning`,layout:`compact`,className:`share-control-settings__warning`}):null]})}function Ce(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var we=`replica:controls:url`,Te=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function Ee(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!Ce(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!Te.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function De(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=Te.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!Ce({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{Ee(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function Oe(e,t){let n=new URL(e,window.location.href),r=De(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(Ee(r.scopes)))n.searchParams.set(e,t);return n.toString()}function ke({state:e,buildDetails:t,currentCommit:n,hasLocalChanges:r=!1,shareButtonRef:i,onClose:a,onConnect:o,onRefresh:s,onCreate:c,onDelete:l,onOpen:u,controlSettings:d,onAuthorize:f}){let[p,m]=(0,V.useState)(``),[h,g]=(0,V.useState)(`seven_days`),[_,y]=(0,V.useState)(``),[b,x]=(0,V.useState)(Date.now),S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=(0,V.useRef)(null),T=e.context?.prototype,E=q.expirations.filter(e=>!T?.shareLinkExpirationOptions||T.shareLinkExpirationOptions.includes(e.value)),D=E.some(e=>e.value===h)?h:E.find(e=>e.value===`seven_days`)?.value??E[0]?.value??``,k=T?.published?T.build:null,A=k?.url,j=A&&URL.canParse(A)?new URL(A):null,M=j&&j.origin===e.context?.hubOrigin&&[`http:`,`https:`].includes(j.protocol)&&!j.username&&!j.password?A:null,ee=!!(k&&n&&n!==k.commitSha)||r,N=T?.canManageShareLinks===!0,P=!e.sharingDisabled&&T?.publicSharingEnabled!==!1,F=e.busy||e.loading||e.stale||!N||!P,I=d?.included?d.query??``:``,L=!!d?.blocked;function R(e){return Oe(e,I)}let z=P&&e.stale&&!e.loading&&e.created&&!e.links.some(t=>t.id===e.created?.id)?e.created:null;(0,V.useEffect)(()=>{let e=i.current;C.current?.focus();let t=window.setInterval(()=>x(Date.now()),1e4);return()=>{window.clearInterval(t),e?.focus()}},[i]),(0,V.useEffect)(()=>{if(e.busy||!w.current)return;let t=w.current;w.current=null,(t.map(e=>S.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||C.current)?.focus()},[e.busy,e.links]);async function te(t,n){if(!window.confirm(q.deletePrompt(n)))return;let r=e.links.findIndex(e=>e.id===t),i=[...e.links.slice(r+1),...e.links.slice(0,r).reverse()].map(e=>e.id);await l(t)&&(w.current=i,(i.map(e=>S.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||C.current)?.focus())}function ne(e){return new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}return(0,U.jsx)(`main`,{className:`canvas-share-page`,"aria-label":q.title,children:(0,U.jsx)(_e,{children:(0,U.jsx)(ye,{labels:{heading:q.title,noBuildHeading:q.noBuildHeading,noBuildLabel:q.noBuild,emptyHeading:q.emptyHeading,emptyLabel:q.empty},headingRef:C,headingTrailing:(0,U.jsx)(`div`,{className:`canvas-share-close`,children:(0,U.jsx)(W,{icon:B,variant:`invisible`,"aria-label":q.back,description:q.back,onClick:a})}),feedback:(0,U.jsxs)(U.Fragment,{children:[d?(0,U.jsx)(Se,{included:d.included,onChange:d.onChange,publishedVersionDiffers:ee,disabled:e.busy||d.pending,error:d.error}):null,(0,U.jsxs)(`section`,{className:`canvas-share-internal`,"aria-label":q.internal,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:q.internal}),(0,U.jsx)(`p`,{children:q.internalDescription}),M&&!L?(0,U.jsxs)(`div`,{className:`share-link-item__actions canvas-share-internal-actions`,children:[(0,U.jsx)(ge,{value:R(M),label:q.internal,copyLabel:q.internalCopy,copiedLabel:q.copied,copyErrorLabel:q.copyError}),(0,U.jsx)(W,{as:`a`,href:R(M),target:`_blank`,rel:`noopener`,icon:v,"aria-label":q.internalOpen,description:q.internalOpen})]}):M?null:(0,U.jsx)(`p`,{role:`status`,children:q.internalUnavailable})]}),(0,U.jsxs)(`div`,{className:`canvas-share-public-header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:q.public}),(0,U.jsx)(`p`,{children:q.warning})]}),T&&!N?(0,U.jsx)(`p`,{role:`status`,children:T.canManageShareLinks===!1?q.denied:q.permissionUnknown}):null,P?null:(0,U.jsx)(`p`,{role:`status`,children:q.disabled}),e.error?(0,U.jsx)(me,{title:e.error,variant:`critical`,layout:`compact`}):null,e.authorization&&f?(0,U.jsx)(H.Button,{variant:`secondary`,size:`small`,onClick:f,disabled:e.busy,children:q.authorize}):null,o&&!e.context?(0,U.jsx)(H.Button,{variant:`secondary`,size:`small`,onClick:o,children:q.connect}):null]}),form:k&&N&&P?(0,U.jsx)(xe,{data:{buildLabel:null,labelLabel:q.label,labelPlaceholder:q.labelPlaceholder,labelMaximumBytes:100,expirationLabel:q.expiry,expirationOptions:E,submitLabel:e.busy?q.creating:q.create},label:p,onLabelChange:e=>{m(e.target.value),y(``)},expiration:D,onExpirationChange:e=>g(e.target.value),onSubmit:e=>{e.preventDefault(),!p.trim()||new TextEncoder().encode(p.trim()).length>100?y(q.labelInvalid):(y(``),c(p,D))},disabled:F,fieldsDisabled:e.busy,busy:e.busy,error:_,details:(0,U.jsxs)(`div`,{className:`canvas-share-build-details`,children:[(0,U.jsxs)(`p`,{children:[q.target,` `,(0,U.jsx)(`strong`,{children:q.build(k.number)}),` - `,(0,U.jsx)(`code`,{children:k.commitSha.slice(0,7)}),` - `,(0,U.jsx)(`time`,{dateTime:k.publishedAt,children:ne(k.publishedAt)})]}),ee?(0,U.jsx)(`p`,{children:q.oldBuild}):null]})}):null,formUnavailable:N&&P&&!k?void 0:null,beforeLinks:(0,U.jsxs)(U.Fragment,{children:[e.notice?(0,U.jsx)(`p`,{role:`status`,children:e.notice}):null,z&&!L?(0,U.jsx)(ge,{value:R(z.url),label:z.label,copyLabel:q.copy(z.label,z.buildNumber),copiedLabel:q.copied,copyErrorLabel:q.copyError}):null,e.loading?(0,U.jsx)(`p`,{role:`status`,children:q.loading}):null]}),hasLinks:N&&P&&!L&&e.links.length>0,showEmpty:N&&P&&!L&&!e.loading&&!e.stale,listRef:S,listBusy:e.loading,links:(!N||!P||L?[]:e.links).map(e=>{let n=e.expiresAt!==null&&Date.parse(e.expiresAt)<=b,r=t?.[e.buildNumber];return(0,U.jsxs)(be,{className:k&&e.buildNumberI?u(e.id,I):u(e.id)}),(0,U.jsx)(W,{icon:O,variant:`danger`,"aria-label":q.delete(e.label,e.buildNumber),description:q.delete(e.label,e.buildNumber),disabled:F||n,onClick:()=>void te(e.id,e.label)})]},e.id)}),afterLinks:(0,U.jsx)(`div`,{className:`canvas-share-list-actions`,children:N||!e.context&&!o?(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:s,disabled:e.busy||e.loading,children:q.refresh}):null})})})})}var J={checking:`Checking sharing readiness`,checkingDetail:`Checking Hub for a successful published Build and repository access.`,connect:`Connect before sharing`,connectDetail:`Connect to Hub before sharing this prototype.`,connectAction:`Connect to Hub`,publish:`Publish before sharing`,publishDetail:`To create a share link, publish this prototype to Hub first. Your local preview stays private.`,publishPermissionUnverified:`This Hub has not confirmed publishing permission. Copilot will check access when publishing and report any permission errors.`,preparing:`Preparing your prototype`,ready:`Ready to share`,readyDetail:`Your prototype is ready to share.`,manage:`Share prototype`,unavailable:`Sharing status unavailable`,unavailableDetail:`Hub could not verify sharing readiness. Retry before continuing.`,permissionUnknown:`This Hub cannot verify sharing or publishing permission. Update Hub and retry.`,restricted:`Sharing unavailable`,publishDenied:`Publishing requires repository write access. Ask a prototype author to publish a Build.`,local:`Local development prototypes cannot create public share links.`,changed:`Sharing target changed`,changedDetail:`The repository, branch, or Hub changed. Close this dialog and reopen Share for the intended prototype.`,boundary:`Internal review requires repository access. Public share links let anyone view a published Build, not your local preview.`,close:`Close sharing readiness`},Ae=`Branch not eligible for Hub registration`,Y={heading:`Branch publication`,checking:`Checking...`,retry:`Retry status`,retryPublish:`Retry publish`,requested:`Requested`,awaitingCopilot:`Waiting for Copilot`,publishBranch:`Publish`,publishChanges:`Publish changes`,registration:`Publishing`,registrationFailed:`Publication delayed`,published:`Published`,alreadyPublished:`Latest changes already published`,queued:`Build queued`,building:`Building`,awaitingHub:`Awaiting Hub`,awaitingBuild:`Awaiting build`,connect:`Connect to the hub`,workflowLink:`View workflow run`,initial:`Checking branch publication.`,checkingRemote:`Checking the exact branch on the origin repository.`,detached:`Open a named branch before publishing.`,changed:`The checkout changed. Refresh publication status.`,unknown:e=>`Remote branch status is unknown. ${e||`Check GitHub access and retry.`}`,pending:`Copilot received the publish request in chat and has not pushed this branch yet. Follow its progress in chat.`,checkingHub:`Checking the Hub connection.`,disconnected:`Connect to the hub before publishing this prototype.`,hubUnavailable:`Hub verification is unavailable. Restore access and retry.`,hubUnavailableTitle:`Hub verification unavailable`,staleHub:`The Hub status belongs to a different checkout. Refresh to continue.`,workflowMissing:`This checkout has no .github/workflows/replica.yml. Set up the repository's Replica build workflow before publishing.`,dispatchFailed:`Copilot could not receive the publish request.`,absent:`This branch won't appear in the hub until you publish.`,needsPush:`The remote branch points to a different commit. Publish pushes this branch without force.`,localChanges:`Local changes are not in the published prototype. Choose how to publish them.`,needsRegistration:`Hub imported this commit. The canvas is publishing it automatically.`,registrationDenied:`Hub could not register this branch. Check repository access and branch eligibility.`,registrationErrorTitle:`Hub registration failed`,registrationReasons:new Map([[`write_access_required`,{title:Ae,description:`You lack write access to this repository.`}],[`branch_not_reviewable`,{title:Ae,description:`Default, reserved, and internal branches cannot be registered in Hub.`}],[`remote_branch_missing`,{title:Ae,description:`The branch no longer exists on the remote repository.`}],[`branch_authorship_required`,{title:Ae,description:`You have not authored a commit unique to this branch.`}],[`repository_mismatch`,{title:Ae,description:`The branch belongs to a different repository.`}],[`already_registered`,{title:`Branch already registered in Hub`,description:`This branch is already registered in Hub. Refresh its status.`}],[`successful_build_required`,{title:`Hub registration delayed`,description:`Hub has not imported this checkout's successful Build yet.`}]]),ready:`Hub imported this commit and the prototype is registered.`,importFailed:`Hub could not import or build this commit. Pushing this unchanged commit does not rerun the failed work. Inspect the Build failure in Hub and repair the cause before publishing again.`,workflowUnavailable:`Workflow status is unavailable. Check GitHub access and retry.`,staleWorkflow:`Workflow status belongs to a different branch or commit.`,workflowQueued:`The Replica workflow for this commit is queued or waiting.`,workflowBuilding:`The Replica workflow is building this commit.`,workflowFailed:e=>`The Replica workflow finished with ${e||`an unsuccessful result`}. Pushing this unchanged commit does not rerun the failed work. Inspect the run and repair the cause before publishing again.`,importing:`The workflow succeeded. Waiting for Hub discovery and artifact import; this is not published yet.`,noBuild:`The exact branch and commit are on GitHub, but no matching Replica workflow run has appeared yet.`};function je({publication:e,busy:t,onPublish:n,onRetry:r}){if(e.kind===`ready`)return null;let i=e.kind===`requested`,a=t||i;return(0,U.jsxs)(`section`,{className:`canvas-branch-publication`,"aria-label":Y.heading,children:[e.error?(0,U.jsx)(me,{variant:`critical`,layout:`compact`,title:e.error.title,description:e.error.description}):(0,U.jsx)(`p`,{role:`status`,children:e.detail}),e.runUrl?(0,U.jsx)(`p`,{children:(0,U.jsx)(H.InlineLink,{className:`canvas-branch-publication__workflow-link`,href:e.runUrl,target:`_blank`,rel:`noopener noreferrer`,children:Y.workflowLink})}):null,(e.action!==`none`||i)&&e.kind!==`disconnected`?(0,U.jsx)(`div`,{className:`canvas-branch-publication__actions`,children:(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:a,"aria-busy":a,leadingVisual:a?(0,U.jsx)(L,{size:16}):void 0,onClick:e.action===`retry`?r:n,children:e.label})}):null]})}function X({readiness:e,busy:t,shareButtonRef:n,onClose:r,onConnect:i,onPublish:a,onRetry:o,onManage:s}){let c=(0,V.useId)();return(0,U.jsxs)(ue,{title:e.title,closeLabel:J.close,onClose:r,returnFocusRef:n,descriptionId:c,children:[(0,U.jsx)(`p`,{id:c,role:`status`,children:e.detail}),[`connect`,`publish`,`ready`].includes(e.kind)?(0,U.jsx)(`p`,{children:J.boundary}):null,e.publication?(0,U.jsx)(je,{publication:e.publication,dirty:!1,busy:t,onPublish:a,onRetry:o}):null,[`connect`,`ready`,`retry`].includes(e.kind)?(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:t,"aria-busy":t,onClick:e.kind===`connect`?i:e.kind===`ready`?s:o,children:e.kind===`connect`?J.connectAction:e.kind===`ready`?J.manage:Y.retry}):null]})}function Me({hub:e,connection:t,publication:n,sharing:r,shareIntent:i,controlSettings:a,readiness:o,state:s,hubOpen:c,buildDetailsOpen:l,onCloseBuildDetails:u,shareButtonRef:d,hubButtonRef:f,connectionButtonRef:p,publishButtonRef:m,titleButtonRef:h}){let{intent:g,targetChanged:_}=i,v=n.presentedState;return(0,U.jsxs)(U.Fragment,{children:[t.open&&(!g||g.connecting&&!_)?(0,U.jsx)(pe,{status:e.status,pairing:t.pairing,connecting:t.connecting,error:t.error,onConnect:t.connect,onSelectHub:e.select,onResetHub:e.reset,onClose:()=>{t.close(),i.setConnecting(!1)},hubButtonRef:g?d:c?p:f}):null,g&&!n.publishDialog&&(_||!g.connecting||!t.open)?(0,U.jsx)(X,{readiness:_?{kind:`restricted`,title:J.changed,detail:J.changedDetail}:o,busy:n.busy,shareButtonRef:d,onClose:()=>{i.close(),t.close()},onConnect:()=>{_||o.kind!==`connect`||(i.setConnecting(!0),t.showAndConnect())},onPublish:()=>{!_&&o.kind===`publish`&&n.publish()},onRetry:()=>void n.retry(),onManage:()=>{_||o.kind!==`ready`||(i.close(),r.open())}}):null,n.publishDialog?(0,U.jsx)(he,{busy:n.busy,error:n.publishDialogError,changes:n.publishDialog.preparation.changes,checkError:n.publishDialog.preparation.workingTree===`unavailable`?n.publishDialog.preparation.workingTreeError||K.checkFailed:void 0,remembered:n.publishDialog.preparation.remember,returnFocusRef:g?d:m,onClose:n.closePublishDialog,onChoose:(e,t)=>void n.choosePublish(e,t),onRetry:()=>void n.retryPublishCheck()},n.publishDialog.preparation.workingTree===`unavailable`?`unchecked`:`checked`):null,r.state.open?(0,U.jsx)(ke,{state:r.state,currentCommit:s?.stats.commitSha,hasLocalChanges:s?.stats.workingTree===`changed`,shareButtonRef:d,onClose:r.close,onConnect:!e.status||[`disconnected`,`pairing`,`unconfigured`].includes(e.status.state)?()=>{r.close(),t.show()}:void 0,onRefresh:()=>void r.refresh(),onCreate:r.create,onDelete:r.remove,onOpen:(e,t)=>void r.openLink(e,t),controlSettings:a,onAuthorize:()=>void r.authorize()}):null,l&&v?(0,U.jsx)(de,{state:v,titleButtonRef:h,onClose:u}):null]})}function Ne({address:e,addressRef:t,canGoBack:n,canGoForward:i,appearance:a,onAppearanceChange:o,onBack:s,onForward:c,onNavigate:l,onOpenTab:u,onReload:d}){let[f,p]=(0,V.useState)(null),m=f?.address===e?f.value:e,h=f?.address===e?f.error:``;function g(t){t.preventDefault();try{let t=new URL(m.trim(),e);if(![`http:`,`https:`].includes(t.protocol)||t.origin!==new URL(e).origin||t.username||t.password){p({address:e,value:m,error:G.browserAddressOrigin});return}p(null),l(t.href)}catch{p({address:e,value:m,error:G.browserAddressInvalid})}}return(0,U.jsx)(H.ThemeProvider,{colorMode:`auto`,className:`canvas-browser-theme`,children:(0,U.jsxs)(`nav`,{className:`canvas-browser-bar`,"aria-label":G.browserNavigation,children:[(0,U.jsxs)(`div`,{className:`canvas-browser-bar__navigation`,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserBack,disabled:!n,onClick:s,children:(0,U.jsx)(r,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserForward,disabled:!i,onClick:c,children:(0,U.jsx)(oe,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserReload,onClick:d,children:(0,U.jsx)(L,{size:16})})]}),(0,U.jsxs)(`form`,{className:`canvas-browser-bar__address`,onSubmit:g,children:[(0,U.jsx)(`input`,{ref:t,"aria-label":G.browserAddress,"aria-invalid":!!h,"aria-describedby":h?`canvas-browser-address-error`:void 0,spellCheck:!1,value:m,onChange:t=>{p({address:e,value:t.target.value,error:``})},onFocus:e=>e.currentTarget.select(),onKeyDown:e=>{e.key===`Escape`&&(p(null),e.currentTarget.blur())}}),h?(0,U.jsx)(`span`,{id:`canvas-browser-address-error`,className:`canvas-browser-bar__error`,role:`alert`,children:h}):null]}),(0,U.jsxs)(`div`,{className:`canvas-browser-bar__tools`,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserOpenTab,title:G.browserOpenTab,onClick:()=>{u().catch(t=>{p({address:e,value:m,error:t instanceof Error?t.message:String(t)})})},children:(0,U.jsx)(v,{size:16})}),(0,U.jsxs)(`div`,{className:`canvas-browser-bar__appearance`,role:`group`,"aria-label":G.browserAppearance,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserLight,"aria-pressed":a===`light`,onClick:()=>o(`light`),children:(0,U.jsx)(P,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserDark,"aria-pressed":a===`dark`,onClick:()=>o(`dark`),children:(0,U.jsx)(ie,{size:16})})]})]})]})})}var Pe=e(t((e=>{var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),n=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),i=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=r();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t}));e.validateShape=N;var a={type:`object`,additionalProperties:!1,required:[`version`,`scope`,`controls`],properties:{$schema:{type:`string`},version:{const:1},scope:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},role:{enum:[`shared`,`page`]},container:{$ref:`#/$defs/selector`},panel:{type:`object`,additionalProperties:!1,required:[`width`],properties:{width:{type:`integer`,minimum:160,maximum:4096}}},groups:{type:`array`,maxItems:100,items:{type:`object`,additionalProperties:!1,required:[`id`,`label`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},when:{$ref:`#/$defs/condition`}}}},controls:{type:`array`,maxItems:500,items:{oneOf:[{$ref:`#/$defs/boolean`},{$ref:`#/$defs/number`},{$ref:`#/$defs/slider`},{$ref:`#/$defs/choice`},{$ref:`#/$defs/checkboxGroup`},{$ref:`#/$defs/text`},{$ref:`#/$defs/color`},{$ref:`#/$defs/button`}]}}}},o=Object.prototype.hasOwnProperty,s=n().default,c=RegExp(`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`,`u`),l={type:[`string`,`number`,`boolean`]},u=i().default,d={validate:f};function f(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0,s=o,p=!1,m=null,h=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.equals===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`equals`},message:`must have required property 'equals'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`equals`){let e={instancePath:t,schemaPath:`#/oneOf/0/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.equals!==void 0){let n=e.equals;if(typeof n!=`string`&&!(typeof n==`number`&&isFinite(n))&&typeof n!=`boolean`){let e={instancePath:t+`/equals`,schemaPath:`#/$defs/scalar/type`,keyword:`type`,params:{type:l.type},message:`must be string,number,boolean`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=h===o;g&&(p=!0,m=0);let _=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.in===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`in`},message:`must have required property 'in'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`in`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.in!==void 0){let n=e.in;if(Array.isArray(n)){if(n.length>20){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/maxItems`,keyword:`maxItems`,params:{limit:20},message:`must NOT have more than 20 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r1){outer0:for(;r--;)for(i=r;i--;)if(u(n[r],n[i])){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[e]:a.push(e),o++;break outer0}}}else{let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=_===o;if(g&&p)p=!1,m=[m,1];else{g&&(p=!0,m=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.includes===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`includes`},message:`must have required property 'includes'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`includes`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.includes!==void 0&&typeof e.includes!=`string`){let e={instancePath:t+`/includes`,schemaPath:`#/oneOf/2/properties/includes/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=n===o;if(g&&p)p=!1,m=[m,2];else{g&&(p=!0,m=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.all===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`all`},message:`must have required property 'all'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`all`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.all!==void 0){let n=e.all;if(Array.isArray(n)){if(n.length>10){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r10){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=d===o;f&&(l=!0,u=0);let v=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.selector===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`selector`},message:`must have required property 'selector'`};a===null?a=[e]:a.push(e),o++}if(e.property===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`property`},message:`must have required property 'property'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`selector`&&n!==`property`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`style`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/1/properties/type/const`,keyword:`const`,params:{allowedValue:`style`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.selector!==void 0){let n=e.selector;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.property!==void 0){let n=e.property;if(typeof n==`string`){if(s(n)>100){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/maxLength`,keyword:`maxLength`,params:{limit:100},message:`must NOT have more than 100 characters`};a===null?a=[e]:a.push(e),o++}if(!m.test(n)){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/pattern`,keyword:`pattern`,params:{pattern:`^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$`},message:`must match pattern "^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=v===o;if(f&&l)l=!1,u=[u,1];else{f&&(l=!0,u=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.key===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`key`},message:`must have required property 'key'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`key`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`query`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/2/properties/type/const`,keyword:`const`,params:{allowedValue:`query`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.key!==void 0){let n=e.key;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/2/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[2].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,2];else{f&&(l=!0,u=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`hash`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/3/properties/type/const`,keyword:`const`,params:{allowedValue:`hash`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/3/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[3].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/3/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,3];else{f&&(l=!0,u=3);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.object===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`object`},message:`must have required property 'object'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`object`&&n!==`read`&&n!==`write`&&n!==`action`&&n!==`subscribe`&&n!==`pollMs`){let e={instancePath:t,schemaPath:`#/oneOf/4/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`api`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/4/properties/type/const`,keyword:`const`,params:{allowedValue:`api`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.object!==void 0){let n=e.object;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(!h.test(n)){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$`},message:`must match pattern "^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.read!==void 0){let n=e.read;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.write!==void 0){let n=e.write;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.action!==void 0){let n=e.action;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.subscribe!==void 0){let n=e.subscribe;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.pollMs!==void 0){let n=e.pollMs;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),o++}if(typeof n==`number`&&isFinite(n)){if(n>6e4||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:6e4},message:`must be <= 60000`};a===null?a=[e]:a.push(e),o++}if(n<100||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:100},message:`must be >= 100`};a===null?a=[e]:a.push(e),o++}}}}else{let e={instancePath:t,schemaPath:`#/oneOf/4/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;f&&l?(l=!1,u=[u,4]):f&&(l=!0,u=4)}}}if(l)o=c,a!==null&&(c?a.length=c:a=null);else{let e={instancePath:t,schemaPath:`#/oneOf`,keyword:`oneOf`,params:{passingSchemas:u},message:`must match exactly one schema in oneOf`};a===null?a=[e]:a.push(e),o++}return _.errors=a,o===0}function v(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return v.errors=a,o===0}var y={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`number`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function b(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return b.errors=a,l===0}var x={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`slider`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function S(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return S.errors=a,l===0}var C={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`options`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`select`,`radio`,`segmented`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},options:{$ref:`#/$defs/options`},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function w(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return w.errors=a,o===0}function T(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return T.errors=a,o===0}var E={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`text`,`textarea`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},minLength:{type:`integer`,minimum:0},maxLength:{type:`integer`,minimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function D(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return D.errors=a,l===0}var O=RegExp(`^#[0-9a-fA-F]{6}$`,`u`);function k(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return k.errors=a,o===0}function A(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return A.errors=a,o===0}function j(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let l=null,u=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.version===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`version`},message:`must have required property 'version'`};l===null?l=[e]:l.push(e),u++}if(e.scope===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`scope`},message:`must have required property 'scope'`};l===null?l=[e]:l.push(e),u++}if(e.controls===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`controls`},message:`must have required property 'controls'`};l===null?l=[e]:l.push(e),u++}for(let n in e)if(!o.call(a.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};l===null?l=[e]:l.push(e),u++}if(e.$schema!==void 0&&typeof e.$schema!=`string`){let e={instancePath:t+`/$schema`,schemaPath:`#/properties/%24schema/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}if(e.version!==void 0&&e.version!==1){let e={instancePath:t+`/version`,schemaPath:`#/properties/version/const`,keyword:`const`,params:{allowedValue:1},message:`must be equal to constant`};l===null?l=[e]:l.push(e),u++}if(e.scope!==void 0){let n=e.scope;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return I.errors=a,o===0}e.number=L;function L(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return L.errors=a,l===0}e.slider=R;function R(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return R.errors=a,l===0}e.choice=z;function z(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return z.errors=a,o===0}e.checkboxGroup=te;function te(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return te.errors=a,o===0}e.text=B;function B(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return B.errors=a,l===0}e.color=ne;function ne(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ne.errors=a,o===0}e.button=re;function re(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return re.errors=a,o===0}}))(),1),{validateDocumentShape:Fe,validateDeclaration:Ie}=Pe.default,Le={boolean:`boolean`,number:`number`,slider:`slider`,select:`choice`,radio:`choice`,segmented:`choice`,checkboxGroup:`checkboxGroup`,text:`text`,textarea:`text`,color:`color`,button:`button`};function Re(e){let t=[...Ie.errors].filter(e=>!/^\/controls\/\d+(?:\/|$)/.test(e.instancePath)).map(e=>({...e}));return Array.isArray(e?.controls)&&e.controls.forEach((e,n)=>{let r=Object.hasOwn(Le,e?.type)?Le[e.type]:void 0,i=r&&Pe.default[r];i?i(e)||t.push(...i.errors.map(e=>({...e,instancePath:`/controls/${n}${e.instancePath}`}))):t.push({instancePath:`/controls/${n}/type`,message:`must name a supported control type`})}),t.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params}))}var ze=class extends Error{constructor(e){super(`Invalid controls.replica.json:\n${e.map(e=>` ${e.path||`/`}: ${e.message}`).join(`
-`)}`),this.name=`ControlsValidationError`,this.issues=e}};function Be(e,t){switch(e.type){case`boolean`:return typeof t==`boolean`?null:`must be a boolean`;case`number`:case`slider`:{if(typeof t!=`number`||!Number.isFinite(t))return`must be a finite number`;if(e.min!==void 0&&t= min`;if(e.max!==void 0&&t>e.max)return`must be <= max`;let n=(t-e.min)/(e.step??1);return!Number.isFinite(n)||Math.abs(n-Math.round(n))>1e-8?`must align with step (anchored at min)`:null}case`select`:case`radio`:case`segmented`:return e.options.includes(t)?null:`must be a declared option`;case`checkboxGroup`:return Array.isArray(t)&&new Set(t).size===t.length&&t.every(t=>e.options.includes(t))?null:`must be unique declared options`;case`text`:case`textarea`:return typeof t==`string`?e.minLength!==void 0&&[...t].lengthe.maxLength?`longer than maxLength`:null:`must be a string`;case`color`:return typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?null:`must be a six-digit hex color`;default:return`button controls have no value`}}function Ve(e){return e?e.control?[e.control]:(e.all??e.any).flatMap(Ve):[]}function He(e){let t=new Map((e.groups??[]).map(e=>[e.id,e])),n=new Map(e.controls.map(e=>[e.id,e])),r=new Set,i=new Set,a=[];function o(e){if(r.has(e))return;if(i.has(e))throw new ze([{path:`/controls/${e}/when`,message:`conditional dependency cycle (including groups)`}]);i.add(e);let s=n.get(e);for(let e of[...Ve(s.when),...Ve(t.get(s.group)?.when)])o(e);i.delete(e),r.add(e),a.push(e)}for(let e of n.keys())o(e);return a}function Ue(e){let t=new Set;function n(e,r=0){if(r>24)throw new ze([{path:`/`,message:`document nesting exceeds 24`}]);if(typeof e==`number`&&!Number.isFinite(e))throw new ze([{path:`/`,message:`numbers must be finite`}]);if(![`string`,`number`,`boolean`,`object`].includes(typeof e))throw new ze([{path:`/`,message:`must contain only JSON values`}]);if(e&&typeof e==`object`){if(!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new ze([{path:`/`,message:`must contain only JSON objects`}]);if(t.has(e))throw new ze([{path:`/`,message:`must be an acyclic JSON document`}]);t.add(e);for(let t of Object.values(e))n(t,r+1);t.delete(e)}}n(e)}function We(e){if(Ue(e),!Ie(e))throw new ze(Re(e));let t=[];function n(e,n){t.push({path:e,message:n})}let r=new Set,i=new Map((e.groups??[]).map(e=>[e.id,e])),a=new Map(e.controls.map(e=>[e.id,e]));for(let[t,i]of[[`groups`,e.groups??[]],[`controls`,e.controls]])i.forEach((e,i)=>{r.has(e.id)&&n(`/${t}/${i}/id`,`duplicate ID ${e.id}`),r.add(e.id)});function o(e,t,r=0){if(!e)return;if(r>4){n(t,`conditions support at most five levels`);return}if(e.all||e.any){let n=e.all?`all`:`any`;e[n].forEach((e,i)=>o(e,`${t}/${n}/${i}`,r+1));return}let i=a.get(e.control);if(!i||i.type===`button`)n(t,`condition must reference a value control`);else if(`includes`in e)(i.type!==`checkboxGroup`||!i.options.includes(e.includes))&&n(t,`includes requires a declared checkboxGroup option`);else if(i.type===`checkboxGroup`)n(t,`checkboxGroup conditions must use includes`);else for(let r of`in`in e?e.in:[e.equals]){let e=Be(i,r);e&&n(t,`invalid condition for ${i.id}: ${e}`)}}if(e.controls.forEach((e,t)=>{let r=`/controls/${t}`;if(e.group&&!i.has(e.group)&&n(`${r}/group`,`unknown group`),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&n(r,`min must not exceed max`),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&n(r,`minLength must not exceed maxLength`),e.type===`segmented`&&e.options.length>3&&n(`${r}/options`,`segmented supports at most three options`),e.type!==`button`){let t=Be(e,e.default);t&&n(`${r}/default`,t)}o(e.when,`${r}/when`)}),(e.groups??[]).forEach((e,t)=>o(e.when,`/groups/${t}/when`)),t.length)throw new ze(t);return He(e),e}function Ge(e,t){let[n,r]=(0,V.useState)(e),[i,a]=(0,V.useState)(null),o=(0,V.useRef)(e),s=(0,V.useRef)(e),c=(0,V.useRef)(0),l=(0,V.useRef)(!1);(0,V.useLayoutEffect)(()=>{s.current=e,l.current||(o.current=e,r(e))},[e]),(0,V.useLayoutEffect)(()=>()=>{c.current++},[]);function u(e){c.current++,l.current=!0,o.current=e,r(e),a(null)}function d(){c.current++,l.current=!1,o.current=s.current,r(s.current),a(null)}function f(e,n=e){u(e);let i=c.current;Promise.resolve().then(()=>t(n)).then(e=>{c.current===i&&(l.current=!1,o.current=e&&`value`in e?e.value:s.current,r(o.current))}).catch(()=>{c.current===i&&(d(),a(G.controlsValueNotApplied))})}return{draft:n,error:i,current:()=>o.current,stage:u,commit:f,reset:d}}function Ke(e){let t=e.step??1,n=Math.max(...[e.min,e.max,t].map(e=>{let[t=``,n=`0`]=String(e).split(`e`);return Math.max(0,(t.split(`.`)[1]?.length??0)-Number(n))})),r=Math.max(...[e.min,e.max].map(e=>n<=100?e.toFixed(n).length:String(e).length),String(e.default).length,String(t).length);return e.type===`slider`?`calc(${r}ch + var(--hub-space-8) * 2)`:`calc(${r}ch + var(--hub-space-8) * 2 + 1.25rem)`}function qe({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=Ge(n,a),[s,c]=(0,V.useState)(null);function l(e){let n=e.target.value,r=t.type===`number`||t.type===`slider`?n===``?NaN:Number(n):n,i=Be(t,r);c(i),i?o.stage(n):o.commit(n,r)}let u=s||o.error,d=t.type===`number`||t.type===`slider`,f=t.type===`slider`?{"--controls-slider-progress":`${t.min===t.max?100:(Number(n)-t.min)/(t.max-t.min)*100}%`}:void 0,p=[i?`${e}-hint`:void 0,u?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0,m={id:e,disabled:r,value:String(o.draft),onChange:l,"aria-invalid":u?!0:void 0,"aria-describedby":p,onBlur:()=>{s&&(o.reset(),c(null))}},h;return h=t.type===`textarea`?(0,U.jsx)(H.Textarea,{...m,rows:2,resize:`vertical`}):d?(0,U.jsx)(H.TextInput,{...m,className:t.type===`slider`?`controls-number-input controls-number-input--slider`:`controls-number-input`,type:`number`,min:t.min,max:t.max,step:t.step??1,validationStatus:u?`error`:void 0,"aria-labelledby":`${e}-label`,style:{width:Ke(t)}}):t.type===`color`?(0,U.jsx)(`input`,{...m,className:`controls-native-color`,type:`color`}):(0,U.jsx)(H.TextInput,{...m,type:`text`}),(0,U.jsxs)(H.FormControl,{id:e,className:d?`controls-field controls-field--${t.type}`:`controls-field`,fullWidth:!d||t.type===`slider`,validationStatus:u?`error`:void 0,children:[d?(0,U.jsxs)(`div`,{className:`controls-field-heading`,children:[(0,U.jsx)(H.FormControl.Label,{id:`${e}-label`,htmlFor:e,className:`controls-field-label`,children:t.label}),t.type===`slider`?(0,U.jsxs)(`div`,{className:`controls-slider-row`,children:[(0,U.jsx)(`input`,{...m,id:`${e}-slider`,value:String(n),className:`controls-native-slider`,type:`range`,style:f,min:t.min,max:t.max,step:t.step??1,"aria-labelledby":`${e}-label`}),h]}):h]}):(0,U.jsx)(H.FormControl.Label,{className:`controls-field-label`,children:t.label}),d?null:h,i?(0,U.jsx)(H.FormControl.Hint,{children:(0,U.jsx)(`span`,{role:`status`,children:i})}):null,u?(0,U.jsx)(H.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:u}):null]})}function Je({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=Ge(n,a),s=[i?`${e}-unavailable`:void 0,o.error?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0;if(t.type===`boolean`||t.type===`select`)return(0,U.jsxs)(H.FormControl,{id:e,className:t.type===`boolean`?`controls-field controls-choice-row`:`controls-field controls-field--select`,fullWidth:t.type===`boolean`,validationStatus:o.error?`error`:void 0,children:[t.type===`select`?(0,U.jsx)(H.FormControl.Label,{className:`controls-field-label`,children:t.label}):null,t.type===`boolean`?(0,U.jsx)(H.Checkbox,{className:`controls-choice-mark`,disabled:r,"aria-describedby":s,checked:o.draft===!0,onChange:e=>o.commit(e.target.checked)}):(0,U.jsx)(H.Select,{className:`controls-select-input`,disabled:r,"aria-describedby":s,value:o.draft,onChange:e=>o.commit(e.target.value),children:t.options.map(e=>(0,U.jsx)(H.Select.Option,{value:e,children:e},e))}),t.type===`boolean`?(0,U.jsx)(H.FormControl.Label,{className:`controls-choice-label`,children:t.label}):null,i?(0,U.jsx)(H.FormControl.Hint,{children:(0,U.jsx)(`span`,{role:`status`,children:i})}):null,o.error?(0,U.jsx)(H.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:o.error}):null]});let c=t.type===`checkboxGroup`,l=t.type===`segmented`,u=c?H.CheckboxGroup:H.RadioGroup,d=c?H.Checkbox:H.Radio;return(0,U.jsxs)(u,{id:e,className:`controls-field`,"aria-disabled":r||void 0,"aria-describedby":s,children:[(0,U.jsx)(u.Label,{className:`controls-choice-group-label`,children:t.label}),(0,U.jsx)(`div`,{className:l?`controls-segments`:`controls-options`,children:t.options.map((t,n)=>{let i=`${e}-${n}`,a=c?o.draft.includes(t):o.draft===t,u=(0,U.jsx)(d,{className:c?`controls-choice-mark`:`controls-choice-mark controls-choice-mark--radio`,id:i,name:e,value:t,checked:a,disabled:r,"aria-describedby":s,onChange:e=>{let n=o.current();o.commit(c?e.target.checked?[...n,t]:n.filter(e=>e!==t):t)}});return l?(0,U.jsxs)(`label`,{htmlFor:i,className:`controls-segment`,title:t,children:[(0,U.jsx)(le,{children:u}),(0,U.jsx)(H.Text,{as:`span`,size:`100`,weight:`medium`,children:t})]},t):(0,U.jsxs)(H.FormControl,{id:i,className:`controls-field controls-choice-row`,children:[u,(0,U.jsx)(H.FormControl.Label,{className:`controls-choice-label`,children:t})]},t)})}),i?(0,U.jsx)(H.Text,{as:`span`,id:`${e}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:i}):null,o.error?(0,U.jsx)(u.Validation,{variant:`error`,role:`status`,children:o.error}):null]})}function Ye(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?G.controlsActionUnavailable:``)}}function Xe({scopes:e,disabled:t=!1,onCommand:n,collapsedGroups:r,onGroupCollapse:i}){let a=(0,V.useId)(),o=(0,V.useRef)(null),s=(0,V.useRef)(null),[c,l]=(0,V.useState)({});(0,V.useLayoutEffect)(()=>{s.current&&!s.current.isConnected&&(document.activeElement===document.body&&o.current?.focus(),s.current=null)},[e]);function u(e,r){if(!e.snapshot.visible[r.id])return null;let i=`${a}-${e.declaration.scope}-${r.id}`,o=e.snapshot.values[r.id];function s(t){return n(`update`,e.declaration.scope,r.id,t)}let c=e.snapshot.bindings?.[r.id],l=Ye(e,r),u={id:i,message:l.error?l.available?G.controlsNotApplied(r.label):G.controlsUnavailable(r.label):void 0,disabled:t||!!c?.error&&c?.available!==!0||c?.busy===!0};switch(r.type){case`button`:{let t=e.snapshot.actions[r.id];return(0,U.jsx)(`div`,{className:`controls-field controls-action-field`,children:(0,U.jsxs)(H.Button,{type:`button`,size:`small`,variant:`secondary`,className:`controls-action-button`,disabled:u.disabled||!t?.available||t.busy,"aria-describedby":u.message?`${i}-unavailable`:void 0,"aria-busy":t?.busy,onClick:()=>{n(`action`,e.declaration.scope,r.id)},children:[r.label,t?.busy?G.controlsActionBusy:``]})},r.id)}case`boolean`:case`select`:case`radio`:case`segmented`:case`checkboxGroup`:return(0,U.jsx)(Je,{...u,control:r,value:o,onCommit:s},r.id);case`number`:case`slider`:case`text`:case`textarea`:case`color`:return(0,U.jsx)(qe,{...u,control:r,value:o,onCommit:s},r.id)}}function d(e,t){if(!e.snapshot.visible[t.id])return null;let n=Ye(e,t);return(0,U.jsxs)(V.Fragment,{children:[u(e,t),t.type===`button`&&n.error?(0,U.jsx)(H.Text,{as:`p`,id:`${a}-${e.declaration.scope}-${t.id}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:n.available?G.controlsNotApplied(t.label):G.controlsUnavailable(t.label)}):null]},t.id)}let f=[...e.filter(e=>e.declaration.role===`shared`),...e.filter(e=>e.declaration.role!==`shared`)].filter(e=>e.declaration.controls.some(t=>t.group?e.snapshot.groups[t.group]:e.snapshot.visible[t.id]));return(0,U.jsx)(`div`,{ref:o,tabIndex:-1,role:`region`,"aria-label":G.controlsRegion,className:`controls-fields`,onFocusCapture:e=>{s.current=e.target},children:f.map((e,t)=>{let n=new Set;return(0,U.jsxs)(`section`,{className:`controls-scope`,"aria-label":e.declaration.label??e.declaration.scope,children:[t>0?(0,U.jsx)(`hr`,{className:`controls-scope-divider`}):null,e.declaration.controls.map(t=>{if(!t.group)return d(e,t);if(n.has(t.group))return null;n.add(t.group);let o=e.declaration.groups?.find(e=>e.id===t.group);if(!o||!e.snapshot.groups[o.id])return null;let s=`${e.declaration.scope}/${o.id}`,u=(r??c)[s]===!0,f=`${a}-${e.declaration.scope}-${o.id}-group`;return(0,U.jsxs)(`fieldset`,{className:`controls-group`,"aria-label":o.label,children:[(0,U.jsx)(`legend`,{children:(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,type:`button`,block:!0,className:`controls-group-toggle controls-ghost-button`,"aria-label":u?G.controlsExpandGroup(o.label):G.controlsCollapseGroup(o.label),"aria-controls":f,"aria-expanded":!u,trailingVisual:u?(0,U.jsx)(m,{size:16}):(0,U.jsx)(g,{size:16}),onClick:t=>{t.currentTarget.focus(),i?i(e.declaration.scope,o.id,!u):l(e=>({...e,[s]:!u}))},children:(0,U.jsx)(H.Text,{as:`span`,size:`100`,weight:`bold`,variant:`muted`,className:`controls-group-label`,children:o.label})})}),(0,U.jsx)(`div`,{id:f,className:`controls-group-body`,hidden:u,children:e.declaration.controls.filter(e=>e.group===o.id).map(t=>d(e,t))})]},o.id)})]},e.declaration.scope)})})}function Ze(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}function Qe(e,t){let n=(0,V.useRef)(null),r=(0,V.useRef)(null),i=(0,V.useRef)(null),a=(0,V.useRef)({position:e,onChange:t}),o=(0,V.useRef)(null),[s,c]=(0,V.useState)(!1);(0,V.useLayoutEffect)(()=>{a.current={position:e,onChange:t}});let l=(0,V.useCallback)(e=>{let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i||!t.width||!t.height)return;let o={x:Math.max(0,Math.min(e.x,Math.max(0,t.width-i.width))),y:Math.max(0,Math.min(e.y,Math.max(0,t.height-i.height)))};(a.current.position?.x!==o.x||a.current.position?.y!==o.y)&&a.current.onChange(o)},[]);(0,V.useLayoutEffect)(()=>{let e=n.current,t=r.current;if(!e||!t)return;function i(){let n=e?.getBoundingClientRect(),r=t?.getBoundingClientRect();if(!n||!r||!n.width||!n.height)return;let i=r.left-n.left,a=r.top-n.top;(i<0||a<0||i>Math.max(0,n.width-r.width)||a>Math.max(0,n.height-r.height))&&l({x:i,y:a})}let a=new ResizeObserver(i);return a.observe(e),a.observe(t),window.addEventListener(`resize`,i),i(),()=>{a.disconnect(),window.removeEventListener(`resize`,i)}},[l]);function u(e=!1){let t=o.current;o.current=null,c(!1),t&&(e&&l(t.origin),i.current?.hasPointerCapture(t.pointerId)&&i.current.releasePointerCapture(t.pointerId))}return{boundsRef:n,panelRef:r,handleRef:i,dragging:s,onPointerDown:e=>{if(e.button!==0||o.current)return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();t&&i&&(o.current={pointerId:e.pointerId,x:e.clientX,y:e.clientY,origin:{x:i.left-t.left,y:i.top-t.top}},e.currentTarget.setPointerCapture(e.pointerId),e.currentTarget.focus(),e.preventDefault(),c(!0))},onPointerMove:e=>{let t=o.current;t&&t.pointerId===e.pointerId&&l({x:t.origin.x+e.clientX-t.x,y:t.origin.y+e.clientY-t.y})},onPointerUp:e=>{o.current?.pointerId===e.pointerId&&u()},onPointerCancel:e=>{o.current?.pointerId===e.pointerId&&u(!0)},onLostPointerCapture:()=>{o.current&&u()},onKeyDown:e=>{if(e.key===`Escape`&&o.current){e.preventDefault(),u(!0);return}if(![`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`].includes(e.key))return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i)return;e.preventDefault();let a=e.shiftKey?1:10;l({x:i.left-t.left+(e.key===`ArrowLeft`?-a:e.key===`ArrowRight`?a:0),y:i.top-t.top+(e.key===`ArrowUp`?-a:e.key===`ArrowDown`?a:0)})}}}function $e(e){let t=e.filter(e=>e.declaration.role!==`shared`),n=t.length?t:e;return n.length?Math.max(...n.map(e=>e.declaration.panel?.width??288)):288}function et({state:e,connection:t,layout:n,onLayoutChange:r,onDiagnose:i,diagnosisTarget:a=``}){let s=e.loading?[]:e.scopes.flatMap(e=>e.declaration.controls.flatMap(t=>{let n=Ye(e,t);return n.visible&&n.error?[{...n,label:t.label}]:[]})),c=!!(i&&!e.loading&&(!e.runtimeAvailable&&e.error||e.storageError||s.length||e.reconnectRequired||e.status===`missing-runtime`||e.status===`unsupported-runtime`||e.status===`invalid-config`)),l=c?JSON.stringify([a,e.status,e.runtimeAvailable,e.reconnectRequired,e.error,e.storageError,s.map(({scope:e,id:t,error:n})=>[e,t,n])]):``,[u,d]=(0,V.useState)(()=>({episode:l,identity:{},busy:!1,requested:!1,error:``}));u.episode!==l&&d({episode:l,identity:{},busy:!1,requested:!1,error:``});async function f(){if(!i||!c||u.busy||u.requested)return;let e=u.identity;d(t=>t.identity===e?{...t,busy:!0,error:``}:t);try{await i(),d(t=>t.identity===e?{...t,requested:!0}:t)}catch(t){d(n=>n.identity===e?{...n,error:t instanceof Error?t.message:G.controlsDiagnosisFailed}:n)}finally{d(t=>t.identity===e?{...t,busy:!1}:t)}}let m=(0,V.useId)(),h=(0,V.useId)(),_=(0,V.useRef)(null),{boundsRef:v,panelRef:y,handleRef:b,dragging:x,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}=Qe(n.position,e=>r(t=>({...t,position:e})));(0,V.useEffect)(()=>{b.current?.focus()},[b]),(0,V.useLayoutEffect)(()=>{_.current&&!_.current.isConnected&&(document.activeElement===document.body&&b.current?.focus(),_.current=null)},[e,b]);let O=e.loading?G.controlsConnecting:e.status===`no-controls`?G.controlsEmpty:e.status===`missing-runtime`?i?G.controlsLocalMissingRuntime:G.controlsMissingRuntime:e.status===`unsupported-runtime`?G.controlsUnsupportedRuntime:e.status===`invalid-config`?G.controlsInvalid:``,k=!e.loading&&(e.storageError||e.reconnectRequired||!e.runtimeAvailable&&e.error);return(0,U.jsx)(`div`,{ref:v,className:`canvas-controls-layer`,children:(0,U.jsxs)(`aside`,{ref:y,className:`canvas-controls-panel`,"aria-label":G.controls,onFocusCapture:e=>{e.target instanceof HTMLElement&&(_.current=e.target)},"data-collapsed":n.collapsed,"data-dragging":x||void 0,style:{left:n.position?.x,top:n.position?.y,width:`min(${$e(e.scopes)}px, calc(100% - var(--hub-space-16) * 2))`},children:[(0,U.jsxs)(`header`,{className:`canvas-controls-header`,children:[(0,U.jsx)(W,{icon:o,ref:b,size:`small`,variant:`invisible`,className:`canvas-controls-grab controls-ghost-button`,"aria-label":G.controlsMove,"aria-describedby":h,title:``,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}),(0,U.jsx)(le,{id:h,children:G.controlsMoveHint}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,block:!0,className:`canvas-controls-title controls-ghost-button`,"aria-label":n.collapsed?G.controlsExpand:G.controlsCollapse,"aria-expanded":!n.collapsed,"aria-controls":m,trailingVisual:n.collapsed?(0,U.jsx)(g,{size:16}):(0,U.jsx)(p,{size:16}),onClick:()=>r(e=>({...e,collapsed:!e.collapsed})),children:G.controls}),(0,U.jsx)(W,{icon:L,size:`small`,variant:`invisible`,className:`controls-ghost-button`,"aria-label":G.controlsResetAll,disabled:!e.runtimeAvailable||e.reconnectRequired||e.loading||e.resetting||!e.storageError&&!e.hasResettableValues&&!e.scopes.some(e=>Object.keys(Ze(e)).length>0)||e.scopes.some(e=>Object.values(e.snapshot.actions).some(e=>e.busy))||e.status!==`ready`&&e.status!==`no-controls`&&!e.storageError,onClick:()=>{t.resetAll()}})]}),(0,U.jsxs)(`div`,{id:m,className:`canvas-controls-body`,hidden:n.collapsed,children:[(0,U.jsxs)(`div`,{className:`canvas-controls-content`,children:[O||e.notice?(0,U.jsx)(`div`,{role:`status`,"aria-live":`polite`,children:(0,U.jsx)(H.Text,{as:`p`,size:`100`,variant:`muted`,children:[O,e.notice].filter(Boolean).join(` `)})}):null,!e.loading&&e.error?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:e.error}):null,!e.loading&&e.scopeErrors?.map(e=>(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:G.controlsScopeError(e.scope,e.error)},e.scope)),!e.loading&&e.storageError?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:e.storageError}):null,u.error?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:u.error}):null,(0,U.jsx)(Xe,{scopes:e.loading?[]:e.scopes,disabled:e.resetting||e.reconnectRequired,collapsedGroups:n.collapsedGroups,onGroupCollapse:(e,t,n)=>r(r=>({...r,collapsedGroups:{...r.collapsedGroups,[`${e}/${t}`]:n}})),onCommand:(e,n,r,i)=>t.command(e,n,r,i)}),s.length?(0,U.jsxs)(H.Accordion,{className:`canvas-controls-diagnostics`,disableAnimation:!0,children:[(0,U.jsx)(H.Accordion.Heading,{children:G.controlsDiagnostics}),(0,U.jsx)(H.Accordion.Content,{children:s.map(({scope:e,id:t,label:n,error:r})=>(0,U.jsxs)(H.Text,{as:`p`,size:`100`,children:[n,`: `,r]},`${e}/${t}`))})]}):null]}),c||k?(0,U.jsxs)(`footer`,{className:`canvas-controls-footer`,children:[c?(0,U.jsx)(H.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:u.busy||u.requested||e.resetting,onClick:()=>void f(),children:u.requested?G.controlsDiagnosisRequested:s.length?G.controlsFix:G.controlsDiagnose}):null,k?(0,U.jsx)(H.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:e.resetting,onClick:()=>t.retry(),children:e.storageError?G.controlsRetryStorage:G.controlsRetry}):null]}):null]})]})})}var tt=c();function nt({children:e,className:t,...n}){return(0,U.jsx)(`span`,{...n,className:`hub-counter${t?` ${t}`:``}`,children:e})}var rt=(0,V.createContext)(null);function it({source:e,children:t}){return(0,U.jsx)(rt,{value:e,children:t})}function at({title:e,label:t=e,open:n,closeLabel:r,closeDisabled:i=!1,closeShortcut:a,closeRef:o,onClose:s,headerAccessory:c,className:l,contentClassName:u,children:d}){return(0,U.jsxs)(`aside`,{className:`hub-sidebar${l?` ${l}`:``}`,"aria-label":t,"aria-hidden":!n,"data-open":n,inert:!n,children:[(0,U.jsxs)(`header`,{className:`hub-sidebar__header`,children:[(0,U.jsxs)(`div`,{className:`hub-sidebar__heading`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`subhead-medium`,weight:`normal`,children:e}),c]}),(0,U.jsx)(W,{ref:o,icon:B,"aria-label":r,"aria-keyshortcuts":a,title:r,description:r,variant:`invisible`,size:`small`,className:`hub-sidebar__close`,disabled:i,onClick:s})]}),(0,U.jsx)(`div`,{className:`hub-sidebar__content${u?` ${u}`:``}`,children:d})]})}function ot({src:e,size:t=32,className:n}){return(0,U.jsx)(H.Avatar,{src:e||`/avatar-placeholder.svg`,alt:``,size:32,className:`hub-user-avatar hub-user-avatar--${t}${n?` ${n}`:``}`})}function st({participants:e,size:t}){let n=e.slice(0,4),r=e.length-3;return(0,U.jsxs)(`span`,{className:`review-participant-stack review-participant-stack--${t}`,"data-avatar-count":n.length,"data-participant-count":e.length,"aria-hidden":`true`,children:[(r>1?n.slice(0,3):n).map(e=>(0,U.jsx)(`span`,{className:`review-participant-stack__avatar`,children:(0,U.jsx)(ot,{src:e.avatarUrl,size:24})},e.login)),r>1?(0,U.jsxs)(`span`,{className:`review-participant-stack__avatar review-participant-stack__avatar--overflow`,children:[`+`,r]}):null]})}function ct(e,t){let n=e.path.map(e=>({x:t.x+e.x*t.width,y:t.y+e.y*t.height})),r={x:t.x+t.width,y:t.y};return{path:n,point:n.reduce((e,t)=>{let n=(t.x-r.x)**2+(t.y-r.y)**2;return n{let e=c.current;if(!e)return;function t(){let t=e?.clientWidth??0;if(t)for(let e of l.current.values()){let n=Number.parseFloat(e.style.left),r=e.offsetWidth;if(!Number.isFinite(n)||!r)continue;let i=n-16,a=Math.max(0,Math.min(i,t-r))-i;e.style.setProperty(`--review-marker-offset-x`,`${a}px`)}}t();let n=typeof ResizeObserver>`u`?null:new ResizeObserver(t);n?.observe(e);for(let e of l.current.values())n?.observe(e);return window.addEventListener(`resize`,t),()=>{n?.disconnect(),window.removeEventListener(`resize`,t)}},[t,e]),(0,V.useEffect)(()=>{!i||n===null||u!==`resolved`&&u!==`moved`||l.current.get(n)?.focus({preventScroll:!0})},[i,u,n]),(0,U.jsx)(`div`,{ref:c,className:`review-comment-markers`,role:`group`,"aria-label":o.heading,children:e.map(e=>{let{root:i}=e,c=t.get(i.id);if(!c||c.status!==`resolved`&&c.status!==`moved`)return null;let u=e.replies.length>0,d=(e.unread?u?o.unreadMarkerWithRepliesLabel:o.unreadMarkerLabel:u?o.markerWithRepliesLabel:o.markerLabel).replace(`%{author}`,`@${i.author.login}`).replace(`%{count}`,(e.replies.length+1).toString()),f=i.anchor.kind===`area`?ct(i.anchor,c.rect):null,p=e.participants.slice(3),m=p.length>1?p.map(({login:e})=>`@${e}`).join(`, `):d;return(0,U.jsxs)(V.Fragment,{children:[f&&(!a||n===i.id)?(0,U.jsx)(`svg`,{className:`review-comment-area`,"aria-hidden":`true`,width:`100%`,height:`100%`,children:(0,U.jsx)(`polyline`,{className:n===i.id?`review-comment-area__path review-comment-area__path--selected`:`review-comment-area__path`,points:f.path.map(e=>`${e.x},${e.y}`).join(` `),vectorEffect:`non-scaling-stroke`})}):null,(0,U.jsx)(H.Tooltip,{text:m,type:`description`,ref:e=>{e instanceof HTMLButtonElement?l.current.set(i.id,e):l.current.delete(i.id)},children:(0,U.jsx)(`button`,{type:`button`,"data-review-thread-id":i.id,className:`review-comment-marker${n===i.id?` review-comment-marker--selected`:``}${i.resolvedAt?` review-comment-marker--resolved`:``}${e.unread?` review-comment-marker--unread`:``}${r&&n!==i.id?` review-comment-marker--blocked`:``}`,style:{left:f?.point.x??c.point.x,top:f?.point.y??c.point.y},"aria-label":d,disabled:r&&n!==i.id,onClick:()=>s(e),children:(0,U.jsx)(st,{participants:e.participants,size:`small`})})})]},i.id)})})}function Z({checked:e,onChange:t,size:n=`medium`,className:r,...i}){let{value:a,...o}=i;return(0,U.jsxs)(`label`,{className:`hub-switch hub-switch--${n}${r?` ${r}`:``}`,"data-disabled":i.disabled||void 0,children:[(0,U.jsx)(`span`,{className:`hub-switch__native-control`,children:(0,U.jsx)(H.Checkbox,{...o,value:a===void 0?void 0:String(a),role:`switch`,checked:e,onChange:e=>{i.disabled||t(e.currentTarget.checked)}})}),(0,U.jsx)(`span`,{className:`hub-switch__track`,"data-checked":e,"aria-hidden":`true`,children:(0,U.jsx)(`span`,{className:`hub-switch__thumb`})})]})}function Q(e){(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())}function ut({filters:e,participants:t,showPins:n,copy:r,onFiltersChange:i,onShowPinsChange:a}){let[o,s]=(0,V.useState)(!1),c=e.currentBuildOnly||e.currentPageOnly||e.showResolved||!e.showRead||e.onlyMine||e.participant!==null||!n,l=t.find(t=>t.login===e.participant),u=e.participant===null?r.allParticipantsLabel:l?.name?`${l.name} (@${l.login})`:`@${e.participant}`;return(0,U.jsxs)(`div`,{className:`review-comment-filter-controls`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__search`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__search-field`,children:[(0,U.jsx)(ne,{className:`review-comment-filter-controls__search-icon`,size:16,"aria-hidden":`true`}),(0,U.jsx)(`input`,{type:`search`,className:`review-comment-filter-controls__input`,"aria-label":r.searchLabel,placeholder:r.searchPlaceholder,value:e.search,onChange:t=>i({...e,search:t.target.value})})]}),(0,U.jsx)(W,{icon:h,"aria-label":r.filterLabel,description:r.filterLabel,"aria-expanded":o,variant:`invisible`,className:`review-comment-filter-controls__button${o||c?` review-comment-filter-controls__button--active`:``}`,onClick:()=>s(e=>!e)})]}),o?(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__filters`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__participant`,children:[(0,U.jsx)(`span`,{children:r.participantFilterLabel}),(0,U.jsxs)(H.ActionMenu,{size:`small`,selectionVariant:`single`,menuAlignment:`end`,onSelect:t=>i({...e,participant:t===``?null:t}),children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-filter-controls__participant-trigger`,variant:`secondary`,size:`small`,"aria-label":`${r.participantFilterLabel}: ${u}`,children:(0,U.jsx)(`span`,{className:`review-comment-filter-controls__participant-name`,children:u})}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":r.participantFilterLabel,children:[(0,U.jsx)(H.ActionMenu.Item,{value:``,selected:e.participant===null,role:`menuitemradio`,onKeyDownCapture:Q,children:r.allParticipantsLabel}),t.map(t=>(0,U.jsx)(H.ActionMenu.Item,{value:t.login,selected:e.participant===t.login,role:`menuitemradio`,onKeyDownCapture:Q,children:t.name?`${t.name} (@${t.login})`:`@${t.login}`},t.login))]})]})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-current-build`,children:r.currentBuildFilterLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-current-build`,checked:e.currentBuildOnly,size:`small`,onChange:t=>i({...e,currentBuildOnly:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-current-page`,children:r.currentPageFilterLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-current-page`,checked:e.currentPageOnly,size:`small`,onChange:t=>i({...e,currentPageOnly:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-show-resolved`,children:r.showResolvedLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-show-resolved`,checked:e.showResolved,size:`small`,onChange:t=>i({...e,showResolved:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-unread-only`,children:r.unreadOnlyLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-unread-only`,checked:!e.showRead,size:`small`,onChange:t=>i({...e,showRead:!t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-only-mine`,children:r.onlyMineLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-only-mine`,checked:e.onlyMine,size:`small`,onChange:t=>i({...e,onlyMine:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-show-pins`,children:r.showPinsLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-show-pins`,checked:n,size:`small`,onChange:a})]})]}):null]})}var dt=[[31536e3,`y`],[2592e3,`mo`],[604800,`w`],[86400,`d`],[3600,`h`],[60,`m`]];function ft(e){let t=window.setInterval(e,6e4);return()=>window.clearInterval(t)}function pt(){return Math.floor(Date.now()/6e4)*6e4}function mt(){return null}function ht({value:e,showTitle:t=!0}){let n=Date.parse(e),r=Number.isNaN(n)?e:new Date(n).toUTCString(),i=(0,V.useSyncExternalStore)(ft,pt,mt),a=r;if(i!==null&&!Number.isNaN(n)){let e=Math.round((i-n)/1e3),t=dt.find(([t])=>Math.abs(e)>=t);a=t?`${e<0?`in `:``}${Math.round(Math.abs(e)/t[0])}${t[1]}${e<0?``:` ago`}`:`just now`}return(0,U.jsx)(`time`,{dateTime:e,title:t?r:void 0,"aria-label":r,children:a})}function gt({thread:e,currentBuildNumber:t,resolution:n,anchorStatusLabel:r,selected:i,selectionBlocked:a,copy:o,onSelect:s,buildHref:c}){let l=(0,V.useId)(),{root:u}=e,d=u.author.name||`@${u.author.login}`,f=a&&!i,p=o.buildLabel.replace(`%{number}`,u.buildNumber.toString()),m=u.buildNumber!==t,h=e.replies.length===1?o.replyCountOneLabel:o.replyCountOtherLabel.replace(`%{count}`,e.replies.length.toString()),g=o.missingAnchorLabel;return u.resolvedAt?g=o.resolvedLabel:r===void 0?n?n.status===`resolved`?g=null:n.status===`moved`?g=o.movedAnchorLabel:n.status===`changed`?g=o.changedAnchorLabel:n.status===`route-mismatch`&&(g=o.routeMismatchLabel):g=null:g=r,(0,U.jsx)(`article`,{className:`review-comment-row${i?` review-comment-row--selected`:``}${e.unread?` review-comment-row--unread`:``}`,onClick:t=>{f||t.target instanceof Element&&t.target.closest(`a`)||s(e)},children:(0,U.jsx)(`div`,{className:`review-comment-row__layout`,children:(0,U.jsxs)(`div`,{className:`review-comment-row__content`,children:[(0,U.jsxs)(`div`,{className:`review-comment-row__copy`,children:[(0,U.jsxs)(`div`,{className:`review-comment-row__metadata`,children:[(0,U.jsxs)(`span`,{className:`review-comment-row__author-and-build`,children:[(0,U.jsx)(ot,{src:u.author.avatarUrl,size:20,className:`review-comment-row__avatar`}),(0,U.jsx)(`span`,{id:`${l}-author`,className:`review-comment-row__author`,children:d}),m?(0,U.jsxs)(`span`,{className:`review-comment-row__build`,children:[`(`,(0,U.jsx)(`a`,{href:c||u.buildPath,target:c?`_blank`:void 0,rel:c?`noopener noreferrer`:void 0,children:p}),`)`]}):null]}),(0,U.jsx)(ht,{value:e.lastActivityAt})]}),(0,U.jsx)(`button`,{type:`button`,className:`review-comment-row__button`,"aria-labelledby":`${l}-author ${l}-body${e.unread?` ${l}-unread`:``}`,"aria-pressed":i,disabled:f,title:f?o.selectionBlockedLabel:void 0,children:(0,U.jsxs)(`span`,{className:`review-comment-row__body-container`,children:[e.unread?(0,U.jsx)(`span`,{role:`img`,id:`${l}-unread`,"aria-label":o.unreadLabel,title:o.unreadLabel,className:`review-comment-row__unread`}):null,(0,U.jsx)(`span`,{id:`${l}-body`,className:`review-comment-row__body`,children:u.body??o.deletedCommentLabel})]})})]}),g||e.replies.length>0?(0,U.jsxs)(`div`,{className:`review-comment-row__context`,children:[e.replies.length>0?(0,U.jsx)(`span`,{className:`review-comment-row__replies`,children:h}):null,g?(0,U.jsx)(H.Label,{size:`small`,className:`review-comment-row__status`,children:g}):null]}):null]})})})}function _t({frame:e,threads:t,currentBuildNumber:n,buildLinkOrigin:r,totalCount:i,hasThreads:a,filters:o,participants:s,resolutions:c,selectedThreadId:l,selectionBlocked:u,closeBlocked:d,showPins:f,loading:p,loadFailed:m,notice:h,copy:g,onClose:_,onFiltersChange:v,onShowPinsChange:y,onRetry:b,onSelect:x}){let S=a?g.noMatchesLabel:g.emptyLabel,C=(0,U.jsxs)(U.Fragment,{children:[h,(0,U.jsx)(ut,{filters:o,participants:s,showPins:f,copy:g,onFiltersChange:v,onShowPinsChange:y}),(0,U.jsxs)(`div`,{className:`review-comments-sidebar__body`,"aria-live":`polite`,children:[m?(0,U.jsxs)(`div`,{className:`review-comments-sidebar__state`,role:`alert`,children:[(0,U.jsx)(`span`,{children:g.loadErrorLabel}),(0,U.jsx)(H.Button,{size:`small`,onClick:b,children:g.retryLabel})]}):t.length===0&&!p?(0,U.jsx)(`div`,{className:`review-comments-sidebar__state`,children:S}):(0,U.jsx)(`div`,{className:`review-comments-sidebar__threads`,children:t.map(e=>(0,U.jsx)(gt,{thread:e,currentBuildNumber:n,buildHref:r?new URL(e.root.buildPath,r).href:void 0,resolution:c.get(e.root.id),selected:l===e.root.id,selectionBlocked:u,copy:g,onSelect:x},e.root.id))}),p?(0,U.jsxs)(`div`,{className:`review-comments-sidebar__loading`,children:[(0,U.jsx)(ce,{decorative:!0,size:`small`}),(0,U.jsx)(`span`,{children:g.loadingLabel})]}):null]})]});return e?(0,U.jsx)(at,{...e,title:g.heading,closeLabel:g.closeLabel,closeDisabled:d,closeShortcut:`Shift+C`,onClose:_,headerAccessory:(0,U.jsx)(nt,{children:i}),children:C}):(0,U.jsxs)(`aside`,{className:`review-comments-sidebar`,"aria-label":g.heading,children:[(0,U.jsxs)(`header`,{className:`review-comments-sidebar__header`,children:[(0,U.jsxs)(`span`,{className:`review-comments-sidebar__heading`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:g.heading}),(0,U.jsx)(nt,{children:i})]}),(0,U.jsx)(W,{icon:B,"aria-label":g.closeLabel,"aria-keyshortcuts":`Shift+C`,description:g.closeLabel,size:`small`,variant:`invisible`,className:`review-comments-sidebar__close`,disabled:d,onClick:_})]}),C]})}function vt({bridgeReady:e,copy:t,selectionBlocked:n,selecting:r,onCancelSelection:i,onStartAreaSelection:a,onStartElementSelection:o}){let s=(0,V.useId)(),c=!e||n,l=e?n?t.selectionBlockedLabel:t.commentMenuLabel:t.bridgeUnavailableLabel;if(r)return(0,U.jsx)(W,{icon:B,"aria-label":t.cancelSelectionLabel,description:t.cancelSelectionLabel,"aria-pressed":!0,size:`small`,variant:`default`,className:`review-comment-control__trigger`,onClick:i});let u=(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`start`,disabled:c,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-control__trigger`,variant:`secondary`,"aria-label":t.commentMenuLabel,"aria-describedby":s,leadingVisual:(0,U.jsx)(f,{size:16}),onClick:e=>{let t=e.currentTarget,n=t.closest(`.repository-workspace__content`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??window.innerHeight),i=Math.max(0,r-t.getBoundingClientRect().bottom-8);t.closest(`[data-testid="ActionMenu"]`)?.style.setProperty(`--review-comment-control-menu-height`,`${i}px`)},children:``}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":t.commentMenuLabel,children:[(0,U.jsx)(H.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`element`,leadingVisual:(0,U.jsx)(M,{size:16}),"aria-keyshortcuts":`C`,onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},children:t.commentOnElementLabel}),(0,U.jsx)(H.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`area`,leadingVisual:(0,U.jsx)(T,{size:16}),"aria-keyshortcuts":`H`,onClick:a,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),a())},children:t.highlightRegionLabel})]})]});return c?(0,U.jsxs)(`div`,{title:l,children:[u,(0,U.jsx)(le,{id:s,children:l})]}):(0,U.jsx)(H.Tooltip,{id:s,text:l,type:`description`,children:(0,U.jsx)(`div`,{children:u})})}var yt={search:``,currentBuildOnly:!1,currentPageOnly:!1,showResolved:!1,showRead:!0,onlyMine:!1,participant:null},bt={heading:`Comments`,closeLabel:`Close comments`,commentMenuLabel:`Add a comment`,commentOnElementLabel:`Comment on element`,highlightRegionLabel:`Highlight a region`,cancelSelectionLabel:`Cancel selection`,bridgeUnavailableLabel:`Adding comments needs the review bridge.`,selectionBlockedLabel:`Close or submit the open draft.`,selectionFailedLabel:`Hub could not anchor a comment to that element.`,areaTooSmallLabel:`Draw a larger region to add a comment.`,areaUnavailableLabel:`Hub could not save that region.`,searchLabel:`Search comments`,searchPlaceholder:`Search comments`,filterLabel:`Filters`,currentBuildFilterLabel:`Current build only`,currentPageFilterLabel:`Current page only`,participantFilterLabel:`Participant`,allParticipantsLabel:`All participants`,showResolvedLabel:`Show resolved`,unreadOnlyLabel:`Unread only`,onlyMineLabel:`Only your threads`,showPinsLabel:`Show pins`,sidebarShortcutLabel:`Shift+C`,loadingLabel:`Loading comments`,loadErrorLabel:`Comments could not be loaded.`,retryLabel:`Retry`,emptyLabel:`No comments have been added.`,noMatchesLabel:`No comments match these filters.`,buildLabel:`build %{number}`,movedAnchorLabel:`Moved`,changedAnchorLabel:`Context changed`,missingAnchorLabel:`Not found`,routeMismatchLabel:`Saved on another page`,resolvedLabel:`Resolved`,markerLabel:`Thread started by %{author}`,markerWithRepliesLabel:`Thread started by %{author}, %{count} comments`,unreadLabel:`Unread`,unreadMarkerLabel:`Unread thread started by %{author}`,unreadMarkerWithRepliesLabel:`Unread thread started by %{author}, %{count} comments`,replyCountOneLabel:`1 reply`,replyCountOtherLabel:`%{count} replies`,threadHeading:`Conversation`,backToCommentsLabel:`Back to comments`,resolvedByLabel:`Resolved by %{author}. Reopen this thread to reply.`,editedLabel:`Edited`,deletedCommentLabel:`Comment deleted`,addReactionLabel:`Add reaction`,reactionCountOneLabel:`%{reaction}, 1 reaction`,reactionCountOtherLabel:`%{reaction}, %{count} reactions`,reactionErrorLabel:`The reaction could not be changed.`,readErrorLabel:`Hub could not mark this conversation as read.`,markUnreadLabel:`Mark as unread`,markUnreadErrorLabel:`Hub could not mark this conversation as unread. Try again.`,reactionLabels:{"+1":`Thumbs up`,"-1":`Thumbs down`,laugh:`Laugh`,hooray:`Hooray`,confused:`Confused`,heart:`Heart`,rocket:`Rocket`,eyes:`Eyes`},commentActionsLabel:`Actions for comment by %{author}`,editLabel:`Edit`,deleteLabel:`Delete`,editCommentLabel:`Edit comment`,saveEditLabel:`Save`,savingEditLabel:`Saving comment`,cancelEditLabel:`Cancel`,editErrorLabel:`The comment could not be updated.`,deleteHeading:`Delete this comment?`,deletePromptLabel:`Deleted comment text cannot be recovered.`,confirmDeleteLabel:`Delete`,deletingLabel:`Deleting comment`,deleteErrorLabel:`The comment could not be deleted.`,replyLabel:`Reply`,replyPlaceholder:`Reply to this conversation`,replySubmitLabel:`Reply`,replySubmitTooltipMacLabel:`Reply (Cmd+Return)`,replySubmitTooltipOtherLabel:`Reply (Ctrl+Enter)`,replyingLabel:`Saving reply`,replyErrorLabel:`The reply could not be saved.`,resolveLabel:`Resolve`,resolvingLabel:`Resolving thread`,reopenLabel:`Reopen`,reopeningLabel:`Reopening thread`,resolutionErrorLabel:`The thread state could not be changed.`,resolvedReplyBlockedLabel:`Reopen this thread to reply.`,deletedReplyBlockedLabel:`Replies are closed.`,threadDiscardPromptLabel:`Your reply or edit has not been saved.`,composerHeading:`New comment`,composerLabel:`Comment`,composerPlaceholder:`Leave a review comment`,submitLabel:`Comment`,submitTooltipMacLabel:`Comment (Cmd+Return)`,submitTooltipOtherLabel:`Comment (Ctrl+Enter)`,submittingLabel:`Saving comment`,closeComposerLabel:`Cancel`,discardHeading:`Keep this draft?`,discardPromptLabel:`This comment has not been submitted.`,keepLabel:`Keep`,discardButtonLabel:`Discard`,bodyTooLongLabel:`Comments must be 10000 UTF-8 bytes or fewer.`,createErrorLabel:`The comment could not be saved.`};function xt(e,t){let n=new Map;n.set(e.login.toLowerCase(),e);for(let e of t.toReversed()){let t=e.login.toLowerCase();n.has(t)||n.set(t,e)}return Array.from(n.values())}function St(e){let t=new Map,n=new Map;for(let r of e){if(r.kind===`root`){t.set(r.id,r);continue}let e=n.get(r.rootId)??[];e.push(r),n.set(r.rootId,e)}return Array.from(t.values()).flatMap(e=>{let t=(n.get(e.id)??[]).filter(e=>e.deletedAt===null).sort((e,t)=>Date.parse(e.createdAt)-Date.parse(t.createdAt)||e.id-t.id);return e.deletedAt!==null&&t.length===0?[]:[{root:e,replies:t,participants:xt(e.author,t.map(e=>e.author)),lastActivityAt:t.at(-1)?.createdAt??e.createdAt,unread:e.viewerLastSeenActivityVersion===null||e.viewerLastSeenActivityVersionDate.parse(t.lastActivityAt)-Date.parse(e.lastActivityAt)||t.root.id-e.root.id)}var Ct=new TextEncoder;function wt(e,{prefix:t,required:n=!1}={}){return N().refine(r=>(!n||r!==``)&&(!t||r===``||r.startsWith(t))&&Ct.encode(r).length<=e)}var Tt=16384,Et=2048,Dt=2048,Ot=1024,kt=4096,At=1e3,jt=2e3,Mt=1e6,Nt=1e5,Pt=new TextEncoder,Ft=z().min(0).max(Mt),It=z().min(-Mt).max(Mt),Lt=z().min(0).max(Mt),Rt=E({x:z().min(0).max(1),y:z().min(0).max(1)}).strict(),zt=E({pathname:wt(Et,{prefix:`/`,required:!0}),search:wt(Dt,{prefix:`?`}),hash:wt(Ot,{prefix:`#`})}).strict(),Bt=E({x:Ft,y:Ft,width:Lt,height:Lt}).strict();E({x:It,y:It}).strict();var Vt=E({width:z().min(1).max(Nt),height:z().min(1).max(Nt),scrollX:Ft,scrollY:Ft}).strict(),Ht=E({schemaVersion:I(1),kind:I(`element`),route:zt,selector:wt(kt,{required:!0}),accessibleName:wt(At),tagName:wt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),selectedText:wt(jt),rect:Bt,viewport:Vt,elementOffset:Rt}).strict().refine(e=>Pt.encode(JSON.stringify(e)).length<=Tt),Ut=E({selector:wt(kt,{required:!0}),accessibleName:wt(At),tagName:wt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),role:wt(64),textExcerpt:wt(500),rect:Bt}).strict(),Wt=E({schemaVersion:I(1),kind:I(`area`),route:zt,path:R(Rt).min(2).max(160),rect:Bt,viewport:Vt,elements:R(Ut).max(8)}).strict().refine(e=>Math.hypot(e.rect.width,e.rect.height)>=8).refine(e=>Pt.encode(JSON.stringify(e)).length<=Tt),Gt=w(`kind`,[Ht,Wt]);w(`status`,[E({commentId:z().int().positive().max(2**53-1),status:te([`resolved`,`moved`]),rect:E({x:It,y:It,width:Lt,height:Lt}).strict(),point:E({x:It,y:It}).strict()}).strict(),E({commentId:z().int().positive().max(2**53-1),status:te([`changed`,`missing`,`route-mismatch`])}).strict()]);var Kt=z().int().positive().max(2**53-1),qt=N().refine(e=>!Number.isNaN(Date.parse(e))),Jt=qt.nullable(),Yt=E({login:N().min(1),name:N().nullable(),avatarUrl:N().nullable()}),Xt=te([`+1`,`-1`,`laugh`,`hooray`,`confused`,`heart`,`rocket`,`eyes`]),Zt=E({content:Xt,count:Kt,viewerHasReacted:j()}),Qt={id:Kt,body:N().nullable(),mentions:R(E({login:N().min(1),githubId:Kt})).optional(),createdAt:qt,updatedAt:qt,editedAt:Jt,deletedAt:Jt,author:Yt,viewerCanEdit:j(),viewerCanDelete:j(),reactions:R(Zt)},$t=E({...Qt,kind:I(`root`),buildNumber:Kt,buildPath:N().startsWith(`/`),anchor:Gt,resolvedAt:Jt,resolvedBy:Yt.nullable(),activityVersion:Kt,viewerLastSeenActivityVersion:Kt.nullable()}),en=E({...Qt,kind:I(`reply`),rootId:Kt}),tn=w(`kind`,[$t,en]),nn=w(`hasMore`,[E({comments:R(tn),nextCursor:N().min(1),hasMore:I(!0)}),E({comments:R(tn),nextCursor:F(),hasMore:I(!1)})]),rn=E({comments:R(tn).min(1).max(2)});function an(e,t){let{root:n}=e,{filters:r}=t;if(!r.showResolved&&n.resolvedAt!==null||!r.showRead&&!e.unread||r.onlyMine&&![n,...e.replies].some(e=>e.author.login.toLowerCase()===t.viewerLogin.toLowerCase())||r.currentBuildOnly&&n.buildNumber!==t.selectedBuildNumber||r.participant!==null&&!e.participants.some(e=>e.login.toLowerCase()===r.participant?.toLowerCase())||r.currentPageOnly&&t.route!==null&&(n.anchor.route.pathname!==t.route.pathname||n.anchor.route.search!==t.route.search||n.anchor.route.hash!==t.route.hash))return!1;let i=r.search.trim().toLowerCase();if(!i)return!0;let a=n.anchor.kind===`element`?[n.anchor.accessibleName,n.anchor.selectedText,n.anchor.tagName]:n.anchor.elements.flatMap(e=>[e.accessibleName,e.textExcerpt,e.tagName,e.role]);return[n.body??``,n.author.login,n.author.name??``,n.buildNumber.toString(),...e.replies.flatMap(e=>[e.body??``,e.author.login,e.author.name??``]),...a].join(`
-`).toLowerCase().includes(i)}var on=E({candidates:R(E({githubId:z().int().positive().max(2**53-1),login:N().min(1).max(39),avatarUrl:N().nullable()}))});async function $(e,t,n={}){let r=await fetch(e,{...n,headers:{"Content-Type":`application/json`,"X-Replica-Canvas-Token":t,...n.headers}}),i=await r.json().catch(()=>({error:G.invalidResponse}));if(!r.ok)throw Object.assign(Error(i.error||G.requestFailed),{code:i.code,statusCode:r.status,authorization:i.authorization});return i}function sn({error:e,busy:t,requested:n,onFix:r,onDismiss:i}){let a=(0,V.useId)();return(0,U.jsxs)(ue,{title:G.commentingUnavailable,descriptionId:a,closeLabel:G.closeCommentingDialog,onClose:i,children:[(0,U.jsx)(`p`,{id:a,children:G.commentingDescription}),e?(0,U.jsx)(`p`,{role:`alert`,children:e}):null,(0,U.jsxs)(`div`,{className:`canvas-commenting-recovery__actions`,children:[(0,U.jsx)(H.Button,{variant:`primary`,disabled:t||n,onClick:r,children:n?G.commentingFixRequested:G.commentingFix}),(0,U.jsx)(H.Button,{variant:`subtle`,onClick:i,children:G.commentingDismiss})]})]})}function cn({cancelLabel:e,confirmLabel:t,description:n,errorLabel:r,heading:i,loading:a=!1,loadingAnnouncement:o,compact:s=!1,condensed:c=!1,onCancel:l,onConfirm:u}){let d=(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:c?`primary`:void 0,className:`review-confirmation-panel__cancel`,onClick:l,children:e}),f=(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:c?`secondary`:`primary`,className:c?void 0:`review-confirmation-panel__danger`,disabled:a,"aria-busy":a,onClick:u,children:t});return(0,U.jsxs)(`div`,{className:`review-confirmation-panel${s||c?` review-confirmation-panel--compact`:``}${c?` review-confirmation-panel--condensed`:``}`,role:`alert`,children:[(0,U.jsxs)(`div`,{className:`review-confirmation-panel__copy`,children:[(0,U.jsx)(`strong`,{children:i}),c?(0,U.jsx)(le,{children:n}):(0,U.jsx)(`span`,{children:n})]}),r?(0,U.jsx)(`span`,{className:`review-confirmation-panel__error`,children:r}):null,(0,U.jsxs)(`div`,{className:`review-confirmation-panel__actions`,children:[c?f:d,c?d:f,a&&o?(0,U.jsx)(le,{role:`status`,children:o}):null]})]})}function ln(){return(0,V.useContext)(rt)}function un(e){let t=e.matchAll(/(?e[1]?[e[1].toLowerCase()]:[])))}function dn({value:e,onValueChange:t,onKeyDown:n,ref:r,...i}){let a=ln(),o=(0,V.useRef)(null),s=(0,V.useRef)(null),c=(0,V.useRef)(null),l=(0,V.useId)(),[u,d]=(0,V.useState)(e.length),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(!1),[v,y]=(0,V.useState)(0),[b,x]=(0,V.useState)(0),[S,C]=(0,V.useState)({left:0,top:0,width:0}),w=e.slice(0,u).match(/(?:^|[\s(])@([a-zA-Z0-9-]*)$/)?.[1]?.toLowerCase(),T=a!==null&&w!==void 0&&!f&&!i.disabled,E=un(e).length>10,D=m?.source===a&&m?.failed,O=g||m?.source!==a,k=(m?.source===a?m.candidates:[]).filter(e=>e.login.toLowerCase().includes(w??``)).slice(0,8),A=Math.min(b,Math.max(0,k.length-1));(0,V.useEffect)(()=>{o.current?.setCustomValidity(E?a?.copy.limit??``:``)},[a?.copy.limit,E]),(0,V.useEffect)(()=>{if(!T||!a)return;let e=!0,t=window.setTimeout(()=>{_(!0),a.load().then(t=>{e&&h({source:a,candidates:t,failed:!1})},()=>{e&&h({source:a,candidates:[],failed:!0})}).finally(()=>{e&&_(!1)})},150);return()=>{e=!1,window.clearTimeout(t)}},[T,v,a]),(0,V.useLayoutEffect)(()=>{if(!T)return;function e(){let e=o.current?.getBoundingClientRect();e&&C({left:e.left,width:e.width,top:Math.max(4,window.innerHeight-e.bottom<224?e.top-224:e.bottom)})}return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[T]);function j(n){if(w===void 0)return;let r=u-w.length-1,i=`@${n.login} `;t(e.slice(0,r)+i+e.slice(u)),p(!0);let a=r+i.length;window.requestAnimationFrame(()=>{o.current?.focus(),o.current?.setSelectionRange(a,a),d(a)})}function M(e,t){o.current=e,typeof t==`function`?t(e):t&&(t.current=e)}return(0,U.jsxs)(`div`,{className:`mention-input`,children:[(0,U.jsx)(`textarea`,{...i,ref:e=>M(e,r),value:e,"aria-autocomplete":a?`list`:void 0,"aria-controls":T?l:void 0,"aria-activedescendant":T&&k.length?`${l}-${A}`:void 0,onChange:e=>{d(e.currentTarget.selectionStart),p(!1),x(0),t(e.currentTarget.value)},onSelect:e=>d(e.currentTarget.selectionStart),onBlur:e=>{s.current?.contains(e.relatedTarget)||p(!0)},onKeyDown:e=>{if(T&&e.key===`Escape`)e.preventDefault(),e.stopPropagation(),p(!0);else if(T&&D&&!O&&e.key===`Tab`&&!e.shiftKey)e.preventDefault(),c.current?.focus();else{if(T&&!O&&!D&&k.length){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),x((A+(e.key===`ArrowDown`?1:-1)+k.length)%k.length);return}if((e.key===`Enter`||e.key===`Tab`)&&!e.nativeEvent.isComposing&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey){e.preventDefault();let t=k[A];t&&j(t);return}}n?.(e)}}}),E&&a?.copy.limit?(0,U.jsx)(`span`,{role:`alert`,children:a.copy.limit}):null,T&&a?(0,tt.createPortal)((0,U.jsx)(`div`,{ref:s,id:l,className:`mention-input__suggestions`,style:S,onBlur:e=>{e.relatedTarget!==o.current&&!e.currentTarget.contains(e.relatedTarget)&&p(!0)},onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),p(!0),o.current?.focus()):e.key===`Tab`&&e.shiftKey&&(e.preventDefault(),o.current?.focus())},children:O?(0,U.jsx)(`span`,{role:`status`,children:a.copy.loading}):D?(0,U.jsxs)(`div`,{role:`alert`,children:[a.copy.error,` `,(0,U.jsx)(`button`,{ref:c,type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{y(v+1),o.current?.focus()},children:a.copy.retry})]}):(0,U.jsxs)(`ul`,{role:`listbox`,"aria-label":a.copy.suggestions,children:[k.map((e,t)=>(0,U.jsx)(`li`,{id:`${l}-${t}`,role:`option`,"aria-selected":t===A,children:(0,U.jsxs)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>j(e),children:[`@`,e.login]})},e.githubId)),k.length?null:(0,U.jsx)(`li`,{role:`presentation`,children:a.copy.empty})]})}),document.body):null]})}function fn({anchorPoint:e,anchorRectangle:t,anchorSelector:n,layoutKey:r,preserveVerticalSide:i=!1}){let a=(0,V.useRef)(null),o=(0,V.useRef)(null),[s,c]=(0,V.useState)({left:e.x+12,top:e.y+12}),l=(0,V.useCallback)(()=>{let r=a.current,s=r?.parentElement;if(!r||!s)return;let l=r.offsetWidth,u=r.offsetHeight,d=s.clientWidth-l-8,f=s.clientHeight-u-8,p,m,h=(n?s.querySelector(n)??s.parentElement?.querySelector(n):null)?.getBoundingClientRect(),g=s.getBoundingClientRect(),_=h?{x:h.left-g.left,y:h.top-g.top,width:h.height,height:h.height}:t;if(_){let e=_.x+_.width+12,t=_.x-12-l,n=e+l<=s.clientWidth-8,r=t>=8,i=s.clientWidth-8-_.x-_.width,a=_.x-8;p=n?e:r?t:i>=a?e:t,m=_.y}else{let t=e.x+12,n=e.y+12;p=t+l<=s.clientWidth-8?t:e.x-12-l;let r=o.current,a=i&&r?.x===e.x&&r.y===e.y?r.side:n+u<=s.clientHeight-8?`below`:`above`;i&&(o.current={x:e.x,y:e.y,side:a}),m=a===`below`?n:e.y-12-u}let v={left:Math.max(8,Math.min(p,d)),top:Math.max(8,Math.min(m,f))};c(e=>e.left===v.left&&e.top===v.top?e:v)},[e,t,n,i]);return(0,V.useLayoutEffect)(()=>{l();let e=a.current,t=e?.parentElement;if(!e||!t||typeof ResizeObserver!=`function`)return;let r=new ResizeObserver(l);r.observe(e),r.observe(t);let i=n?t.querySelector(n)??t.parentElement?.querySelector(n):null;return i&&r.observe(i),window.addEventListener(`resize`,l),()=>{r.disconnect(),window.removeEventListener(`resize`,l)}},[n,r,l]),{cardRef:a,position:s}}function pn(){return typeof navigator<`u`&&/Mac/i.test(navigator.platform)}function mn(e,{allowPlainEnter:t=!1}={}){let n=e.isComposing||e.keyCode===229,r=pn()?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey,i=t&&!e.metaKey&&!e.ctrlKey;return e.key===`Enter`&&!e.shiftKey&&!e.altKey&&!n&&!e.repeat&&(r||i)}var hn=new TextEncoder;function gn({anchorPoint:e,bodyMaximumBytes:t,copy:n,creating:r,onSubmit:i,onDiscard:a}){let o=(0,V.useId)(),[s,c]=(0,V.useState)(``),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(!1),{cardRef:m,position:h}=fn({anchorPoint:e,layoutKey:`${l}:${d}`,preserveVerticalSide:!0}),g=hn.encode(s).length>t,_=s.trim()!==``&&!g&&!r&&!l,v=pn()?n.submitTooltipMacLabel:n.submitTooltipOtherLabel;(0,V.useEffect)(()=>{l?m.current?.querySelector(`.review-confirmation-panel__cancel`)?.focus({preventScroll:!0}):p.current&&m.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),p.current=l},[m,l]);function y(){r||(s.trim()===``?a():u(!0))}async function b(e){e.preventDefault(),_&&(await i(s)||f(!0))}return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-hidden":`true`,className:`review-comment-composer-backdrop`,onClick:y}),(0,U.jsx)(`section`,{ref:m,role:`dialog`,"aria-labelledby":o,className:`review-comment-composer`,style:{left:h.left,top:h.top},children:(0,U.jsxs)(`form`,{className:`review-comment-composer__form`,onSubmit:e=>{b(e)},onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),l?u(!1):y())},children:[(0,U.jsxs)(`header`,{className:`review-comment-composer__header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,id:o,children:n.composerHeading}),(0,U.jsx)(W,{icon:B,"aria-label":n.closeComposerLabel,description:n.closeComposerLabel,variant:`invisible`,type:`button`,disabled:r,onClick:y})]}),(0,U.jsx)(dn,{autoFocus:!0,"aria-label":n.composerLabel,placeholder:n.composerPlaceholder,value:s,rows:4,onValueChange:e=>{c(e),u(!1),f(!1)},onKeyDown:e=>{_&&mn(e.nativeEvent)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),g?(0,U.jsx)(`span`,{role:`alert`,className:`review-comment-composer__error`,children:n.bodyTooLongLabel}):null,d?(0,U.jsx)(me,{variant:`critical`,title:n.createErrorLabel,className:`review-comment-composer__banner`}):null,l?(0,U.jsx)(cn,{heading:n.discardHeading,description:n.discardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,condensed:!0,onCancel:()=>u(!1),onConfirm:a}):(0,U.jsxs)(`footer`,{className:`review-comment-composer__actions`,children:[(0,U.jsx)(H.Button,{type:`button`,size:`small`,disabled:r,onClick:y,children:n.closeComposerLabel}),(0,U.jsx)(H.Tooltip,{text:v,type:`description`,children:(0,U.jsx)(H.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!_,"aria-busy":r,children:n.submitLabel})}),r?(0,U.jsx)(le,{role:`status`,children:n.submittingLabel}):null]})]})})]})}function _n({blockedLabel:e,confirmingDiscard:t,replyDraft:n,replyBodyTooLong:r,replyFailed:i,replyDisabled:a,replying:o,copy:s,onKeepDraft:c,onDiscardDraft:l,onSubmit:u,onDraftChange:d}){let f=(0,V.useRef)(null),p=n.trim()!==``&&!r&&!a&&!o&&!t&&!e,m=pn()?s.replySubmitTooltipMacLabel:s.replySubmitTooltipOtherLabel;return(0,V.useLayoutEffect)(()=>{f.current&&(f.current.style.height=`auto`,f.current.style.height=n?`${Math.min(f.current.scrollHeight,120)}px`:`2.5rem`)},[n]),t?(0,U.jsx)(cn,{heading:s.discardHeading,description:s.threadDiscardPromptLabel,cancelLabel:s.keepLabel,confirmLabel:s.discardButtonLabel,compact:!0,onCancel:c,onConfirm:l}):e?(0,U.jsx)(`span`,{className:`review-thread-reply-form__blocked`,children:e}):(0,U.jsxs)(`form`,{className:`review-thread-reply-form`,onSubmit:e=>{e.preventDefault(),p&&u()},children:[(0,U.jsxs)(`div`,{className:`review-thread-reply-form__composer`,children:[(0,U.jsx)(dn,{ref:f,"aria-label":s.replyLabel,placeholder:s.replyPlaceholder,value:n,rows:1,disabled:a,onValueChange:d,onKeyDown:e=>{p&&mn(e.nativeEvent,{allowPlainEnter:!0})&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),(0,U.jsx)(H.Tooltip,{text:m,type:`description`,children:(0,U.jsx)(`button`,{type:`submit`,className:`review-thread-reply-form__submit`,disabled:!p,"aria-label":s.replySubmitLabel,"aria-busy":o,children:(0,U.jsx)(_,{size:16})})})]}),r?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:s.bodyTooLongLabel}):null,i?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:s.replyErrorLabel}):null,o?(0,U.jsx)(le,{role:`status`,children:s.replyingLabel}):null]})}function vn({comment:e}){let t=e.body??``,n=new Set(e.mentions?.map(e=>e.login.toLowerCase())??[]),r=t.matchAll(/(?({content:e,emoji:bn(e)}));function Sn(e,t=0,n=0){if(t!==0||n!==0)return{x:t,y:n};let r=e.getBoundingClientRect();return{x:r.left+r.width/2,y:r.top+r.height/2}}function Cn({comment:e,mutation:t,actionsDisabled:n,controlsHidden:r=!1,copy:i,onAdd:a,onRemove:o,onBurst:s}){let c=(0,V.useId)(),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(`outside-bottom`),v=t!==null&&(t.kind===`add-reaction`||t.kind===`remove-reaction`)&&t.commentId===e.id,y=e.reactions.flatMap(e=>{if(!m||e.content!==m.content)return[e];let t=e.count+Number(m.viewerHasReacted)-Number(e.viewerHasReacted);return t>0?[{...e,count:t,viewerHasReacted:m.viewerHasReacted}]:[]});m?.viewerHasReacted&&!e.reactions.some(({content:e})=>e===m.content)&&y.push({content:m.content,count:1,viewerHasReacted:!0});async function b(r,i){if(n||t!==null||p.current)return;let c=e.reactions.find(e=>e.content===r)?.viewerHasReacted??!1;p.current=!0,u(!1),h({content:r,viewerHasReacted:!c});try{if(!c){let e=xn.find(e=>e.content===r);e&&s(e.emoji,i.x,i.y)}let e=c?await o(r):await a(r);u(!e)}catch{u(!0)}finally{p.current=!1,h(null)}}function x(e,t){b(e,Sn(t.currentTarget,t.clientX,t.clientY))}let S=(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:g,disabled:n,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-reactions__menu-trigger`,variant:`subtle`,"aria-label":i.addReactionLabel,"aria-describedby":c,"aria-busy":v||m!==null,leadingVisual:(0,U.jsx)(k,{size:16}),onClick:e=>{f(!0);let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0),a=xn.length*36+16;_(rr?`outside-top`:`outside-bottom`)},children:``}),(0,U.jsx)(H.ActionMenu.Overlay,{"aria-label":i.addReactionLabel,children:xn.map(e=>(0,U.jsx)(H.ActionMenu.Item,{value:e.content,leadingVisual:(0,U.jsx)(`span`,{className:`review-comment-reactions__picker-emoji`,children:e.emoji}),onClick:t=>x(e.content,t),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),b(e.content,Sn(t.currentTarget)))},children:i.reactionLabels[e.content]},e.content))})]});return r&&!l?null:(0,U.jsxs)(`div`,{className:`review-comment-reactions__layout`,children:[r?null:(0,U.jsxs)(`div`,{className:`review-comment-reactions`,children:[y.map(e=>{let r=xn.find(({content:t})=>t===e.content);if(!r)return null;let a=(e.count===1?i.reactionCountOneLabel:i.reactionCountOtherLabel).replace(`%{reaction}`,i.reactionLabels[e.content]).replace(`%{count}`,e.count.toString());return(0,U.jsxs)(H.Button,{size:`small`,"aria-label":a,title:a,"aria-pressed":e.viewerHasReacted,disabled:n,"aria-busy":m?.content===e.content||v&&`content`in t&&t.content===e.content,className:e.viewerHasReacted?`review-comment-reaction--selected`:void 0,onClick:t=>x(e.content,t),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,children:r.emoji}),(0,U.jsx)(nt,{"aria-hidden":`true`,children:e.count})]},e.content)}),n?(0,U.jsxs)(`div`,{title:i.addReactionLabel,children:[S,(0,U.jsx)(le,{id:c,children:i.addReactionLabel})]}):(0,U.jsx)(H.Tooltip,{id:c,text:i.addReactionLabel,type:`description`,className:`review-comment-reactions__tooltip${d?` review-comment-reactions__tooltip--suppressed`:``}`,children:(0,U.jsx)(`div`,{onMouseEnter:e=>{e.currentTarget.querySelector(`[aria-expanded="true"]`)||f(!1)},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||f(!1)},children:S})})]}),l?(0,U.jsx)(`span`,{role:`alert`,className:`review-comment-reactions__error`,children:i.reactionErrorLabel}):null]})}function wn({comment:e,mutation:t,copy:n,editing:r,editDraft:i,editBodyTooLong:a,editFailed:o,confirmingEditDiscard:s,saving:c,confirmingDelete:l,deleting:u,deleteFailed:d,actionsDisabled:f,onStartEdit:p,onEditDraftChange:m,onSaveEdit:h,onCancelEdit:g,onKeepEdit:_,onDiscardEdit:v,onRequestDelete:y,onCancelDelete:b,onDelete:x,onAddReaction:S,onRemoveReaction:C,onBurstReaction:w,onMarkUnread:T,markUnreadDisabled:E=!1}){let D=(0,V.useId)(),k=(0,V.useRef)(null),A=(0,V.useRef)(!1),[j,M]=(0,V.useState)(`outside-bottom`),N=e.author.name||`@${e.author.login}`,P=n.commentActionsLabel.replace(`%{author}`,`@${e.author.login}`),F=f&&(!T||E),I=!!(e.body&&e.viewerCanEdit),L=!!(e.body&&e.viewerCanDelete);return(0,V.useEffect)(()=>{s?k.current?.querySelector(`.review-confirmation-panel button`)?.focus({preventScroll:!0}):A.current&&k.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),A.current=s},[s]),(0,U.jsxs)(`article`,{className:`review-thread-message`,"data-review-message-id":e.id,children:[(0,U.jsxs)(`div`,{className:`review-thread-message__header`,children:[(0,U.jsx)(ot,{src:e.author.avatarUrl,size:28}),(0,U.jsxs)(`span`,{className:`review-thread-message__byline`,children:[(0,U.jsx)(`strong`,{className:`review-thread-message__identity`,children:N}),(0,U.jsx)(ht,{value:e.createdAt}),e.editedAt?(0,U.jsx)(`span`,{children:n.editedLabel}):null]}),T||I||L?F?(0,U.jsxs)(`div`,{title:P,children:[(0,U.jsx)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,disabled:!0,children:(0,U.jsx)(H.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":P,"aria-describedby":D,leadingVisual:(0,U.jsx)(re,{size:16}),children:``})}),(0,U.jsx)(le,{id:D,children:P})]}):(0,U.jsx)(H.Tooltip,{id:D,text:P,type:`description`,children:(0,U.jsx)(`div`,{children:(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:j,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":P,"aria-describedby":D,leadingVisual:(0,U.jsx)(re,{size:16}),onClick:e=>{let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0);M(r<(T?128:88)&&i>r?`outside-top`:`outside-bottom`)},children:``}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":P,children:[T?(0,U.jsx)(H.ActionMenu.Item,{value:`mark-unread`,disabled:E,leadingVisual:(0,U.jsx)(ee,{size:16}),onClick:()=>{E||T()},onKeyDown:e=>{!E&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),T())},children:n.markUnreadLabel}):null,I?(0,U.jsx)(H.ActionMenu.Item,{value:`edit`,disabled:f,leadingVisual:(0,U.jsx)(ae,{size:16}),onClick:p,onKeyDown:e=>{!f&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),p())},children:n.editLabel}):null,L&&(T||I)?(0,U.jsx)(`li`,{role:`separator`,className:`review-thread-message__menu-divider`}):null,L?(0,U.jsx)(H.ActionMenu.Item,{value:`delete`,disabled:f||t!==null,className:`review-thread-message__delete-item`,leadingVisual:(0,U.jsx)(O,{size:16}),onClick:y,onKeyDown:e=>{!f&&t===null&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),y())},children:n.deleteLabel}):null]})]})})}):null]}),r?(0,U.jsxs)(`form`,{ref:k,className:`review-thread-message__edit`,onSubmit:e=>{e.preventDefault(),s||h()},children:[(0,U.jsx)(dn,{autoFocus:!0,"aria-label":n.editCommentLabel,value:i,rows:3,onValueChange:m}),a?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.bodyTooLongLabel}):null,o?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.editErrorLabel}):null,s?(0,U.jsx)(cn,{heading:n.discardHeading,description:n.threadDiscardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,compact:!0,onCancel:_,onConfirm:v}):(0,U.jsxs)(`div`,{className:`review-thread-message__actions`,children:[(0,U.jsx)(H.Button,{type:`button`,size:`small`,disabled:c,onClick:g,children:n.cancelEditLabel}),(0,U.jsx)(H.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:i.trim()===``||a||t!==null||c,"aria-busy":c,children:n.saveEditLabel}),c?(0,U.jsx)(le,{role:`status`,children:n.savingEditLabel}):null]})]}):l?(0,U.jsx)(cn,{heading:n.deleteHeading,description:n.deletePromptLabel,errorLabel:d?n.deleteErrorLabel:void 0,cancelLabel:n.cancelEditLabel,confirmLabel:n.confirmDeleteLabel,loading:u,loadingAnnouncement:n.deletingLabel,compact:!0,onCancel:b,onConfirm:x}):(0,U.jsx)(`p`,{className:e.body?`review-thread-message__body`:`review-thread-message__body review-thread-message__body--deleted`,children:e.body?(0,U.jsx)(vn,{comment:e}):n.deletedCommentLabel}),e.body?(0,U.jsx)(Cn,{comment:e,mutation:t,actionsDisabled:f,controlsHidden:r||l,copy:n,onAdd:S,onRemove:C,onBurst:w}):null]})}function Tn(){let e=(0,V.useRef)(null),t=(0,V.useRef)([]),n=(0,V.useRef)(new Map),[r,i]=(0,V.useState)(!1),a=(0,V.useCallback)((e,n,r)=>{if(window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)return;let a=4+Math.floor(Math.random()*5),o=performance.now();for(let i=0;i{if(!r)return;let a=e.current,o=a?.getContext(`2d`);if(!a||!o){console.error(`Emoji reaction burst could not create a canvas context.`),t.current=[];let e=requestAnimationFrame(()=>i(!1));return()=>cancelAnimationFrame(e)}let s=a,c=o,l;function u(){let e=window.devicePixelRatio||1;s.width=Math.round(window.innerWidth*e),s.height=Math.round(window.innerHeight*e),c.setTransform(e,0,0,e,0,0)}function d(e,t){let r=Math.round(t),i=`${e}_${r}`;if(n.current.has(i))return n.current.get(i)??null;let a=document.createElement(`canvas`);a.width=r*2,a.height=r*2;let o=a.getContext(`2d`);return o?(o.font=`${r}px serif`,o.textAlign=`center`,o.textBaseline=`middle`,o.fillText(e,r,r),n.current.set(i,a),a):(console.error(`Emoji reaction burst could not draw an emoji.`),n.current.set(i,null),null)}function f(e){c.clearRect(0,0,window.innerWidth,window.innerHeight);let n=[];for(let r of t.current){if(e10&&(r.opacity-=.04),r.opacity<=0)continue;let t=d(r.emoji,r.size);t&&(c.globalAlpha=r.opacity,c.drawImage(t,r.x-t.width/2,r.y-t.height/2)),n.push(r)}c.globalAlpha=1,t.current=n,n.length>0?l=requestAnimationFrame(f):i(!1)}return u(),window.addEventListener(`resize`,u),l=requestAnimationFrame(f),()=>{cancelAnimationFrame(l),window.removeEventListener(`resize`,u)}},[r]),{burst:a,canvas:r?(0,tt.createPortal)((0,U.jsx)(`canvas`,{ref:e,className:`review-emoji-burst`,"aria-hidden":`true`}),document.body):null}}var En=new TextEncoder;function Dn({thread:e,bodyMaximumBytes:t,mutation:n,onClose:r,onDraftStateChange:i,onReply:a,onEdit:o,onDelete:s,onResolve:c,onReopen:l}){let[u,d]=(0,V.useState)(``),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(``),[v,y]=(0,V.useState)(``),[b,x]=(0,V.useState)(!1),[S,C]=(0,V.useState)(!1),[w,T]=(0,V.useState)(null),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(!1),[A,j]=(0,V.useState)(!1),M=u.trim()!==``||m!==null,ee=En.encode(u).length>t,N=En.encode(g).length>t,P=e.root.resolvedAt!==null,F=e.root.deletedAt!==null||P;(0,V.useEffect)(()=>(i(M),()=>i(!1)),[M,i]);function I(){n||(u.trim()===``&&g===v?r():(C(!1),j(!0)))}function L(){d(``),h(null),_(``),y(``),C(!1),j(!1),i(!1),r()}async function R(){u.trim()===``||ee||n||(await a(u)?(d(``),p(!1)):p(!0))}function z(e){d(e),p(!1),j(!1)}function te(e){e.body&&(h(e.id),_(e.body),y(e.body),x(!1),T(null),D(!1))}function B(e){_(e),x(!1),C(!1),j(!1)}async function ne(e){g.trim()===``||N||n||(await o(e,g)?(h(null),_(``),y(``),C(!1),x(!1)):x(!0))}function re(){g===v?ie():C(!0)}function ie(){h(null),_(``),y(``),x(!1),C(!1),j(!1)}function ae(e){T(e),D(!1)}function oe(){T(null),D(!1)}async function se(e){n||(await s(e)?oe():D(!0))}async function H(){if(n||M)return;let e=P?await l():await c();k(!e)}return{state:{replyDraft:u,replyFailed:f,editingCommentId:m,editDraft:g,editFailed:b,confirmingEditDiscard:S,confirmingDeleteId:w,deleteFailed:E,resolutionFailed:O,confirmingDiscard:A,draftActive:M,replyBodyTooLong:ee,editBodyTooLong:N,resolved:P,replyBlocked:F},actions:{requestDismissal:I,discardAndClose:L,keepDraft:()=>j(!1),submitReply:R,changeReplyDraft:z,startEdit:te,changeEditDraft:B,saveEdit:ne,cancelEdit:re,keepEdit:()=>C(!1),discardEdit:ie,requestDelete:ae,cancelDelete:oe,deleteComment:se,changeResolution:H}}}function On(e){let t=e.closest(`[data-testid="ActionMenu"]`);if(!t)return;let n=e.getBoundingClientRect(),r=e.closest(`.review-shell`)?.getBoundingClientRect(),i=Math.max(0,r?.top??0),a=Math.min(window.innerHeight,r?.bottom??window.innerHeight);t.style.setProperty(`--review-thread-menu-room-top`,`${Math.max(0,n.top-i-8)}px`),t.style.setProperty(`--review-thread-menu-room-bottom`,`${Math.max(0,a-n.bottom-8)}px`)}function kn({thread:e,anchorPoint:t,bodyMaximumBytes:n,mutation:r,copy:i,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d,onAddReaction:f,onRemoveReaction:p,onMarkRead:m,onMarkUnread:h}){let g=(0,V.useId)(),_=(0,V.useRef)(null),v=(0,V.useRef)(0),y=(0,V.useRef)(e.root.activityVersion),b=(0,V.useRef)(null),x=(0,V.useRef)(!1),S=(0,V.useRef)(!1),C=(0,V.useRef)(!1),[w,T]=(0,V.useState)(!1),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(!1),[A,j]=(0,V.useState)(!1),{burst:M,canvas:ee}=Tn(),{state:N,actions:P}=Dn({thread:e,bodyMaximumBytes:n,mutation:r,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d}),F={x:12,y:12},I=[e.root,...e.replies],{cardRef:L,position:R}=fn({anchorPoint:t??F,...t?{anchorSelector:`[data-review-thread-id="${e.root.id}"]`,anchorRectangle:{x:t.x-16,y:t.y-16,width:32,height:32}}:{},layoutKey:[N.confirmingDiscard,N.confirmingEditDiscard,N.replyFailed,N.editFailed,N.deleteFailed,N.resolutionFailed,N.editingCommentId,N.confirmingDeleteId,N.resolved,w,O,e.replies.length,e.participants.length,I.map(e=>e.reactions.length).join(`,`)].join(`:`)}),z={"--review-thread-left":`${R.left}px`,"--review-thread-top":`${R.top}px`},te=N.replyBlocked?e.root.deletedAt?i.deletedReplyBlockedLabel:e.root.resolvedBy?i.resolvedByLabel.replace(`%{author}`,e.root.resolvedBy.name||`@${e.root.resolvedBy.login}`):i.resolvedReplyBlockedLabel:null,ne=(0,V.useCallback)(()=>{L.current?.querySelector(`.review-thread-conversation__close`)?.focus({preventScroll:!0})},[L]);(0,V.useEffect)(()=>{if(N.confirmingDiscard)L.current?.querySelector(`.review-thread-conversation__footer button`)?.focus({preventScroll:!0});else if(C.current){let e=N.editingCommentId===null?`.review-thread-reply-form textarea`:`.review-thread-message__edit textarea`;L.current?.querySelector(e)?.focus({preventScroll:!0})}C.current=N.confirmingDiscard},[L,N.confirmingDiscard,N.editingCommentId]),(0,V.useEffect)(()=>{let e=document.activeElement;return _.current=e instanceof HTMLElement?e:null,ne(),()=>{_.current?.isConnected&&_.current.focus()}},[ne]),(0,V.useEffect)(()=>{let t=y.current;e.unread&&b.current!==t&&(b.current=t,x.current=!0,D(!0),m(t).then(e=>T(!e)).catch(()=>T(!0)).finally(()=>{x.current=!1,D(!1)}))},[m,e.unread]);async function re(){if(!(x.current||S.current||r!==null)){b.current=y.current,S.current=!0,j(!0),k(!1);try{let e=await h();k(!e),e&&T(!1)}catch{k(!0)}finally{S.current=!1,j(!1)}}}return(0,V.useEffect)(()=>{function e(){N.confirmingDiscard?P.keepDraft():N.confirmingEditDiscard?P.keepEdit():P.requestDismissal()}function t(t){t.key!==`Escape`||t.defaultPrevented||t.isComposing||L.current?.querySelector(`[role="menu"]`)||t.target instanceof Element&&t.target.closest(`[role="menu"], [role="dialog"], dialog`)||(t.preventDefault(),e())}function n(){let t=document.activeElement;L.current?.querySelector(`[role="menu"]`)||t instanceof Element&&(t.closest(`[role="menu"]`)||t.closest(`[role="dialog"], dialog`)&&!L.current?.contains(t))||e()}return document.addEventListener(`keydown`,t),window.addEventListener(`replica:review-dismiss`,n),()=>{document.removeEventListener(`keydown`,t),window.removeEventListener(`replica:review-dismiss`,n)}},[P,L,N.confirmingDiscard,N.confirmingEditDiscard]),(0,U.jsxs)(`section`,{ref:L,role:`dialog`,"aria-labelledby":g,className:`review-thread-conversation${t?` review-thread-conversation--anchored`:` review-thread-conversation--docked`}`,style:z,onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||e.nativeEvent.isComposing||e.target instanceof Element&&e.target.closest(`[role="menu"]`)||(e.preventDefault(),N.confirmingDiscard?P.keepDraft():N.confirmingEditDiscard?P.keepEdit():P.requestDismissal())},children:[(0,U.jsxs)(`div`,{className:`review-thread-conversation__layout`,children:[(0,U.jsxs)(`header`,{className:`review-thread-conversation__header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,id:g,children:i.threadHeading}),(0,U.jsx)(H.Button,{size:`small`,disabled:N.draftActive||r!==null,"aria-busy":r!==null&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`),onClick:()=>{P.changeResolution()},children:N.resolved?i.reopenLabel:i.resolveLabel}),r&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`)?(0,U.jsx)(le,{role:`status`,children:N.resolved?i.reopeningLabel:i.resolvingLabel}):null,(0,U.jsx)(W,{icon:B,"aria-label":i.backToCommentsLabel,title:i.backToCommentsLabel,variant:`invisible`,className:`review-thread-conversation__close`,onClick:P.requestDismissal})]}),N.resolutionFailed?(0,U.jsx)(me,{variant:`critical`,title:i.resolutionErrorLabel,className:`review-thread-conversation__banner`}):null,w?(0,U.jsx)(me,{variant:`critical`,title:i.readErrorLabel,className:`review-thread-conversation__banner`}):null,O?(0,U.jsx)(me,{variant:`critical`,title:i.markUnreadErrorLabel,className:`review-thread-conversation__banner`}):null,(0,U.jsx)(`div`,{className:`review-thread-conversation__messages`,onClickCapture:e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`button[data-testid="ActionMenu-button"]`);t&&e.currentTarget.contains(t)&&(v.current=e.currentTarget.scrollTop,On(t))},onScroll:e=>{let t=e.currentTarget.scrollTop,n=t-v.current;if(v.current=t,n===0)return;let r=e.currentTarget.getBoundingClientRect();e.currentTarget.querySelectorAll(`[role="menu"]`).forEach(e=>{let t=e.closest(`[data-testid="ActionMenu"]`)?.querySelector(`button[data-testid="ActionMenu-button"]`);if(!t)return;let i=t.getBoundingClientRect();if(r.height>0&&(i.bottom<=r.top||i.top>=r.bottom)){let n=e.contains(document.activeElement);t.click(),n&&ne();return}let a=Number.parseFloat(e.style.top);Number.isFinite(a)&&(e.style.top=`${a-n}px`),On(t)})},children:I.map(e=>(0,U.jsx)(wn,{comment:e,mutation:r,copy:i,editing:N.editingCommentId===e.id,editDraft:N.editingCommentId===e.id?N.editDraft:``,editBodyTooLong:N.editingCommentId===e.id&&N.editBodyTooLong,editFailed:N.editingCommentId===e.id&&N.editFailed,confirmingEditDiscard:N.editingCommentId===e.id&&N.confirmingEditDiscard,saving:r?.kind===`edit`&&r.commentId===e.id,confirmingDelete:N.confirmingDeleteId===e.id,deleting:r?.kind===`delete`&&r.commentId===e.id,deleteFailed:N.confirmingDeleteId===e.id&&N.deleteFailed,actionsDisabled:r!==null&&r.kind!==`add-reaction`&&r.kind!==`remove-reaction`||N.confirmingDiscard||N.confirmingDeleteId!==null||N.replyDraft.trim()!==``||N.editingCommentId!==null&&N.editingCommentId!==e.id,onStartEdit:()=>P.startEdit(e),onEditDraftChange:P.changeEditDraft,onSaveEdit:()=>{P.saveEdit(e.id)},onCancelEdit:P.cancelEdit,onKeepEdit:P.keepEdit,onDiscardEdit:P.discardEdit,onRequestDelete:()=>P.requestDelete(e.id),onCancelDelete:P.cancelDelete,onDelete:()=>{P.deleteComment(e.id)},onAddReaction:t=>f(e.id,t),onRemoveReaction:t=>p(e.id,t),onBurstReaction:M,onMarkUnread:e.kind===`root`?()=>void re():void 0,markUnreadDisabled:E||A||r!==null},e.id))}),(0,U.jsx)(`div`,{className:`review-thread-conversation__footer${te&&!N.confirmingDiscard?` review-thread-conversation__footer--blocked`:``}`,children:(0,U.jsx)(_n,{blockedLabel:te,confirmingDiscard:N.confirmingDiscard,replyDraft:N.replyDraft,replyBodyTooLong:N.replyBodyTooLong,replyFailed:N.replyFailed,replyDisabled:r!==null||N.editingCommentId!==null,replying:r?.kind===`reply`&&r.commentId===e.root.id,copy:i,onKeepDraft:P.keepDraft,onDiscardDraft:P.discardAndClose,onSubmit:()=>{P.submitReply()},onDraftChange:P.changeReplyDraft})})]}),ee]})}function An({selectionNotice:e,rateLimitNotice:t,composer:n,conversation:r}){return(0,U.jsxs)(U.Fragment,{children:[e||t?(0,U.jsxs)(`div`,{className:`canvas-selection-notice`,role:`alert`,children:[e?(0,U.jsx)(`div`,{children:e}):null,t?(0,U.jsx)(`div`,{children:t}):null]}):null,n?(0,U.jsx)(`div`,{className:`canvas-composer-shell`,children:(0,U.jsx)(gn,{...n})}):null,r?(0,U.jsx)(`div`,{className:`canvas-conversation-shell`,children:(0,U.jsx)(kn,{...r},r.thread.root.id)}):null]})}function jn({identity:e,enabled:t,ready:n,bridgeProblem:r,token:i}){let[a,o]=(0,V.useState)(``),[s,c]=(0,V.useState)(!1),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(e);(0,V.useLayoutEffect)(()=>(p.current=e,()=>{p.current=``}),[e]),(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{o(``),c(!1),u(!1),f(!1)},0);return()=>{window.clearTimeout(e)}},[e,t]);async function m(){let t=e;o(``),c(!0);try{await $(`/api/commenting/fix`,i,{method:`POST`}),p.current===t&&f(!0)}catch(e){p.current===t&&o(e instanceof Error?e.message:String(e))}finally{p.current===t&&c(!1)}}return{visible:t&&!n&&!l&&!!r,error:a,busy:s,requested:d,onFix:()=>void m(),onDismiss:()=>u(!0)}}function Mn({preference:e,disabled:t=!1}){let n=(0,V.useId)(),r=(0,V.useId)(),i=(0,V.useId)(),a=(0,V.useId)();return(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":n,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:n,children:K.settings}),(0,U.jsxs)(`div`,{className:`canvas-publish-settings__option`,children:[(0,U.jsx)(`label`,{id:r,htmlFor:i,children:K.alwaysCommit}),(0,U.jsx)(Z,{className:`canvas-publish-settings__toggle`,id:i,"aria-labelledby":r,"aria-describedby":e.error?a:void 0,checked:e.remember===!0,disabled:e.loading||e.remember===null,"aria-disabled":e.saving||t||void 0,onChange:n=>{!e.saving&&!t&&e.save(n)},size:`small`})]}),e.error?(0,U.jsxs)(`div`,{id:a,className:`canvas-publish-settings__error`,children:[(0,U.jsx)(me,{title:e.error,variant:`critical`,layout:`compact`}),(0,U.jsx)(H.Button,{size:`small`,disabled:e.loading||e.saving,onClick:()=>void e.retry(),children:K.retrySettings})]}):null]})}function Nn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pn(e){return!Nn(e)||typeof e.pathname!=`string`||typeof e.search!=`string`||typeof e.hash!=`string`?null:{pathname:e.pathname,search:e.search,hash:e.hash}}function Fn({config:e,frameRef:t,onRouteChange:n,status:r,onStatusChange:i,onSelectHub:o,onConnect:s,onDisconnected:c,connectionButtonRef:l,connecting:u=!1,publication:d,publicationBusy:f=!1,dirty:p=!1,onPublish:m,onRetryPublication:h,publishPreference:g,open:_,onClose:v}){let[y,b]=(0,V.useState)({identity:``,items:[]}),x=r?.prototype?.repositoryId,S=r?.prototype?.id,C=r?.state===`connected`,w=r?.hubOrigin,T=(0,V.useMemo)(()=>({load:async()=>{if(!C||!w)throw Error(G.mentionSuggestionsError);return on.parse(await $(`/api/hub/mention-candidates?repositoryId=${x}&prototypeId=${S}`,e.token)).candidates},copy:{suggestions:G.mentionSuggestions,error:G.mentionSuggestionsError,loading:G.mentionSuggestionsLoading,empty:G.mentionSuggestionsEmpty,retry:bt.retryLabel,limit:G.mentionLimit}}),[e.token,C,w,x,S]),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(yt),[A,j]=(0,V.useState)(!0),[M,ee]=(0,V.useState)(null),[N,P]=(0,V.useState)(null),[F,I]=(0,V.useState)(``),[R,z]=(0,V.useState)(``),[te,B]=(0,V.useState)(``),[ne,re]=(0,V.useState)(!1),[ie,ae]=(0,V.useState)(!1),[oe,se]=(0,V.useState)(!1),[ce,le]=(0,V.useState)(r?.discovery?.mismatch&&r.discovery.origin||r?.hubOrigin||``),[W,ue]=(0,V.useState)(!1),[de,fe]=(0,V.useState)(!1),[pe,K]=(0,V.useState)(``),[he,ge]=(0,V.useState)(``),[_e,ve]=(0,V.useState)(``),[ye,be]=(0,V.useState)(!1),[xe,q]=(0,V.useState)(null),[Se,Ce]=(0,V.useState)(!1),[we,Te]=(0,V.useState)(new Map),[Ee,De]=(0,V.useState)(!1),[Oe,ke]=(0,V.useState)(``),[J,Ae]=(0,V.useState)(null),[X,Me]=(0,V.useState)(null),[Ne,Pe]=(0,V.useState)(null),[Fe,Ie]=(0,V.useState)(!1),[Le,Re]=(0,V.useState)(null),ze=(0,V.useRef)(!1),Be=(0,V.useRef)(0),Ve=(0,V.useRef)(!1),He=(0,V.useRef)(``),Ue=(0,V.useRef)(null),We=(0,V.useRef)(``),Ge=(0,V.useRef)(_),Ke=(0,V.useRef)(void 0),qe=`${r?.hubOrigin??``}/${r?.repository??``}/${r?.branch??``}/${r?.state===`connected`?r.prototype?.id??``:``}`,Je=r?r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``:null,Ye=(0,V.useRef)(Je),Xe=r?.state,Ze=Xe===`unavailable`||Xe===`denied`,Qe=(0,V.useRef)(Xe);(0,V.useEffect)(()=>{if(Je===null||Ye.current===Je)return;let e=window.setTimeout(()=>{le(Je),Ye.current=Je},0);return()=>window.clearTimeout(e)},[Je]),(0,V.useEffect)(()=>{if(!Xe||Qe.current===Xe)return;if(Xe!==`connected`&&Xe!==`undiscovered`){Qe.current=Xe;return}let e=window.setTimeout(()=>{se(!1),Qe.current=Xe},0);return()=>window.clearTimeout(e)},[Xe]);let $e=jn({identity:qe,enabled:r?.repositoryAuthorized===!0,ready:Ee,bridgeProblem:Oe,token:e.token}),et=(0,V.useMemo)(()=>y.identity===qe?y.items:[],[y,qe]),rt=(0,V.useMemo)(()=>St(et),[et]),ot=(0,V.useMemo)(()=>{let e=new Map(rt.flatMap(e=>e.participants.map(e=>[e.login.toLowerCase(),e])));return Array.from(e.values()).sort((e,t)=>(e.name||e.login).localeCompare(t.name||t.login))},[rt]),st=(0,V.useMemo)(()=>{let e=new Map;for(let t of rt){let n=t.root.id,r=we.get(n);if(r)e.set(n,{commentId:n,status:`resolved`,point:r,rect:r.rect});else if(Ee){let r=t.root.anchor.route;e.set(n,{commentId:n,status:M&&(r.pathname!==M.pathname||r.search!==M.search||r.hash!==M.hash)?`route-mismatch`:`missing`})}}return e},[Ee,we,M,rt]),Z=r?.state===`connected`?rt.find(e=>e.root.id===N):null,Q=r?.state===`connected`?r.prototype:null,ut=r?.state===`disconnected`||r?.state===`pairing`||r?.state===`unconfigured`,dt=Q?.build?.author.login,ft=dt&&/^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}(?:\[bot\])?$/i.test(dt)?`https://github.com/${encodeURIComponent(dt)}`:null,pt=Q?.build?.author.name?.trim()||(ft?dt:null)||G.unknownCommitAuthor,mt=Q?.canEdit&&Q.registered,ht=Q?.id,gt=Q?.build??null,xt=(0,V.useMemo)(()=>Q?rt.filter(e=>an(e,{filters:O,viewerLogin:Q.viewerLogin,selectedBuildNumber:gt?.number,route:M})):rt,[gt?.number,O,M,Q,rt]),Ct=xt.length,wt=xt.some(e=>e.unread),Tt=!!(gt&&r?.commitSha&&r.commitSha===gt.commitSha),Et=X!==null||Se||Le!==null,Dt=_&&!E,Ot=typeof document>`u`?null:document.getElementById(`canvas-review-controls`),kt=X?X.kind===`element`?{x:X.rect.x-X.viewport.scrollX+X.rect.width*X.elementOffset.x,y:X.rect.y-X.viewport.scrollY+X.rect.height*X.elementOffset.y}:ct(X,{x:X.rect.x-X.viewport.scrollX,y:X.rect.y-X.viewport.scrollY,width:X.rect.width,height:X.rect.height}).point:null;(0,V.useLayoutEffect)(()=>(We.current=qe,()=>window.clearTimeout(Ke.current)),[qe]),(0,V.useLayoutEffect)(()=>{_&&Ue.current?.focus({preventScroll:!0})},[_]),(0,V.useEffect)(()=>{let e=Ge.current;if(Ge.current=_,!_||e||!E)return;if(Se){v();return}let t=window.setTimeout(()=>{D(!1),P(null)},0);return()=>window.clearTimeout(t)},[E,Se,v,_]),(0,V.useEffect)(()=>{if(!_)return;function e(e){e.key!==`Escape`||e.defaultPrevented||e.target instanceof Element&&e.target.closest(`[role="dialog"], dialog, [role="menu"]`)||(e.preventDefault(),v())}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[_,v]);let At=ye&&xe===qe,jt=JSON.stringify(rt.slice(0,200).map(({root:e})=>({id:e.id,anchor:e.anchor}))),Mt=(0,V.useCallback)(async()=>{if(!ht||Ve.current)return;let t=qe,n=Be.current;re(!0);try{let r=[],i=null;for(let t=0;t<100;t+=1){let n=nn.parse(await $(`/api/hub/comments${i?`?cursor=${encodeURIComponent(i)}`:``}`,e.token));if(r.push(...n.comments),i=n.nextCursor,!i)break;if(t===99)throw Error(`Too many review comment pages.`)}if(We.current!==t||Be.current!==n)return;b({identity:t,items:r}),ae(!1),I(``)}catch(e){We.current===t&&Be.current===n&&(ae(!0),I(e instanceof Error?e.message:String(e)))}finally{We.current===t&&Be.current===n&&re(!1)}},[e.token,ht,qe]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{b({identity:qe,items:[]}),D(!1),k(yt),j(!0),ee(null),P(null),Ce(!1),be(!1),q(null),K(``),ge(``),Re(null),ze.current=!1,Ve.current=!1,Be.current+=1,Te(new Map),De(!1),Ae(null),Me(null),Pe(null),z(``),ae(!1),ht&&Mt()},0);return()=>window.clearTimeout(e)},[qe,ht,Mt]),(0,V.useEffect)(()=>{if(!ht)return;let e=window.setInterval(()=>void Mt(),3e4);return()=>window.clearInterval(e)},[ht,Mt]),(0,V.useEffect)(()=>{if(!ht)return;let t=new AbortController,n,r=5e3;async function i(){let a=Date.now();try{let n=await fetch(`/api/hub/events`,{headers:{"X-Replica-Canvas-Token":e.token},signal:t.signal});if(!n.ok||!n.body)throw Error(`Live review connection unavailable.`);Ie(!1);let r=n.body.getReader(),i=new TextDecoder,a=``;for(;!t.signal.aborted;){let{value:e,done:t}=await r.read();if(t)throw Error(`Live review connection closed.`);a+=i.decode(e,{stream:!0});let n=a.split(`
+import{n as e,t}from"./renderer-rolldown-runtime.js";import{A as n,B as r,C as i,D as a,E as o,F as s,G as c,H as l,I as u,K as d,L as f,M as p,N as m,O as h,P as g,R as _,S as v,T as y,U as b,V as x,W as S,_ as C,a as w,b as T,c as E,d as D,f as O,g as k,h as A,i as j,j as M,k as ee,l as N,m as P,n as F,o as I,p as L,r as R,s as z,t as te,u as B,v as ne,w as re,x as ie,y as ae,z as oe}from"./renderer-vendor.js";var V=e(d(),1),se=S(),H=l(),U=b();function ce({size:e=`medium`,className:t,label:n}){return(0,U.jsx)(`span`,{role:n?`status`:void 0,"aria-label":n,"aria-hidden":!n||void 0,className:`hub-spinner hub-spinner--${e}${t?` ${t}`:``}`})}function W({className:e,...t}){return(0,U.jsx)(`span`,{...t,className:`hub-visually-hidden${e?` ${e}`:``}`})}function G(e){let t=(0,V.useId)(),{as:n,href:r,ref:i,icon:a,description:o,loading:s=!1,size:c=`medium`,variant:l=`default`,className:u,...d}=e,f=`hub-icon-button${c===`small`?` hub-icon-button--small`:``}${l===`invisible`?` hub-icon-button--invisible`:``}${l===`danger`?` hub-icon-button--danger`:``}${u?` ${u}`:``}`,p=l===`invisible`?`subtle`:`secondary`,m=!(!o||d.title||d[`aria-describedby`]||`disabled`in d&&d.disabled),h=[d[`aria-describedby`],o&&!m?t:void 0].filter(Boolean).join(` `)||void 0,g=d.title??(m?void 0:o??d[`aria-label`]),_=o&&!m?(0,U.jsx)(W,{id:t,children:o}):null,v=s?(0,U.jsx)(ce,{decorative:!0,size:`small`}):(0,U.jsx)(a,{size:16}),y=s?!0:d[`aria-busy`];if(n===`a`){let e=i,t=(0,U.jsx)(H.Button,{...d,ref:e,as:`a`,href:r,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,U.jsx)(H.Tooltip,{ref:i,text:o,type:`description`,children:t}):t}let b=(0,U.jsx)(H.Button,{...d,ref:i,type:d.type??`button`,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,U.jsx)(H.Tooltip,{ref:i,text:o,type:`description`,children:b}):b}function le({title:e,closeLabel:t,onClose:n,returnFocusRef:r,descriptionId:i,className:a,children:o}){let s=(0,V.useRef)(null),c=(0,V.useId)();return(0,V.useLayoutEffect)(()=>{let e=s.current,t=r?.current??(document.activeElement instanceof HTMLElement?document.activeElement:null);return e?.showModal(),()=>{e?.close(),t?.focus()}},[r]),(0,U.jsxs)(`dialog`,{ref:s,"aria-labelledby":c,"aria-describedby":i,className:a?`canvas-dialog ${a}`:`canvas-dialog`,onCancel:e=>{e.preventDefault(),n()},onClick:e=>{if(e.target!==e.currentTarget)return;let{left:t,right:r,top:i,bottom:a}=e.currentTarget.getBoundingClientRect();(e.clientXr||e.clientYa)&&n()},children:[(0,U.jsxs)(`header`,{className:`canvas-dialog-header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,id:c,children:e}),(0,U.jsx)(G,{variant:`invisible`,size:`small`,icon:B,"aria-label":t,onClick:n})]}),o]})}var K={localCommentsSaved:`Comments stay on this device until a Build with matching content is published and the canvas syncs them to Hub.`,commentPagesExceeded:`Too many review comment pages.`,commentPreparationFailed:`Hub could not prepare this comment.`,commentRefreshFailed:e=>`The comment was saved, but Hub could not be refreshed: ${e}`,commentLiveUpdatesPaused:`Live updates paused; checking every 30 seconds.`,mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function ue({onClose:e,state:t,titleButtonRef:r}){let[i,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(null),l=t.stats.branchError?void 0:t.stats.branch,d=t.sessionId,f=t.stats.comparison;async function p(e,t){try{await navigator.clipboard.writeText(e),o(t),c(null)}catch{o(null),c(t===`branch`?K.branch:K.sessionId)}}function m(e,t){if(!e)return null;let r=t===`branch`?K.copyBranch:K.copySessionId,a=t===`branch`?K.branchCopied:K.sessionIdCopied;return(0,U.jsx)(H.Button,{type:`button`,className:`canvas-icon-button`,variant:`subtle`,size:`small`,leadingVisual:i===t?(0,U.jsx)(u,{size:16}):(0,U.jsx)(n,{size:16}),"aria-label":i===t?a:r,title:i===t?a:r,onClick:()=>void p(e,t),children:(0,U.jsx)(`span`,{className:`visually-hidden`,children:r})})}return(0,U.jsxs)(le,{title:K.buildDetails,closeLabel:K.closeBuildDetails,className:`build-details-dialog`,returnFocusRef:r,onClose:e,children:[(0,U.jsxs)(`dl`,{className:`build-details-list`,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:K.branch}),(0,U.jsxs)(`dd`,{children:[(0,U.jsx)(a,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`code`,{children:l||t.stats.branchError||K.unavailable}),m(l,`branch`)]})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:K.sessionId}),(0,U.jsxs)(`dd`,{children:[(0,U.jsx)(`code`,{children:d||K.unavailable}),m(d,`sessionId`)]})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:f?.branch?`Behind ${f.branch}${f.source===`local`?` (local)`:``}`:K.comparison}),(0,U.jsx)(`dd`,{children:f?.error||(f?.behind===0?K.upToDate:f?.behind==null?K.unavailable:K.commitsBehind(f.behind))})]})]}),(0,U.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:i===`branch`?`${K.branchCopied}.`:i===`sessionId`?`${K.sessionIdCopied}.`:``}),s?(0,U.jsx)(`span`,{role:`alert`,className:`build-details-copy-error`,children:K.buildDetailsCopyFailed(s)}):null]})}function de({pairing:e}){let[t,r]=(0,V.useState)(`idle`),i=(0,V.useRef)(null);(0,V.useEffect)(()=>{i.current?.querySelector(`a`)?.focus()},[]);async function a(){try{await navigator.clipboard.writeText(e.verificationUrl),r(`copied`)}catch{r(`failed`)}}return(0,U.jsxs)(`section`,{className:`hub-connection-approval`,"aria-label":K.connectionApproval,children:[(0,U.jsxs)(`p`,{role:`status`,children:[K.connectionWaiting,` `,(0,U.jsx)(`strong`,{children:e.userCode}),`.`]}),(0,U.jsxs)(`div`,{ref:i,className:`hub-connection-approval-actions`,role:`group`,"aria-label":K.connectionApproval,children:[(0,U.jsx)(H.Button,{as:`a`,variant:`primary`,size:`medium`,href:e.verificationUrl,target:`_blank`,rel:`noopener noreferrer`,children:K.connectToHub}),(0,U.jsx)(G,{icon:t===`copied`?u:n,size:`medium`,className:`hub-connection-approval-copy`,"aria-label":t===`copied`?K.approvalLinkCopied:K.copyApprovalLink,onClick:()=>void a()})]}),(0,U.jsx)(W,{role:`status`,children:t===`copied`?K.approvalLinkCopied:``}),t===`failed`?(0,U.jsx)(`p`,{role:`alert`,children:K.approvalCopyFailed}):null]})}function fe({status:e,pairing:t,connecting:n,error:r,onConnect:i,onSelectHub:a,onResetHub:o,onClose:s,hubButtonRef:c}){let l=(0,V.useId)(),[u,d]=(0,V.useState)(null),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(!1),[g,_]=(0,V.useState)(!1),[v,y]=(0,V.useState)(!1),[b,x]=(0,V.useState)(``),S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=f||!e?.hubOrigin||u!==null&&!m,T=(0,V.useRef)(w),E=u??e?.hubOrigin??``,D=n||g||v,O=!!t||n;(0,V.useEffect)(()=>{w&&!O?S.current?.focus():T.current&&!O&&C.current?.focus(),T.current=w},[w,O]),(0,V.useEffect)(()=>{if(f||u===null||!m||!e?.hubOrigin)return;let t=window.setTimeout(()=>d(null),0);return()=>window.clearTimeout(t)},[u,f,m,e?.hubOrigin]);async function k(){if(!D){_(!0),x(``);try{await a(E),d(null),p(!1)}catch(e){x(e instanceof Error?e.message:String(e))}finally{_(!1)}}}async function A(){if(!D&&o){y(!0),x(``);try{d(await o()),p(!!e?.hubOrigin)}catch(e){x(e instanceof Error?e.message:String(e))}finally{y(!1)}}}return(0,U.jsxs)(le,{title:K.connectToHub,closeLabel:K.closeConnectionDialog,onClose:s,returnFocusRef:c,children:[(0,U.jsx)(`p`,{children:K.connectionDescription}),b||r?(0,U.jsx)(`p`,{role:`alert`,children:b||r}):null,(0,U.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),!D&&(!O&&w&&(f||e?.hubOrigin)?k():(x(``),e?.hubOrigin||h(!0),i(e?.hubOrigin?void 0:E)))},children:[!O&&(w?(0,U.jsxs)(`div`,{className:`hub-connection-origin-field`,children:[(0,U.jsx)(`label`,{htmlFor:l,children:K.hubUrl}),(0,U.jsxs)(`div`,{className:`hub-connection-origin-input`,children:[(0,U.jsx)(H.TextInput,{ref:S,id:l,type:`url`,value:E,onChange:e=>{h(!1),d(e.target.value)},required:!0,fullWidth:!0,disabled:D,placeholder:`https://hub.example.com`}),o?(0,U.jsx)(G,{icon:L,variant:`invisible`,size:`small`,"aria-label":K.resetHubUrl,disabled:D,"aria-busy":v,onClick:()=>void A()}):null]}),f||e?.hubOrigin?(0,U.jsx)(H.Button,{type:`submit`,variant:`subtle`,size:`small`,disabled:D,children:K.saveHub}):null]}):(0,U.jsxs)(`div`,{className:`hub-connection-origin`,children:[(0,U.jsx)(`a`,{href:e?.hubOrigin&&new URL(e.hubOrigin).origin,target:`_blank`,rel:`noopener noreferrer`,children:e?.hubOrigin}),(0,U.jsx)(G,{ref:C,icon:ae,variant:`invisible`,size:`small`,"aria-label":K.editHubUrl,disabled:D,onClick:()=>{x(``),p(!0),d(e?.hubOrigin??``)}})]})),t?(0,U.jsx)(de,{pairing:t},t.verificationUrl):null,t?null:(0,U.jsx)(H.Button,{type:`submit`,variant:`primary`,disabled:D||!e?.repository||!O&&w&&(f||!!e?.hubOrigin),children:n?K.connectionOpeningBrowser:K.connectToHub})]})]})}function pe({title:e,description:t,children:n,action:r,variant:i,layout:a,onDismiss:o,dismissLabel:c,className:l,...u}){let d=i===`critical`?A:i===`success`?s:i===`info`?y:x;return(0,U.jsxs)(`div`,{...u,role:i===`critical`||i===`warning`?`alert`:`status`,className:`hub-alert hub-alert--${i}${a===`compact`?` hub-alert--compact`:``}${l?` ${l}`:``}`,children:[(0,U.jsx)(d,{className:`hub-alert__icon`,size:20,"aria-hidden":`true`}),(0,U.jsxs)(`div`,{className:`hub-alert__content`,children:[(0,U.jsxs)(H.Text,{as:`p`,size:`100`,className:`hub-alert__message`,children:[(0,U.jsx)(`strong`,{className:`hub-alert__title`,children:e}),t?(0,U.jsx)(`span`,{className:`hub-alert__description`,children:t}):null]}),n]}),r||o?(0,U.jsxs)(`div`,{className:`hub-alert__action`,children:[r,o&&c?(0,U.jsx)(G,{icon:B,"aria-label":c,title:c,variant:`invisible`,size:`small`,onClick:o}):null]}):null]})}var q={title:`Publish uncommitted changes?`,description:`Do you want to commit changes before publishing? Publishing the committed version only excludes your local uncommitted edits.`,checkFailedTitle:`Could not check local changes`,checkFailed:`Git could not check local changes.`,retryCheck:`Retry check`,commit:`Commit changes & publish`,committed:`Publish committed version only`,close:`Close publishing dialog`,changedFiles:`Uncommitted changes`,moreChanges:e=>`${e} more`,localSkills:e=>`${e} local agent skill ${e===1?`file stays`:`files stay`} uncommitted.`,selection:`Copilot commits only changes related to this prototype task and asks if it cannot tell which changes belong.`,remember:`Always commit changes before publishing for this prototype`,settings:`Settings`,alwaysCommit:`Always commit changes before publishing`,retrySettings:`Retry settings`,preferenceTargetChanged:`The checkout changed. Refresh Settings and try again.`,invalidPreference:`Publishing settings returned an invalid response. Retry settings.`};function me({busy:e,error:t,changes:n,checkError:r,remembered:i,returnFocusRef:a,onClose:o,onChoose:s,onRetry:c}){let[l,u]=(0,V.useState)(i),d=(0,V.useId)(),f=(0,V.useId)();return(0,U.jsx)(le,{title:r?q.checkFailedTitle:q.title,closeLabel:q.close,descriptionId:r?void 0:d,returnFocusRef:a,onClose:()=>{e||o()},className:`publish-changes-dialog`,children:(0,U.jsxs)(H.Stack,{gap:`normal`,padding:`none`,children:[r?null:(0,U.jsx)(`p`,{id:d,children:q.description}),r?(0,U.jsx)(pe,{title:r,variant:`critical`,layout:`compact`}):null,n?.files.total?(0,U.jsx)(`section`,{"aria-label":q.changedFiles,children:(0,U.jsxs)(`ul`,{className:`publish-changes-dialog__files`,children:[n.files.paths.map(e=>(0,U.jsx)(`li`,{children:(0,U.jsx)(`code`,{children:e})},e)),n.files.total>n.files.paths.length?(0,U.jsx)(`li`,{children:q.moreChanges(n.files.total-n.files.paths.length)}):null]})}):null,r?null:(0,U.jsxs)(`p`,{children:[n?.localSkills.total?`${q.localSkills(n.localSkills.total)} `:null,q.selection]}),r?null:(0,U.jsxs)(H.FormControl,{id:f,fullWidth:!0,children:[(0,U.jsx)(H.Checkbox,{checked:l,disabled:e,onChange:e=>u(e.target.checked)}),(0,U.jsx)(H.FormControl.Label,{children:q.remember})]}),t?(0,U.jsx)(pe,{title:t,variant:`critical`,layout:`compact`}):null,(0,U.jsxs)(`footer`,{className:`publish-changes-dialog__actions`,children:[r?(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:c,children:q.retryCheck}):null,r?null:(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:()=>s(`commit-changes`,l),children:q.commit}),(0,U.jsx)(H.Button,{size:`small`,disabled:e,onClick:()=>s(`committed-only`,!1),children:q.committed})]})]})})}function he({value:e,label:t,copyLabel:r,copiedLabel:i,copyErrorLabel:a,compact:o=!1}){let[s,c]=(0,V.useState)(null),l=s?.value===e?s.status:null,u=l===`copied`?i:r;async function d(){try{await navigator.clipboard.writeText(e),c({value:e,status:`copied`})}catch{c({value:e,status:`failed`})}}return(0,U.jsxs)(`div`,{className:`copyable-text-input${o?` copyable-text-input--compact`:``}`,children:[(0,U.jsxs)(`div`,{className:`copyable-text-input__control`,children:[o?(0,U.jsx)(`input`,{type:`text`,value:e,"aria-label":t,readOnly:!0,className:`copyable-text-input__input`}):(0,U.jsx)(H.TextInput,{value:e,"aria-label":t,readOnly:!0,fullWidth:!0,className:`copyable-text-input__input`}),(0,U.jsx)(G,{icon:n,"aria-label":u,description:o?u:void 0,title:o?void 0:u,variant:`invisible`,size:`small`,className:`copyable-text-input__button`,onClick:()=>void d()})]}),(0,U.jsx)(W,{"aria-live":`polite`,"aria-atomic":`true`,children:l===`copied`?i:``}),l===`failed`?(0,U.jsx)(`span`,{role:`alert`,className:`copyable-text-input__error`,children:a}):null]})}function ge({children:e}){return(0,U.jsx)(`div`,{className:`prototype-workspace__body`,children:e})}function _e({title:e,description:t,trailing:n,headingAs:r=`h2`,headingRef:i}){return(0,U.jsxs)(`header`,{className:`hub-content-page-header`,children:[(0,U.jsxs)(`div`,{className:`hub-content-page-header__top`,children:[(0,U.jsx)(H.Heading,{as:r,size:`4`,ref:i,tabIndex:i?-1:void 0,children:e}),n]}),t?(0,U.jsx)(H.Text,{as:`p`,className:`hub-content-page-header__description`,children:t}):null]})}function ve({labels:e,headingRef:t,headingTrailing:n,feedback:r,form:i,formUnavailable:a,links:o,hasLinks:s,showEmpty:c=!0,listRef:l,listBusy:u,beforeLinks:d,afterLinks:f}){return(0,U.jsxs)(H.Stack,{gap:`normal`,children:[(0,U.jsx)(_e,{title:e.heading,description:e.description,headingRef:t,trailing:n}),r,i||(a===void 0?(0,U.jsxs)(`section`,{className:`share-links__empty`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.noBuildHeading}),(0,U.jsx)(H.Text,{as:`p`,className:`share-links__empty-description`,children:e.noBuildLabel})]}):a),d,s?(0,U.jsx)(`ul`,{className:`share-links__list`,ref:l,"aria-busy":u,children:o}):c?(0,U.jsxs)(`section`,{className:`share-links__empty`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.emptyHeading}),(0,U.jsx)(H.Text,{as:`p`,className:`share-links__empty-description`,children:e.emptyLabel})]}):null,f]})}function ye({shareLink:e,className:t,copiedLabel:n,copyErrorLabel:r,copyLabel:i,urlLabel:a,unavailableLabel:o,highlighted:s,children:c}){return(0,U.jsx)(`li`,{"data-share-id":e.id,className:`share-link-item${s?` share-link-item--created`:``}${t?` ${t}`:``}`,children:(0,U.jsxs)(`div`,{className:`share-link-item__layout`,children:[(0,U.jsxs)(`div`,{className:`share-link-item__details`,children:[(0,U.jsx)(`h3`,{children:e.label}),(0,U.jsxs)(`span`,{className:`share-link-item__metadata`,children:[e.buildLabel,e.createdLabel?(0,U.jsxs)(U.Fragment,{children:[` · `,(0,U.jsx)(`time`,{dateTime:e.createdAt,children:e.createdLabel})]}):null,` · `,e.expiresAt?(0,U.jsx)(`time`,{dateTime:e.expiresAt,children:e.expiresLabel}):e.expiresLabel]})]}),(0,U.jsxs)(`div`,{className:`share-link-item__actions`,children:[o?(0,U.jsx)(`p`,{children:o}):(0,U.jsx)(he,{value:e.url,label:a||e.label,copyLabel:i,copiedLabel:n,copyErrorLabel:r}),c]})]})})}function be({data:e,action:t,hiddenFields:n,details:r,afterFields:a,onSubmit:o,label:s,onLabelChange:c,expiration:l,onExpirationChange:u,disabled:d,fieldsDisabled:f,busy:p,error:m}){let h=(0,V.useId)(),g=(0,V.useId)();return(0,U.jsxs)(`div`,{className:`share-links-form`,children:[e.buildLabel?(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.buildLabel}):null,r,(0,U.jsxs)(`form`,{action:t,method:`post`,onSubmit:o,"aria-busy":p,className:`share-links__form`,children:[n,(0,U.jsxs)(`div`,{className:`share-links__form-row`,children:[(0,U.jsxs)(H.FormControl,{id:h,required:!0,fullWidth:!0,className:`share-links__field`,children:[(0,U.jsx)(H.FormControl.Label,{children:e.labelLabel}),(0,U.jsx)(H.TextInput,{"aria-label":e.labelLabel,"aria-invalid":!!m,name:`share_link[label]`,placeholder:e.labelPlaceholder,maxLength:e.labelMaximumBytes,value:s,onChange:c,disabled:f,fullWidth:!0}),m?(0,U.jsx)(H.FormControl.Validation,{validationStatus:`error`,className:`share-links__validation`,children:m}):null]}),m?(0,U.jsx)(W,{role:`alert`,children:m}):null,(0,U.jsxs)(H.FormControl,{id:g,fullWidth:!0,className:`share-links__field`,children:[(0,U.jsx)(H.FormControl.Label,{children:e.expirationLabel}),(0,U.jsx)(H.Select,{"aria-label":e.expirationLabel,name:`share_link[expiration]`,defaultValue:l===void 0?e.expirationOptions.find(e=>e.value===`seven_days`)?.value??e.expirationOptions[0]?.value:void 0,value:l,onChange:u,disabled:f,fullWidth:!0,children:e.expirationOptions.map(e=>(0,U.jsx)(H.Select.Option,{value:e.value,children:e.label},e.value))})]}),(0,U.jsx)(`div`,{className:`share-links__form-actions`,children:(0,U.jsx)(H.Button,{type:`submit`,variant:`primary`,leadingVisual:i,disabled:d,children:e.submitLabel})})]}),a?(0,U.jsx)(`div`,{className:`share-links__form-options`,children:a}):null]})]})}var J={title:`Share prototype`,internal:`Internal prototype link`,internalDescription:`Requires GitHub sign-in and repository access.`,internalUnavailable:`Internal prototype link unavailable.`,internalCopy:`Copy internal prototype link`,internalOpen:`Open internal prototype link`,public:`Public share links`,permissionUnknown:`Hub has not confirmed permission to manage public share links.`,group:`Publish and share`,back:`Back to preview`,warning:`Anyone with a link can view its Build without signing in. The prototype may expose sensitive or customer information. Check its content before sharing. Local and uncommitted changes are not included.`,target:`New links share this published Build:`,oldBuild:`This is the last published Build, not the current local preview.`,includeControlSettings:`Include current control settings`,controlSettingsDescription:`Adds settings for all configured pages to the links you copy or open. Saved share links stay unchanged.`,controlSettingsWarning:`Settings for controls that have not been published will not take effect for shared links.`,controlSettingsWarningTitle:`Local changes are not in the shared Build`,label:`Label`,labelPlaceholder:`Usability review`,labelInvalid:`Enter a label containing no more than 100 UTF-8 bytes.`,expiry:`Expires after`,expirations:[{value:`one_day`,label:`1 day`},{value:`seven_days`,label:`7 days`},{value:`thirty_days`,label:`30 days`},{value:`never`,label:`Never`}],create:`Create share link`,creating:`Working...`,active:`Active share links`,empty:`Create a link when someone needs signed-out access.`,emptyHeading:`No active share links`,loading:`Loading share links...`,refresh:`Refresh links`,authorize:`Verify with GitHub`,authorizationRetry:`Complete authorization in your browser, then refresh links and submit the action again. No action is replayed automatically.`,paginationFailed:`Hub returned a repeated share-link page. Refresh links to try again.`,noBuild:`A successful published Build is required before creating a share link.`,noBuildHeading:`No successful Build`,build:e=>`Build ${e}`,buildDetails:(e,t,n)=>`Commit: ${e}\nAuthor: @${t}\nPublished: ${n}`,denied:`Managing public share links requires repository admin access or authorship of any successful Build for this Prototype, with current read access. Write access alone is not sufficient.`,disabled:`Public sharing is disabled for this Hub. A Hub administrator must explicitly enable it. Previously revoked links never return.`,disconnected:`Connect to Hub before managing share links.`,connect:`Connect to Hub`,unavailable:`Hub is unavailable. Restore the connection and reopen Share prototype.`,branch:`Open a named prototype branch discovered by Hub before sharing.`,stale:`Hub or checkout changed. Return to preview and reopen Share prototype.`,deleted:`Share link deleted. Its public URL no longer works.`,never:`Never expires`,expires:e=>`Expires ${e}`,createdBy:(e,t)=>`Created by @${e} ${t}`,copy:(e,t)=>`Copy ${e}, Build #${t}`,copied:`Link copied`,copyError:`Could not copy the link. Select the URL and copy it manually.`,open:(e,t)=>`Open ${e}, Build #${t}`,delete:(e,t)=>`Delete ${e}, Build #${t}`,deletePrompt:e=>`Delete "${e}"? Anyone with this link will lose access to its Build.`,deletedError:`Could not delete the link.`,failed:`The sharing request failed.`,unknown:`The sharing request may have completed. Refresh active links before trying again. A matching label does not prove which request created a link.`,expired:`This link has expired. Refresh links.`};function xe({included:e,onChange:t,publishedVersionDiffers:n,disabled:r=!1,error:i,copy:a}){let o=(0,V.useId)(),s=e&&n;return(0,U.jsxs)(`div`,{className:`share-control-settings`,children:[(0,U.jsxs)(H.FormControl,{id:o,fullWidth:!0,children:[(0,U.jsx)(H.Checkbox,{checked:e,onChange:e=>t(e.target.checked),disabled:r}),(0,U.jsx)(H.FormControl.Label,{children:a?.label??J.includeControlSettings}),(0,U.jsx)(H.FormControl.Hint,{className:`share-control-settings__hint`,children:(0,U.jsx)(`span`,{className:`share-control-settings__description`,children:a?.description??J.controlSettingsDescription})})]}),i?(0,U.jsx)(pe,{title:i,variant:`critical`,layout:`compact`}):null,s?(0,U.jsx)(pe,{title:J.controlSettingsWarningTitle,description:J.controlSettingsWarning,variant:`warning`,layout:`compact`,className:`share-control-settings__warning`}):null]})}function Se(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var Ce=`replica:controls:url`,we=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function Te(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!Se(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!we.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function Ee(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=we.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!Se({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{Te(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function De(e,t){let n=new URL(e,window.location.href),r=Ee(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(Te(r.scopes)))n.searchParams.set(e,t);return n.toString()}function Oe({state:e,buildDetails:t,currentCommit:n,hasLocalChanges:r=!1,shareButtonRef:i,onClose:a,onConnect:o,onRefresh:s,onCreate:c,onDelete:l,onOpen:u,controlSettings:d,onAuthorize:f}){let[p,m]=(0,V.useState)(``),[h,g]=(0,V.useState)(`seven_days`),[_,y]=(0,V.useState)(``),[b,x]=(0,V.useState)(Date.now),S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=(0,V.useRef)(null),T=e.context?.prototype,E=J.expirations.filter(e=>!T?.shareLinkExpirationOptions||T.shareLinkExpirationOptions.includes(e.value)),D=E.some(e=>e.value===h)?h:E.find(e=>e.value===`seven_days`)?.value??E[0]?.value??``,k=T?.published?T.build:null,A=k?.url,j=A&&URL.canParse(A)?new URL(A):null,M=j&&j.origin===e.context?.hubOrigin&&[`http:`,`https:`].includes(j.protocol)&&!j.username&&!j.password?A:null,ee=!!(k&&n&&n!==k.commitSha)||r,N=T?.canManageShareLinks===!0,P=!e.sharingDisabled&&T?.publicSharingEnabled!==!1,F=e.busy||e.loading||e.stale||!N||!P,I=d?.included?d.query??``:``,L=!!d?.blocked;function R(e){return De(e,I)}let z=P&&e.stale&&!e.loading&&e.created&&!e.links.some(t=>t.id===e.created?.id)?e.created:null;(0,V.useEffect)(()=>{let e=i.current;C.current?.focus();let t=window.setInterval(()=>x(Date.now()),1e4);return()=>{window.clearInterval(t),e?.focus()}},[i]),(0,V.useEffect)(()=>{if(e.busy||!w.current)return;let t=w.current;w.current=null,(t.map(e=>S.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||C.current)?.focus()},[e.busy,e.links]);async function te(t,n){if(!window.confirm(J.deletePrompt(n)))return;let r=e.links.findIndex(e=>e.id===t),i=[...e.links.slice(r+1),...e.links.slice(0,r).reverse()].map(e=>e.id);await l(t)&&(w.current=i,(i.map(e=>S.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||C.current)?.focus())}function ne(e){return new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}return(0,U.jsx)(`main`,{className:`canvas-share-page`,"aria-label":J.title,children:(0,U.jsx)(ge,{children:(0,U.jsx)(ve,{labels:{heading:J.title,noBuildHeading:J.noBuildHeading,noBuildLabel:J.noBuild,emptyHeading:J.emptyHeading,emptyLabel:J.empty},headingRef:C,headingTrailing:(0,U.jsx)(`div`,{className:`canvas-share-close`,children:(0,U.jsx)(G,{icon:B,variant:`invisible`,"aria-label":J.back,description:J.back,onClick:a})}),feedback:(0,U.jsxs)(U.Fragment,{children:[d?(0,U.jsx)(xe,{included:d.included,onChange:d.onChange,publishedVersionDiffers:ee,disabled:e.busy||d.pending,error:d.error}):null,(0,U.jsxs)(`section`,{className:`canvas-share-internal`,"aria-label":J.internal,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:J.internal}),(0,U.jsx)(`p`,{children:J.internalDescription}),M&&!L?(0,U.jsxs)(`div`,{className:`share-link-item__actions canvas-share-internal-actions`,children:[(0,U.jsx)(he,{value:R(M),label:J.internal,copyLabel:J.internalCopy,copiedLabel:J.copied,copyErrorLabel:J.copyError}),(0,U.jsx)(G,{as:`a`,href:R(M),target:`_blank`,rel:`noopener`,icon:v,"aria-label":J.internalOpen,description:J.internalOpen})]}):M?null:(0,U.jsx)(`p`,{role:`status`,children:J.internalUnavailable})]}),(0,U.jsxs)(`div`,{className:`canvas-share-public-header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:J.public}),(0,U.jsx)(`p`,{children:J.warning})]}),T&&!N?(0,U.jsx)(`p`,{role:`status`,children:T.canManageShareLinks===!1?J.denied:J.permissionUnknown}):null,P?null:(0,U.jsx)(`p`,{role:`status`,children:J.disabled}),e.error?(0,U.jsx)(pe,{title:e.error,variant:`critical`,layout:`compact`}):null,e.authorization&&f?(0,U.jsx)(H.Button,{variant:`secondary`,size:`small`,onClick:f,disabled:e.busy,children:J.authorize}):null,o&&!e.context?(0,U.jsx)(H.Button,{variant:`secondary`,size:`small`,onClick:o,children:J.connect}):null]}),form:k&&N&&P?(0,U.jsx)(be,{data:{buildLabel:null,labelLabel:J.label,labelPlaceholder:J.labelPlaceholder,labelMaximumBytes:100,expirationLabel:J.expiry,expirationOptions:E,submitLabel:e.busy?J.creating:J.create},label:p,onLabelChange:e=>{m(e.target.value),y(``)},expiration:D,onExpirationChange:e=>g(e.target.value),onSubmit:e=>{e.preventDefault(),!p.trim()||new TextEncoder().encode(p.trim()).length>100?y(J.labelInvalid):(y(``),c(p,D))},disabled:F,fieldsDisabled:e.busy,busy:e.busy,error:_,details:(0,U.jsxs)(`div`,{className:`canvas-share-build-details`,children:[(0,U.jsxs)(`p`,{children:[J.target,` `,(0,U.jsx)(`strong`,{children:J.build(k.number)}),` - `,(0,U.jsx)(`code`,{children:k.commitSha.slice(0,7)}),` - `,(0,U.jsx)(`time`,{dateTime:k.publishedAt,children:ne(k.publishedAt)})]}),ee?(0,U.jsx)(`p`,{children:J.oldBuild}):null]})}):null,formUnavailable:N&&P&&!k?void 0:null,beforeLinks:(0,U.jsxs)(U.Fragment,{children:[e.notice?(0,U.jsx)(`p`,{role:`status`,children:e.notice}):null,z&&!L?(0,U.jsx)(he,{value:R(z.url),label:z.label,copyLabel:J.copy(z.label,z.buildNumber),copiedLabel:J.copied,copyErrorLabel:J.copyError}):null,e.loading?(0,U.jsx)(`p`,{role:`status`,children:J.loading}):null]}),hasLinks:N&&P&&!L&&e.links.length>0,showEmpty:N&&P&&!L&&!e.loading&&!e.stale,listRef:S,listBusy:e.loading,links:(!N||!P||L?[]:e.links).map(e=>{let n=e.expiresAt!==null&&Date.parse(e.expiresAt)<=b,r=t?.[e.buildNumber];return(0,U.jsxs)(ye,{className:k&&e.buildNumberI?u(e.id,I):u(e.id)}),(0,U.jsx)(G,{icon:O,variant:`danger`,"aria-label":J.delete(e.label,e.buildNumber),description:J.delete(e.label,e.buildNumber),disabled:F||n,onClick:()=>void te(e.id,e.label)})]},e.id)}),afterLinks:(0,U.jsx)(`div`,{className:`canvas-share-list-actions`,children:N||!e.context&&!o?(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:s,disabled:e.busy||e.loading,children:J.refresh}):null})})})})}var Y={checking:`Checking sharing readiness`,checkingDetail:`Checking Hub for a successful published Build and repository access.`,connect:`Connect before sharing`,connectDetail:`Connect to Hub before sharing this prototype.`,connectAction:`Connect to Hub`,publish:`Publish before sharing`,publishDetail:`To create a share link, publish this prototype to Hub first. Your local preview stays private.`,publishPermissionUnverified:`This Hub has not confirmed publishing permission. Copilot will check access when publishing and report any permission errors.`,preparing:`Preparing your prototype`,ready:`Ready to share`,readyDetail:`Your prototype is ready to share.`,manage:`Share prototype`,unavailable:`Sharing status unavailable`,unavailableDetail:`Hub could not verify sharing readiness. Retry before continuing.`,permissionUnknown:`This Hub cannot verify sharing or publishing permission. Update Hub and retry.`,restricted:`Sharing unavailable`,publishDenied:`Publishing requires repository write access. Ask a prototype author to publish a Build.`,local:`Local development prototypes cannot create public share links.`,changed:`Sharing target changed`,changedDetail:`The repository, branch, or Hub changed. Close this dialog and reopen Share for the intended prototype.`,boundary:`Internal review requires repository access. Public share links let anyone view a published Build, not your local preview.`,close:`Close sharing readiness`},ke=`Branch not eligible for Hub registration`,X={heading:`Branch publication`,checking:`Checking...`,retry:`Retry status`,retryPublish:`Retry publish`,requested:`Requested`,awaitingCopilot:`Waiting for Copilot`,publishBranch:`Publish`,publishChanges:`Publish changes`,registration:`Publishing`,registrationFailed:`Publication delayed`,published:`Published`,alreadyPublished:`Latest changes already published`,queued:`Build queued`,building:`Building`,awaitingHub:`Awaiting Hub`,awaitingBuild:`Awaiting build`,connect:`Connect to the hub`,workflowLink:`View workflow run`,initial:`Checking branch publication.`,checkingRemote:`Checking the exact branch on the origin repository.`,detached:`Open a named branch before publishing.`,changed:`The checkout changed. Refresh publication status.`,unknown:e=>`Remote branch status is unknown. ${e||`Check GitHub access and retry.`}`,pending:`Copilot received the publish request in chat and has not pushed this branch yet. Follow its progress in chat.`,checkingHub:`Checking the Hub connection.`,disconnected:`Connect to the hub before publishing this prototype.`,hubUnavailable:`Hub verification is unavailable. Restore access and retry.`,hubUnavailableTitle:`Hub verification unavailable`,staleHub:`The Hub status belongs to a different checkout. Refresh to continue.`,workflowMissing:`This checkout has no .github/workflows/replica.yml. Set up the repository's Replica build workflow before publishing.`,dispatchFailed:`Copilot could not receive the publish request.`,absent:`This branch won't appear in the hub until you publish.`,needsPush:`The remote branch points to a different commit. Publish pushes this branch without force.`,localChanges:`Local changes are not in the published prototype. Choose how to publish them.`,needsRegistration:`Hub imported this commit. The canvas is publishing it automatically.`,registrationDenied:`Hub could not register this branch. Check repository access and branch eligibility.`,registrationErrorTitle:`Hub registration failed`,registrationReasons:new Map([[`write_access_required`,{title:ke,description:`You lack write access to this repository.`}],[`branch_not_reviewable`,{title:ke,description:`Default, reserved, and internal branches cannot be registered in Hub.`}],[`remote_branch_missing`,{title:ke,description:`The branch no longer exists on the remote repository.`}],[`branch_authorship_required`,{title:ke,description:`You have not authored a commit unique to this branch.`}],[`repository_mismatch`,{title:ke,description:`The branch belongs to a different repository.`}],[`already_registered`,{title:`Branch already registered in Hub`,description:`This branch is already registered in Hub. Refresh its status.`}],[`successful_build_required`,{title:`Hub registration delayed`,description:`Hub has not imported this checkout's successful Build yet.`}]]),ready:`Hub imported this commit and the prototype is registered.`,importFailed:`Hub could not import or build this commit. Pushing this unchanged commit does not rerun the failed work. Inspect the Build failure in Hub and repair the cause before publishing again.`,workflowUnavailable:`Workflow status is unavailable. Check GitHub access and retry.`,staleWorkflow:`Workflow status belongs to a different branch or commit.`,workflowQueued:`The Replica workflow for this commit is queued or waiting.`,workflowBuilding:`The Replica workflow is building this commit.`,workflowFailed:e=>`The Replica workflow finished with ${e||`an unsuccessful result`}. Pushing this unchanged commit does not rerun the failed work. Inspect the run and repair the cause before publishing again.`,importing:`The workflow succeeded. Waiting for Hub discovery and artifact import; this is not published yet.`,noBuild:`The exact branch and commit are on GitHub, but no matching Replica workflow run has appeared yet.`};function Ae({publication:e,busy:t,onPublish:n,onRetry:r}){if(e.kind===`ready`)return null;let i=e.kind===`requested`,a=t||i;return(0,U.jsxs)(`section`,{className:`canvas-branch-publication`,"aria-label":X.heading,children:[e.error?(0,U.jsx)(pe,{variant:`critical`,layout:`compact`,title:e.error.title,description:e.error.description}):(0,U.jsx)(`p`,{role:`status`,children:e.detail}),e.runUrl?(0,U.jsx)(`p`,{children:(0,U.jsx)(H.InlineLink,{className:`canvas-branch-publication__workflow-link`,href:e.runUrl,target:`_blank`,rel:`noopener noreferrer`,children:X.workflowLink})}):null,(e.action!==`none`||i)&&e.kind!==`disconnected`?(0,U.jsx)(`div`,{className:`canvas-branch-publication__actions`,children:(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:a,"aria-busy":a,leadingVisual:a?(0,U.jsx)(L,{size:16}):void 0,onClick:e.action===`retry`?r:n,children:e.label})}):null]})}function je({readiness:e,busy:t,shareButtonRef:n,onClose:r,onConnect:i,onPublish:a,onRetry:o,onManage:s}){let c=(0,V.useId)();return(0,U.jsxs)(le,{title:e.title,closeLabel:Y.close,onClose:r,returnFocusRef:n,descriptionId:c,children:[(0,U.jsx)(`p`,{id:c,role:`status`,children:e.detail}),[`connect`,`publish`,`ready`].includes(e.kind)?(0,U.jsx)(`p`,{children:Y.boundary}):null,e.publication?(0,U.jsx)(Ae,{publication:e.publication,dirty:!1,busy:t,onPublish:a,onRetry:o}):null,[`connect`,`ready`,`retry`].includes(e.kind)?(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:t,"aria-busy":t,onClick:e.kind===`connect`?i:e.kind===`ready`?s:o,children:e.kind===`connect`?Y.connectAction:e.kind===`ready`?Y.manage:X.retry}):null]})}function Me({hub:e,connection:t,publication:n,sharing:r,shareIntent:i,controlSettings:a,readiness:o,state:s,hubOpen:c,buildDetailsOpen:l,onCloseBuildDetails:u,shareButtonRef:d,hubButtonRef:f,connectionButtonRef:p,publishButtonRef:m,titleButtonRef:h}){let{intent:g,targetChanged:_}=i,v=n.presentedState;return(0,U.jsxs)(U.Fragment,{children:[t.open&&(!g||g.connecting&&!_)?(0,U.jsx)(fe,{status:e.status,pairing:t.pairing,connecting:t.connecting,error:t.error,onConnect:t.connect,onSelectHub:e.select,onResetHub:e.reset,onClose:()=>{t.close(),i.setConnecting(!1)},hubButtonRef:g?d:c?p:f}):null,g&&!n.publishDialog&&(_||!g.connecting||!t.open)?(0,U.jsx)(je,{readiness:_?{kind:`restricted`,title:Y.changed,detail:Y.changedDetail}:o,busy:n.busy,shareButtonRef:d,onClose:()=>{i.close(),t.close()},onConnect:()=>{_||o.kind!==`connect`||(i.setConnecting(!0),t.showAndConnect())},onPublish:()=>{!_&&o.kind===`publish`&&n.publish()},onRetry:()=>void n.retry(),onManage:()=>{_||o.kind!==`ready`||(i.close(),r.open())}}):null,n.publishDialog?(0,U.jsx)(me,{busy:n.busy,error:n.publishDialogError,changes:n.publishDialog.preparation.changes,checkError:n.publishDialog.preparation.workingTree===`unavailable`?n.publishDialog.preparation.workingTreeError||q.checkFailed:void 0,remembered:n.publishDialog.preparation.remember,returnFocusRef:g?d:m,onClose:n.closePublishDialog,onChoose:(e,t)=>void n.choosePublish(e,t),onRetry:()=>void n.retryPublishCheck()},n.publishDialog.preparation.workingTree===`unavailable`?`unchecked`:`checked`):null,r.state.open?(0,U.jsx)(Oe,{state:r.state,currentCommit:s?.stats.commitSha,hasLocalChanges:s?.stats.workingTree===`changed`,shareButtonRef:d,onClose:r.close,onConnect:!e.status||[`disconnected`,`pairing`,`unconfigured`].includes(e.status.state)?()=>{r.close(),t.show()}:void 0,onRefresh:()=>void r.refresh(),onCreate:r.create,onDelete:r.remove,onOpen:(e,t)=>void r.openLink(e,t),controlSettings:a,onAuthorize:()=>void r.authorize()}):null,l&&v?(0,U.jsx)(ue,{state:v,titleButtonRef:h,onClose:u}):null]})}function Ne({address:e,addressRef:t,canGoBack:n,canGoForward:i,appearance:a,onAppearanceChange:o,onBack:s,onForward:c,onNavigate:l,onOpenTab:u,onReload:d}){let[f,p]=(0,V.useState)(null),m=f?.address===e?f.value:e,h=f?.address===e?f.error:``;function g(t){t.preventDefault();try{let t=new URL(m.trim(),e);if(![`http:`,`https:`].includes(t.protocol)||t.origin!==new URL(e).origin||t.username||t.password){p({address:e,value:m,error:K.browserAddressOrigin});return}p(null),l(t.href)}catch{p({address:e,value:m,error:K.browserAddressInvalid})}}return(0,U.jsx)(H.ThemeProvider,{colorMode:`auto`,className:`canvas-browser-theme`,children:(0,U.jsxs)(`nav`,{className:`canvas-browser-bar`,"aria-label":K.browserNavigation,children:[(0,U.jsxs)(`div`,{className:`canvas-browser-bar__navigation`,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":K.browserBack,disabled:!n,onClick:s,children:(0,U.jsx)(r,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":K.browserForward,disabled:!i,onClick:c,children:(0,U.jsx)(oe,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":K.browserReload,onClick:d,children:(0,U.jsx)(L,{size:16})})]}),(0,U.jsxs)(`form`,{className:`canvas-browser-bar__address`,onSubmit:g,children:[(0,U.jsx)(`input`,{ref:t,"aria-label":K.browserAddress,"aria-invalid":!!h,"aria-describedby":h?`canvas-browser-address-error`:void 0,spellCheck:!1,value:m,onChange:t=>{p({address:e,value:t.target.value,error:``})},onFocus:e=>e.currentTarget.select(),onKeyDown:e=>{e.key===`Escape`&&(p(null),e.currentTarget.blur())}}),h?(0,U.jsx)(`span`,{id:`canvas-browser-address-error`,className:`canvas-browser-bar__error`,role:`alert`,children:h}):null]}),(0,U.jsxs)(`div`,{className:`canvas-browser-bar__tools`,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":K.browserOpenTab,title:K.browserOpenTab,onClick:()=>{u().catch(t=>{p({address:e,value:m,error:t instanceof Error?t.message:String(t)})})},children:(0,U.jsx)(v,{size:16})}),(0,U.jsxs)(`div`,{className:`canvas-browser-bar__appearance`,role:`group`,"aria-label":K.browserAppearance,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":K.browserLight,"aria-pressed":a===`light`,onClick:()=>o(`light`),children:(0,U.jsx)(P,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":K.browserDark,"aria-pressed":a===`dark`,onClick:()=>o(`dark`),children:(0,U.jsx)(ie,{size:16})})]})]})]})})}var Pe=e(t((e=>{var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),n=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),i=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=r();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t}));e.validateShape=N;var a={type:`object`,additionalProperties:!1,required:[`version`,`scope`,`controls`],properties:{$schema:{type:`string`},version:{const:1},scope:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},role:{enum:[`shared`,`page`]},container:{$ref:`#/$defs/selector`},panel:{type:`object`,additionalProperties:!1,required:[`width`],properties:{width:{type:`integer`,minimum:160,maximum:4096}}},groups:{type:`array`,maxItems:100,items:{type:`object`,additionalProperties:!1,required:[`id`,`label`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},when:{$ref:`#/$defs/condition`}}}},controls:{type:`array`,maxItems:500,items:{oneOf:[{$ref:`#/$defs/boolean`},{$ref:`#/$defs/number`},{$ref:`#/$defs/slider`},{$ref:`#/$defs/choice`},{$ref:`#/$defs/checkboxGroup`},{$ref:`#/$defs/text`},{$ref:`#/$defs/color`},{$ref:`#/$defs/button`}]}}}},o=Object.prototype.hasOwnProperty,s=n().default,c=RegExp(`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`,`u`),l={type:[`string`,`number`,`boolean`]},u=i().default,d={validate:f};function f(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0,s=o,p=!1,m=null,h=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.equals===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`equals`},message:`must have required property 'equals'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`equals`){let e={instancePath:t,schemaPath:`#/oneOf/0/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.equals!==void 0){let n=e.equals;if(typeof n!=`string`&&!(typeof n==`number`&&isFinite(n))&&typeof n!=`boolean`){let e={instancePath:t+`/equals`,schemaPath:`#/$defs/scalar/type`,keyword:`type`,params:{type:l.type},message:`must be string,number,boolean`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=h===o;g&&(p=!0,m=0);let _=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.in===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`in`},message:`must have required property 'in'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`in`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.in!==void 0){let n=e.in;if(Array.isArray(n)){if(n.length>20){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/maxItems`,keyword:`maxItems`,params:{limit:20},message:`must NOT have more than 20 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r1){outer0:for(;r--;)for(i=r;i--;)if(u(n[r],n[i])){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[e]:a.push(e),o++;break outer0}}}else{let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=_===o;if(g&&p)p=!1,m=[m,1];else{g&&(p=!0,m=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.includes===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`includes`},message:`must have required property 'includes'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`includes`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.includes!==void 0&&typeof e.includes!=`string`){let e={instancePath:t+`/includes`,schemaPath:`#/oneOf/2/properties/includes/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=n===o;if(g&&p)p=!1,m=[m,2];else{g&&(p=!0,m=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.all===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`all`},message:`must have required property 'all'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`all`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.all!==void 0){let n=e.all;if(Array.isArray(n)){if(n.length>10){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r10){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=d===o;f&&(l=!0,u=0);let v=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.selector===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`selector`},message:`must have required property 'selector'`};a===null?a=[e]:a.push(e),o++}if(e.property===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`property`},message:`must have required property 'property'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`selector`&&n!==`property`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`style`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/1/properties/type/const`,keyword:`const`,params:{allowedValue:`style`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.selector!==void 0){let n=e.selector;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.property!==void 0){let n=e.property;if(typeof n==`string`){if(s(n)>100){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/maxLength`,keyword:`maxLength`,params:{limit:100},message:`must NOT have more than 100 characters`};a===null?a=[e]:a.push(e),o++}if(!m.test(n)){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/pattern`,keyword:`pattern`,params:{pattern:`^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$`},message:`must match pattern "^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=v===o;if(f&&l)l=!1,u=[u,1];else{f&&(l=!0,u=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.key===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`key`},message:`must have required property 'key'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`key`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`query`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/2/properties/type/const`,keyword:`const`,params:{allowedValue:`query`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.key!==void 0){let n=e.key;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/2/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[2].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,2];else{f&&(l=!0,u=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`hash`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/3/properties/type/const`,keyword:`const`,params:{allowedValue:`hash`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/3/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[3].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/3/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,3];else{f&&(l=!0,u=3);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.object===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`object`},message:`must have required property 'object'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`object`&&n!==`read`&&n!==`write`&&n!==`action`&&n!==`subscribe`&&n!==`pollMs`){let e={instancePath:t,schemaPath:`#/oneOf/4/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`api`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/4/properties/type/const`,keyword:`const`,params:{allowedValue:`api`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.object!==void 0){let n=e.object;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(!h.test(n)){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$`},message:`must match pattern "^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.read!==void 0){let n=e.read;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.write!==void 0){let n=e.write;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.action!==void 0){let n=e.action;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.subscribe!==void 0){let n=e.subscribe;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.pollMs!==void 0){let n=e.pollMs;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),o++}if(typeof n==`number`&&isFinite(n)){if(n>6e4||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:6e4},message:`must be <= 60000`};a===null?a=[e]:a.push(e),o++}if(n<100||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:100},message:`must be >= 100`};a===null?a=[e]:a.push(e),o++}}}}else{let e={instancePath:t,schemaPath:`#/oneOf/4/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;f&&l?(l=!1,u=[u,4]):f&&(l=!0,u=4)}}}if(l)o=c,a!==null&&(c?a.length=c:a=null);else{let e={instancePath:t,schemaPath:`#/oneOf`,keyword:`oneOf`,params:{passingSchemas:u},message:`must match exactly one schema in oneOf`};a===null?a=[e]:a.push(e),o++}return _.errors=a,o===0}function v(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return v.errors=a,o===0}var y={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`number`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function b(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return b.errors=a,l===0}var x={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`slider`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function S(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return S.errors=a,l===0}var C={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`options`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`select`,`radio`,`segmented`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},options:{$ref:`#/$defs/options`},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function w(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return w.errors=a,o===0}function T(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return T.errors=a,o===0}var E={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`text`,`textarea`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},minLength:{type:`integer`,minimum:0},maxLength:{type:`integer`,minimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function D(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return D.errors=a,l===0}var O=RegExp(`^#[0-9a-fA-F]{6}$`,`u`);function k(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return k.errors=a,o===0}function A(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return A.errors=a,o===0}function j(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let l=null,u=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.version===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`version`},message:`must have required property 'version'`};l===null?l=[e]:l.push(e),u++}if(e.scope===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`scope`},message:`must have required property 'scope'`};l===null?l=[e]:l.push(e),u++}if(e.controls===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`controls`},message:`must have required property 'controls'`};l===null?l=[e]:l.push(e),u++}for(let n in e)if(!o.call(a.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};l===null?l=[e]:l.push(e),u++}if(e.$schema!==void 0&&typeof e.$schema!=`string`){let e={instancePath:t+`/$schema`,schemaPath:`#/properties/%24schema/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}if(e.version!==void 0&&e.version!==1){let e={instancePath:t+`/version`,schemaPath:`#/properties/version/const`,keyword:`const`,params:{allowedValue:1},message:`must be equal to constant`};l===null?l=[e]:l.push(e),u++}if(e.scope!==void 0){let n=e.scope;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return I.errors=a,o===0}e.number=L;function L(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return L.errors=a,l===0}e.slider=R;function R(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return R.errors=a,l===0}e.choice=z;function z(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return z.errors=a,o===0}e.checkboxGroup=te;function te(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return te.errors=a,o===0}e.text=B;function B(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return B.errors=a,l===0}e.color=ne;function ne(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ne.errors=a,o===0}e.button=re;function re(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return re.errors=a,o===0}}))(),1),{validateDocumentShape:Z,validateDeclaration:Fe}=Pe.default,Ie={boolean:`boolean`,number:`number`,slider:`slider`,select:`choice`,radio:`choice`,segmented:`choice`,checkboxGroup:`checkboxGroup`,text:`text`,textarea:`text`,color:`color`,button:`button`};function Le(e){let t=[...Fe.errors].filter(e=>!/^\/controls\/\d+(?:\/|$)/.test(e.instancePath)).map(e=>({...e}));return Array.isArray(e?.controls)&&e.controls.forEach((e,n)=>{let r=Object.hasOwn(Ie,e?.type)?Ie[e.type]:void 0,i=r&&Pe.default[r];i?i(e)||t.push(...i.errors.map(e=>({...e,instancePath:`/controls/${n}${e.instancePath}`}))):t.push({instancePath:`/controls/${n}/type`,message:`must name a supported control type`})}),t.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params}))}var Re=class extends Error{constructor(e){super(`Invalid controls.replica.json:\n${e.map(e=>` ${e.path||`/`}: ${e.message}`).join(`
+`)}`),this.name=`ControlsValidationError`,this.issues=e}};function ze(e,t){switch(e.type){case`boolean`:return typeof t==`boolean`?null:`must be a boolean`;case`number`:case`slider`:{if(typeof t!=`number`||!Number.isFinite(t))return`must be a finite number`;if(e.min!==void 0&&t= min`;if(e.max!==void 0&&t>e.max)return`must be <= max`;let n=(t-e.min)/(e.step??1);return!Number.isFinite(n)||Math.abs(n-Math.round(n))>1e-8?`must align with step (anchored at min)`:null}case`select`:case`radio`:case`segmented`:return e.options.includes(t)?null:`must be a declared option`;case`checkboxGroup`:return Array.isArray(t)&&new Set(t).size===t.length&&t.every(t=>e.options.includes(t))?null:`must be unique declared options`;case`text`:case`textarea`:return typeof t==`string`?e.minLength!==void 0&&[...t].lengthe.maxLength?`longer than maxLength`:null:`must be a string`;case`color`:return typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?null:`must be a six-digit hex color`;default:return`button controls have no value`}}function Be(e){return e?e.control?[e.control]:(e.all??e.any).flatMap(Be):[]}function Ve(e){let t=new Map((e.groups??[]).map(e=>[e.id,e])),n=new Map(e.controls.map(e=>[e.id,e])),r=new Set,i=new Set,a=[];function o(e){if(r.has(e))return;if(i.has(e))throw new Re([{path:`/controls/${e}/when`,message:`conditional dependency cycle (including groups)`}]);i.add(e);let s=n.get(e);for(let e of[...Be(s.when),...Be(t.get(s.group)?.when)])o(e);i.delete(e),r.add(e),a.push(e)}for(let e of n.keys())o(e);return a}function He(e){let t=new Set;function n(e,r=0){if(r>24)throw new Re([{path:`/`,message:`document nesting exceeds 24`}]);if(typeof e==`number`&&!Number.isFinite(e))throw new Re([{path:`/`,message:`numbers must be finite`}]);if(![`string`,`number`,`boolean`,`object`].includes(typeof e))throw new Re([{path:`/`,message:`must contain only JSON values`}]);if(e&&typeof e==`object`){if(!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new Re([{path:`/`,message:`must contain only JSON objects`}]);if(t.has(e))throw new Re([{path:`/`,message:`must be an acyclic JSON document`}]);t.add(e);for(let t of Object.values(e))n(t,r+1);t.delete(e)}}n(e)}function Ue(e){if(He(e),!Fe(e))throw new Re(Le(e));let t=[];function n(e,n){t.push({path:e,message:n})}let r=new Set,i=new Map((e.groups??[]).map(e=>[e.id,e])),a=new Map(e.controls.map(e=>[e.id,e]));for(let[t,i]of[[`groups`,e.groups??[]],[`controls`,e.controls]])i.forEach((e,i)=>{r.has(e.id)&&n(`/${t}/${i}/id`,`duplicate ID ${e.id}`),r.add(e.id)});function o(e,t,r=0){if(!e)return;if(r>4){n(t,`conditions support at most five levels`);return}if(e.all||e.any){let n=e.all?`all`:`any`;e[n].forEach((e,i)=>o(e,`${t}/${n}/${i}`,r+1));return}let i=a.get(e.control);if(!i||i.type===`button`)n(t,`condition must reference a value control`);else if(`includes`in e)(i.type!==`checkboxGroup`||!i.options.includes(e.includes))&&n(t,`includes requires a declared checkboxGroup option`);else if(i.type===`checkboxGroup`)n(t,`checkboxGroup conditions must use includes`);else for(let r of`in`in e?e.in:[e.equals]){let e=ze(i,r);e&&n(t,`invalid condition for ${i.id}: ${e}`)}}if(e.controls.forEach((e,t)=>{let r=`/controls/${t}`;if(e.group&&!i.has(e.group)&&n(`${r}/group`,`unknown group`),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&n(r,`min must not exceed max`),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&n(r,`minLength must not exceed maxLength`),e.type===`segmented`&&e.options.length>3&&n(`${r}/options`,`segmented supports at most three options`),e.type!==`button`){let t=ze(e,e.default);t&&n(`${r}/default`,t)}o(e.when,`${r}/when`)}),(e.groups??[]).forEach((e,t)=>o(e.when,`/groups/${t}/when`)),t.length)throw new Re(t);return Ve(e),e}function We(e,t){let[n,r]=(0,V.useState)(e),[i,a]=(0,V.useState)(null),o=(0,V.useRef)(e),s=(0,V.useRef)(e),c=(0,V.useRef)(0),l=(0,V.useRef)(!1);(0,V.useLayoutEffect)(()=>{s.current=e,l.current||(o.current=e,r(e))},[e]),(0,V.useLayoutEffect)(()=>()=>{c.current++},[]);function u(e){c.current++,l.current=!0,o.current=e,r(e),a(null)}function d(){c.current++,l.current=!1,o.current=s.current,r(s.current),a(null)}function f(e,n=e){u(e);let i=c.current;Promise.resolve().then(()=>t(n)).then(e=>{c.current===i&&(l.current=!1,o.current=e&&`value`in e?e.value:s.current,r(o.current))}).catch(()=>{c.current===i&&(d(),a(K.controlsValueNotApplied))})}return{draft:n,error:i,current:()=>o.current,stage:u,commit:f,reset:d}}function Ge(e){let t=e.step??1,n=Math.max(...[e.min,e.max,t].map(e=>{let[t=``,n=`0`]=String(e).split(`e`);return Math.max(0,(t.split(`.`)[1]?.length??0)-Number(n))})),r=Math.max(...[e.min,e.max].map(e=>n<=100?e.toFixed(n).length:String(e).length),String(e.default).length,String(t).length);return e.type===`slider`?`calc(${r}ch + var(--hub-space-8) * 2)`:`calc(${r}ch + var(--hub-space-8) * 2 + 1.25rem)`}function Ke({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=We(n,a),[s,c]=(0,V.useState)(null);function l(e){let n=e.target.value,r=t.type===`number`||t.type===`slider`?n===``?NaN:Number(n):n,i=ze(t,r);c(i),i?o.stage(n):o.commit(n,r)}let u=s||o.error,d=t.type===`number`||t.type===`slider`,f=t.type===`slider`?{"--controls-slider-progress":`${t.min===t.max?100:(Number(n)-t.min)/(t.max-t.min)*100}%`}:void 0,p=[i?`${e}-hint`:void 0,u?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0,m={id:e,disabled:r,value:String(o.draft),onChange:l,"aria-invalid":u?!0:void 0,"aria-describedby":p,onBlur:()=>{s&&(o.reset(),c(null))}},h;return h=t.type===`textarea`?(0,U.jsx)(H.Textarea,{...m,rows:2,resize:`vertical`}):d?(0,U.jsx)(H.TextInput,{...m,className:t.type===`slider`?`controls-number-input controls-number-input--slider`:`controls-number-input`,type:`number`,min:t.min,max:t.max,step:t.step??1,validationStatus:u?`error`:void 0,"aria-labelledby":`${e}-label`,style:{width:Ge(t)}}):t.type===`color`?(0,U.jsx)(`input`,{...m,className:`controls-native-color`,type:`color`}):(0,U.jsx)(H.TextInput,{...m,type:`text`}),(0,U.jsxs)(H.FormControl,{id:e,className:d?`controls-field controls-field--${t.type}`:`controls-field`,fullWidth:!d||t.type===`slider`,validationStatus:u?`error`:void 0,children:[d?(0,U.jsxs)(`div`,{className:`controls-field-heading`,children:[(0,U.jsx)(H.FormControl.Label,{id:`${e}-label`,htmlFor:e,className:`controls-field-label`,children:t.label}),t.type===`slider`?(0,U.jsxs)(`div`,{className:`controls-slider-row`,children:[(0,U.jsx)(`input`,{...m,id:`${e}-slider`,value:String(n),className:`controls-native-slider`,type:`range`,style:f,min:t.min,max:t.max,step:t.step??1,"aria-labelledby":`${e}-label`}),h]}):h]}):(0,U.jsx)(H.FormControl.Label,{className:`controls-field-label`,children:t.label}),d?null:h,i?(0,U.jsx)(H.FormControl.Hint,{children:(0,U.jsx)(`span`,{role:`status`,children:i})}):null,u?(0,U.jsx)(H.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:u}):null]})}function qe({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=We(n,a),s=[i?`${e}-unavailable`:void 0,o.error?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0;if(t.type===`boolean`||t.type===`select`)return(0,U.jsxs)(H.FormControl,{id:e,className:t.type===`boolean`?`controls-field controls-choice-row`:`controls-field controls-field--select`,fullWidth:t.type===`boolean`,validationStatus:o.error?`error`:void 0,children:[t.type===`select`?(0,U.jsx)(H.FormControl.Label,{className:`controls-field-label`,children:t.label}):null,t.type===`boolean`?(0,U.jsx)(H.Checkbox,{className:`controls-choice-mark`,disabled:r,"aria-describedby":s,checked:o.draft===!0,onChange:e=>o.commit(e.target.checked)}):(0,U.jsx)(H.Select,{className:`controls-select-input`,disabled:r,"aria-describedby":s,value:o.draft,onChange:e=>o.commit(e.target.value),children:t.options.map(e=>(0,U.jsx)(H.Select.Option,{value:e,children:e},e))}),t.type===`boolean`?(0,U.jsx)(H.FormControl.Label,{className:`controls-choice-label`,children:t.label}):null,i?(0,U.jsx)(H.FormControl.Hint,{children:(0,U.jsx)(`span`,{role:`status`,children:i})}):null,o.error?(0,U.jsx)(H.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:o.error}):null]});let c=t.type===`checkboxGroup`,l=t.type===`segmented`,u=c?H.CheckboxGroup:H.RadioGroup,d=c?H.Checkbox:H.Radio;return(0,U.jsxs)(u,{id:e,className:`controls-field`,"aria-disabled":r||void 0,"aria-describedby":s,children:[(0,U.jsx)(u.Label,{className:`controls-choice-group-label`,children:t.label}),(0,U.jsx)(`div`,{className:l?`controls-segments`:`controls-options`,children:t.options.map((t,n)=>{let i=`${e}-${n}`,a=c?o.draft.includes(t):o.draft===t,u=(0,U.jsx)(d,{className:c?`controls-choice-mark`:`controls-choice-mark controls-choice-mark--radio`,id:i,name:e,value:t,checked:a,disabled:r,"aria-describedby":s,onChange:e=>{let n=o.current();o.commit(c?e.target.checked?[...n,t]:n.filter(e=>e!==t):t)}});return l?(0,U.jsxs)(`label`,{htmlFor:i,className:`controls-segment`,title:t,children:[(0,U.jsx)(W,{children:u}),(0,U.jsx)(H.Text,{as:`span`,size:`100`,weight:`medium`,children:t})]},t):(0,U.jsxs)(H.FormControl,{id:i,className:`controls-field controls-choice-row`,children:[u,(0,U.jsx)(H.FormControl.Label,{className:`controls-choice-label`,children:t})]},t)})}),i?(0,U.jsx)(H.Text,{as:`span`,id:`${e}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:i}):null,o.error?(0,U.jsx)(u.Validation,{variant:`error`,role:`status`,children:o.error}):null]})}function Je(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?K.controlsActionUnavailable:``)}}function Ye({scopes:e,disabled:t=!1,onCommand:n,collapsedGroups:r,onGroupCollapse:i}){let a=(0,V.useId)(),o=(0,V.useRef)(null),s=(0,V.useRef)(null),[c,l]=(0,V.useState)({});(0,V.useLayoutEffect)(()=>{s.current&&!s.current.isConnected&&(document.activeElement===document.body&&o.current?.focus(),s.current=null)},[e]);function u(e,r){if(!e.snapshot.visible[r.id])return null;let i=`${a}-${e.declaration.scope}-${r.id}`,o=e.snapshot.values[r.id];function s(t){return n(`update`,e.declaration.scope,r.id,t)}let c=e.snapshot.bindings?.[r.id],l=Je(e,r),u={id:i,message:l.error?l.available?K.controlsNotApplied(r.label):K.controlsUnavailable(r.label):void 0,disabled:t||!!c?.error&&c?.available!==!0||c?.busy===!0};switch(r.type){case`button`:{let t=e.snapshot.actions[r.id];return(0,U.jsx)(`div`,{className:`controls-field controls-action-field`,children:(0,U.jsxs)(H.Button,{type:`button`,size:`small`,variant:`secondary`,className:`controls-action-button`,disabled:u.disabled||!t?.available||t.busy,"aria-describedby":u.message?`${i}-unavailable`:void 0,"aria-busy":t?.busy,onClick:()=>{n(`action`,e.declaration.scope,r.id)},children:[r.label,t?.busy?K.controlsActionBusy:``]})},r.id)}case`boolean`:case`select`:case`radio`:case`segmented`:case`checkboxGroup`:return(0,U.jsx)(qe,{...u,control:r,value:o,onCommit:s},r.id);case`number`:case`slider`:case`text`:case`textarea`:case`color`:return(0,U.jsx)(Ke,{...u,control:r,value:o,onCommit:s},r.id)}}function d(e,t){if(!e.snapshot.visible[t.id])return null;let n=Je(e,t);return(0,U.jsxs)(V.Fragment,{children:[u(e,t),t.type===`button`&&n.error?(0,U.jsx)(H.Text,{as:`p`,id:`${a}-${e.declaration.scope}-${t.id}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:n.available?K.controlsNotApplied(t.label):K.controlsUnavailable(t.label)}):null]},t.id)}let f=[...e.filter(e=>e.declaration.role===`shared`),...e.filter(e=>e.declaration.role!==`shared`)].filter(e=>e.declaration.controls.some(t=>t.group?e.snapshot.groups[t.group]:e.snapshot.visible[t.id]));return(0,U.jsx)(`div`,{ref:o,tabIndex:-1,role:`region`,"aria-label":K.controlsRegion,className:`controls-fields`,onFocusCapture:e=>{s.current=e.target},children:f.map((e,t)=>{let n=new Set;return(0,U.jsxs)(`section`,{className:`controls-scope`,"aria-label":e.declaration.label??e.declaration.scope,children:[t>0?(0,U.jsx)(`hr`,{className:`controls-scope-divider`}):null,e.declaration.controls.map(t=>{if(!t.group)return d(e,t);if(n.has(t.group))return null;n.add(t.group);let o=e.declaration.groups?.find(e=>e.id===t.group);if(!o||!e.snapshot.groups[o.id])return null;let s=`${e.declaration.scope}/${o.id}`,u=(r??c)[s]===!0,f=`${a}-${e.declaration.scope}-${o.id}-group`;return(0,U.jsxs)(`fieldset`,{className:`controls-group`,"aria-label":o.label,children:[(0,U.jsx)(`legend`,{children:(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,type:`button`,block:!0,className:`controls-group-toggle controls-ghost-button`,"aria-label":u?K.controlsExpandGroup(o.label):K.controlsCollapseGroup(o.label),"aria-controls":f,"aria-expanded":!u,trailingVisual:u?(0,U.jsx)(m,{size:16}):(0,U.jsx)(g,{size:16}),onClick:t=>{t.currentTarget.focus(),i?i(e.declaration.scope,o.id,!u):l(e=>({...e,[s]:!u}))},children:(0,U.jsx)(H.Text,{as:`span`,size:`100`,weight:`bold`,variant:`muted`,className:`controls-group-label`,children:o.label})})}),(0,U.jsx)(`div`,{id:f,className:`controls-group-body`,hidden:u,children:e.declaration.controls.filter(e=>e.group===o.id).map(t=>d(e,t))})]},o.id)})]},e.declaration.scope)})})}function Xe(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}function Ze(e,t){let n=(0,V.useRef)(null),r=(0,V.useRef)(null),i=(0,V.useRef)(null),a=(0,V.useRef)({position:e,onChange:t}),o=(0,V.useRef)(null),[s,c]=(0,V.useState)(!1);(0,V.useLayoutEffect)(()=>{a.current={position:e,onChange:t}});let l=(0,V.useCallback)(e=>{let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i||!t.width||!t.height)return;let o={x:Math.max(0,Math.min(e.x,Math.max(0,t.width-i.width))),y:Math.max(0,Math.min(e.y,Math.max(0,t.height-i.height)))};(a.current.position?.x!==o.x||a.current.position?.y!==o.y)&&a.current.onChange(o)},[]);(0,V.useLayoutEffect)(()=>{let e=n.current,t=r.current;if(!e||!t)return;function i(){let n=e?.getBoundingClientRect(),r=t?.getBoundingClientRect();if(!n||!r||!n.width||!n.height)return;let i=r.left-n.left,a=r.top-n.top;(i<0||a<0||i>Math.max(0,n.width-r.width)||a>Math.max(0,n.height-r.height))&&l({x:i,y:a})}let a=new ResizeObserver(i);return a.observe(e),a.observe(t),window.addEventListener(`resize`,i),i(),()=>{a.disconnect(),window.removeEventListener(`resize`,i)}},[l]);function u(e=!1){let t=o.current;o.current=null,c(!1),t&&(e&&l(t.origin),i.current?.hasPointerCapture(t.pointerId)&&i.current.releasePointerCapture(t.pointerId))}return{boundsRef:n,panelRef:r,handleRef:i,dragging:s,onPointerDown:e=>{if(e.button!==0||o.current)return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();t&&i&&(o.current={pointerId:e.pointerId,x:e.clientX,y:e.clientY,origin:{x:i.left-t.left,y:i.top-t.top}},e.currentTarget.setPointerCapture(e.pointerId),e.currentTarget.focus(),e.preventDefault(),c(!0))},onPointerMove:e=>{let t=o.current;t&&t.pointerId===e.pointerId&&l({x:t.origin.x+e.clientX-t.x,y:t.origin.y+e.clientY-t.y})},onPointerUp:e=>{o.current?.pointerId===e.pointerId&&u()},onPointerCancel:e=>{o.current?.pointerId===e.pointerId&&u(!0)},onLostPointerCapture:()=>{o.current&&u()},onKeyDown:e=>{if(e.key===`Escape`&&o.current){e.preventDefault(),u(!0);return}if(![`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`].includes(e.key))return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i)return;e.preventDefault();let a=e.shiftKey?1:10;l({x:i.left-t.left+(e.key===`ArrowLeft`?-a:e.key===`ArrowRight`?a:0),y:i.top-t.top+(e.key===`ArrowUp`?-a:e.key===`ArrowDown`?a:0)})}}}function Qe(e){let t=e.filter(e=>e.declaration.role!==`shared`),n=t.length?t:e;return n.length?Math.max(...n.map(e=>e.declaration.panel?.width??288)):288}function $e({state:e,connection:t,layout:n,onLayoutChange:r,onDiagnose:i,diagnosisTarget:a=``}){let s=e.loading?[]:e.scopes.flatMap(e=>e.declaration.controls.flatMap(t=>{let n=Je(e,t);return n.visible&&n.error?[{...n,label:t.label}]:[]})),c=!!(i&&!e.loading&&(!e.runtimeAvailable&&e.error||e.storageError||s.length||e.reconnectRequired||e.status===`missing-runtime`||e.status===`unsupported-runtime`||e.status===`invalid-config`)),l=c?JSON.stringify([a,e.status,e.runtimeAvailable,e.reconnectRequired,e.error,e.storageError,s.map(({scope:e,id:t,error:n})=>[e,t,n])]):``,[u,d]=(0,V.useState)(()=>({episode:l,identity:{},busy:!1,requested:!1,error:``}));u.episode!==l&&d({episode:l,identity:{},busy:!1,requested:!1,error:``});async function f(){if(!i||!c||u.busy||u.requested)return;let e=u.identity;d(t=>t.identity===e?{...t,busy:!0,error:``}:t);try{await i(),d(t=>t.identity===e?{...t,requested:!0}:t)}catch(t){d(n=>n.identity===e?{...n,error:t instanceof Error?t.message:K.controlsDiagnosisFailed}:n)}finally{d(t=>t.identity===e?{...t,busy:!1}:t)}}let m=(0,V.useId)(),h=(0,V.useId)(),_=(0,V.useRef)(null),{boundsRef:v,panelRef:y,handleRef:b,dragging:x,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}=Ze(n.position,e=>r(t=>({...t,position:e})));(0,V.useEffect)(()=>{b.current?.focus()},[b]),(0,V.useLayoutEffect)(()=>{_.current&&!_.current.isConnected&&(document.activeElement===document.body&&b.current?.focus(),_.current=null)},[e,b]);let O=e.loading?K.controlsConnecting:e.status===`no-controls`?K.controlsEmpty:e.status===`missing-runtime`?i?K.controlsLocalMissingRuntime:K.controlsMissingRuntime:e.status===`unsupported-runtime`?K.controlsUnsupportedRuntime:e.status===`invalid-config`?K.controlsInvalid:``,k=!e.loading&&(e.storageError||e.reconnectRequired||!e.runtimeAvailable&&e.error);return(0,U.jsx)(`div`,{ref:v,className:`canvas-controls-layer`,children:(0,U.jsxs)(`aside`,{ref:y,className:`canvas-controls-panel`,"aria-label":K.controls,onFocusCapture:e=>{e.target instanceof HTMLElement&&(_.current=e.target)},"data-collapsed":n.collapsed,"data-dragging":x||void 0,style:{left:n.position?.x,top:n.position?.y,width:`min(${Qe(e.scopes)}px, calc(100% - var(--hub-space-16) * 2))`},children:[(0,U.jsxs)(`header`,{className:`canvas-controls-header`,children:[(0,U.jsx)(G,{icon:o,ref:b,size:`small`,variant:`invisible`,className:`canvas-controls-grab controls-ghost-button`,"aria-label":K.controlsMove,"aria-describedby":h,title:``,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}),(0,U.jsx)(W,{id:h,children:K.controlsMoveHint}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,block:!0,className:`canvas-controls-title controls-ghost-button`,"aria-label":n.collapsed?K.controlsExpand:K.controlsCollapse,"aria-expanded":!n.collapsed,"aria-controls":m,trailingVisual:n.collapsed?(0,U.jsx)(g,{size:16}):(0,U.jsx)(p,{size:16}),onClick:()=>r(e=>({...e,collapsed:!e.collapsed})),children:K.controls}),(0,U.jsx)(G,{icon:L,size:`small`,variant:`invisible`,className:`controls-ghost-button`,"aria-label":K.controlsResetAll,disabled:!e.runtimeAvailable||e.reconnectRequired||e.loading||e.resetting||!e.storageError&&!e.hasResettableValues&&!e.scopes.some(e=>Object.keys(Xe(e)).length>0)||e.scopes.some(e=>Object.values(e.snapshot.actions).some(e=>e.busy))||e.status!==`ready`&&e.status!==`no-controls`&&!e.storageError,onClick:()=>{t.resetAll()}})]}),(0,U.jsxs)(`div`,{id:m,className:`canvas-controls-body`,hidden:n.collapsed,children:[(0,U.jsxs)(`div`,{className:`canvas-controls-content`,children:[O||e.notice?(0,U.jsx)(`div`,{role:`status`,"aria-live":`polite`,children:(0,U.jsx)(H.Text,{as:`p`,size:`100`,variant:`muted`,children:[O,e.notice].filter(Boolean).join(` `)})}):null,!e.loading&&e.error?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:e.error}):null,!e.loading&&e.scopeErrors?.map(e=>(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:K.controlsScopeError(e.scope,e.error)},e.scope)),!e.loading&&e.storageError?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:e.storageError}):null,u.error?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:u.error}):null,(0,U.jsx)(Ye,{scopes:e.loading?[]:e.scopes,disabled:e.resetting||e.reconnectRequired,collapsedGroups:n.collapsedGroups,onGroupCollapse:(e,t,n)=>r(r=>({...r,collapsedGroups:{...r.collapsedGroups,[`${e}/${t}`]:n}})),onCommand:(e,n,r,i)=>t.command(e,n,r,i)}),s.length?(0,U.jsxs)(H.Accordion,{className:`canvas-controls-diagnostics`,disableAnimation:!0,children:[(0,U.jsx)(H.Accordion.Heading,{children:K.controlsDiagnostics}),(0,U.jsx)(H.Accordion.Content,{children:s.map(({scope:e,id:t,label:n,error:r})=>(0,U.jsxs)(H.Text,{as:`p`,size:`100`,children:[n,`: `,r]},`${e}/${t}`))})]}):null]}),c||k?(0,U.jsxs)(`footer`,{className:`canvas-controls-footer`,children:[c?(0,U.jsx)(H.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:u.busy||u.requested||e.resetting,onClick:()=>void f(),children:u.requested?K.controlsDiagnosisRequested:s.length?K.controlsFix:K.controlsDiagnose}):null,k?(0,U.jsx)(H.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:e.resetting,onClick:()=>t.retry(),children:e.storageError?K.controlsRetryStorage:K.controlsRetry}):null]}):null]})]})})}var et=c();function tt({children:e,className:t,...n}){return(0,U.jsx)(`span`,{...n,className:`hub-counter${t?` ${t}`:``}`,children:e})}var nt=(0,V.createContext)(null);function rt({source:e,children:t}){return(0,U.jsx)(nt,{value:e,children:t})}function it({title:e,label:t=e,open:n,closeLabel:r,closeDisabled:i=!1,closeShortcut:a,closeRef:o,onClose:s,headerAccessory:c,className:l,contentClassName:u,children:d}){return(0,U.jsxs)(`aside`,{className:`hub-sidebar${l?` ${l}`:``}`,"aria-label":t,"aria-hidden":!n,"data-open":n,inert:!n,children:[(0,U.jsxs)(`header`,{className:`hub-sidebar__header`,children:[(0,U.jsxs)(`div`,{className:`hub-sidebar__heading`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`subhead-medium`,weight:`normal`,children:e}),c]}),(0,U.jsx)(G,{ref:o,icon:B,"aria-label":r,"aria-keyshortcuts":a,title:r,description:r,variant:`invisible`,size:`small`,className:`hub-sidebar__close`,disabled:i,onClick:s})]}),(0,U.jsx)(`div`,{className:`hub-sidebar__content${u?` ${u}`:``}`,children:d})]})}function at({src:e,size:t=32,className:n}){return(0,U.jsx)(H.Avatar,{src:e||`/avatar-placeholder.svg`,alt:``,size:32,className:`hub-user-avatar hub-user-avatar--${t}${n?` ${n}`:``}`})}function ot({participants:e,size:t}){let n=e.slice(0,4),r=e.length-3;return(0,U.jsxs)(`span`,{className:`review-participant-stack review-participant-stack--${t}`,"data-avatar-count":n.length,"data-participant-count":e.length,"aria-hidden":`true`,children:[(r>1?n.slice(0,3):n).map(e=>(0,U.jsx)(`span`,{className:`review-participant-stack__avatar`,children:(0,U.jsx)(at,{src:e.avatarUrl,size:24})},e.login)),r>1?(0,U.jsxs)(`span`,{className:`review-participant-stack__avatar review-participant-stack__avatar--overflow`,children:[`+`,r]}):null]})}function st(e,t){let n=e.path.map(e=>({x:t.x+e.x*t.width,y:t.y+e.y*t.height})),r={x:t.x+t.width,y:t.y};return{path:n,point:n.reduce((e,t)=>{let n=(t.x-r.x)**2+(t.y-r.y)**2;return n{let e=c.current;if(!e)return;function t(){let t=e?.clientWidth??0;if(t)for(let e of l.current.values()){let n=Number.parseFloat(e.style.left),r=e.offsetWidth;if(!Number.isFinite(n)||!r)continue;let i=n-16,a=Math.max(0,Math.min(i,t-r))-i;e.style.setProperty(`--review-marker-offset-x`,`${a}px`)}}t();let n=typeof ResizeObserver>`u`?null:new ResizeObserver(t);n?.observe(e);for(let e of l.current.values())n?.observe(e);return window.addEventListener(`resize`,t),()=>{n?.disconnect(),window.removeEventListener(`resize`,t)}},[t,e]),(0,V.useEffect)(()=>{!i||n===null||u!==`resolved`&&u!==`moved`||l.current.get(n)?.focus({preventScroll:!0})},[i,u,n]),(0,U.jsx)(`div`,{ref:c,className:`review-comment-markers`,role:`group`,"aria-label":o.heading,children:e.map(e=>{let{root:i}=e,c=t.get(i.id);if(!c||c.status!==`resolved`&&c.status!==`moved`)return null;let u=e.replies.length>0,d=(e.unread?u?o.unreadMarkerWithRepliesLabel:o.unreadMarkerLabel:u?o.markerWithRepliesLabel:o.markerLabel).replace(`%{author}`,`@${i.author.login}`).replace(`%{count}`,(e.replies.length+1).toString()),f=i.anchor.kind===`area`?st(i.anchor,c.rect):null,p=e.participants.slice(3),m=p.length>1?p.map(({login:e})=>`@${e}`).join(`, `):d;return(0,U.jsxs)(V.Fragment,{children:[f&&(!a||n===i.id)?(0,U.jsx)(`svg`,{className:`review-comment-area`,"aria-hidden":`true`,width:`100%`,height:`100%`,children:(0,U.jsx)(`polyline`,{className:n===i.id?`review-comment-area__path review-comment-area__path--selected`:`review-comment-area__path`,points:f.path.map(e=>`${e.x},${e.y}`).join(` `),vectorEffect:`non-scaling-stroke`})}):null,(0,U.jsx)(H.Tooltip,{text:m,type:`description`,ref:e=>{e instanceof HTMLButtonElement?l.current.set(i.id,e):l.current.delete(i.id)},children:(0,U.jsx)(`button`,{type:`button`,"data-review-thread-id":i.id,className:`review-comment-marker${n===i.id?` review-comment-marker--selected`:``}${i.resolvedAt?` review-comment-marker--resolved`:``}${e.unread?` review-comment-marker--unread`:``}${r&&n!==i.id?` review-comment-marker--blocked`:``}`,style:{left:f?.point.x??c.point.x,top:f?.point.y??c.point.y},"aria-label":d,disabled:r&&n!==i.id,onClick:()=>s(e),children:(0,U.jsx)(ot,{participants:e.participants,size:`small`})})})]},i.id)})})}function lt({checked:e,onChange:t,size:n=`medium`,className:r,...i}){let{value:a,...o}=i;return(0,U.jsxs)(`label`,{className:`hub-switch hub-switch--${n}${r?` ${r}`:``}`,"data-disabled":i.disabled||void 0,children:[(0,U.jsx)(`span`,{className:`hub-switch__native-control`,children:(0,U.jsx)(H.Checkbox,{...o,value:a===void 0?void 0:String(a),role:`switch`,checked:e,onChange:e=>{i.disabled||t(e.currentTarget.checked)}})}),(0,U.jsx)(`span`,{className:`hub-switch__track`,"data-checked":e,"aria-hidden":`true`,children:(0,U.jsx)(`span`,{className:`hub-switch__thumb`})})]})}function ut(e){(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())}function dt({filters:e,participants:t,showPins:n,copy:r,onFiltersChange:i,onShowPinsChange:a}){let[o,s]=(0,V.useState)(!1),c=e.currentBuildOnly||e.currentPageOnly||e.showResolved||!e.showRead||e.onlyMine||e.participant!==null||!n,l=t.find(t=>t.login===e.participant),u=e.participant===null?r.allParticipantsLabel:l?.name?`${l.name} (@${l.login})`:`@${e.participant}`;return(0,U.jsxs)(`div`,{className:`review-comment-filter-controls`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__search`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__search-field`,children:[(0,U.jsx)(ne,{className:`review-comment-filter-controls__search-icon`,size:16,"aria-hidden":`true`}),(0,U.jsx)(`input`,{type:`search`,className:`review-comment-filter-controls__input`,"aria-label":r.searchLabel,placeholder:r.searchPlaceholder,value:e.search,onChange:t=>i({...e,search:t.target.value})})]}),(0,U.jsx)(G,{icon:h,"aria-label":r.filterLabel,description:r.filterLabel,"aria-expanded":o,variant:`invisible`,className:`review-comment-filter-controls__button${o||c?` review-comment-filter-controls__button--active`:``}`,onClick:()=>s(e=>!e)})]}),o?(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__filters`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__participant`,children:[(0,U.jsx)(`span`,{children:r.participantFilterLabel}),(0,U.jsxs)(H.ActionMenu,{size:`small`,selectionVariant:`single`,menuAlignment:`end`,onSelect:t=>i({...e,participant:t===``?null:t}),children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-filter-controls__participant-trigger`,variant:`secondary`,size:`small`,"aria-label":`${r.participantFilterLabel}: ${u}`,children:(0,U.jsx)(`span`,{className:`review-comment-filter-controls__participant-name`,children:u})}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":r.participantFilterLabel,children:[(0,U.jsx)(H.ActionMenu.Item,{value:``,selected:e.participant===null,role:`menuitemradio`,onKeyDownCapture:ut,children:r.allParticipantsLabel}),t.map(t=>(0,U.jsx)(H.ActionMenu.Item,{value:t.login,selected:e.participant===t.login,role:`menuitemradio`,onKeyDownCapture:ut,children:t.name?`${t.name} (@${t.login})`:`@${t.login}`},t.login))]})]})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-current-build`,children:r.currentBuildFilterLabel}),(0,U.jsx)(lt,{"aria-labelledby":`review-comments-current-build`,checked:e.currentBuildOnly,size:`small`,onChange:t=>i({...e,currentBuildOnly:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-current-page`,children:r.currentPageFilterLabel}),(0,U.jsx)(lt,{"aria-labelledby":`review-comments-current-page`,checked:e.currentPageOnly,size:`small`,onChange:t=>i({...e,currentPageOnly:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-show-resolved`,children:r.showResolvedLabel}),(0,U.jsx)(lt,{"aria-labelledby":`review-comments-show-resolved`,checked:e.showResolved,size:`small`,onChange:t=>i({...e,showResolved:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-unread-only`,children:r.unreadOnlyLabel}),(0,U.jsx)(lt,{"aria-labelledby":`review-comments-unread-only`,checked:!e.showRead,size:`small`,onChange:t=>i({...e,showRead:!t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-only-mine`,children:r.onlyMineLabel}),(0,U.jsx)(lt,{"aria-labelledby":`review-comments-only-mine`,checked:e.onlyMine,size:`small`,onChange:t=>i({...e,onlyMine:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-show-pins`,children:r.showPinsLabel}),(0,U.jsx)(lt,{"aria-labelledby":`review-comments-show-pins`,checked:n,size:`small`,onChange:a})]})]}):null]})}var ft=[[31536e3,`y`],[2592e3,`mo`],[604800,`w`],[86400,`d`],[3600,`h`],[60,`m`]];function pt(e){let t=window.setInterval(e,6e4);return()=>window.clearInterval(t)}function mt(){return Math.floor(Date.now()/6e4)*6e4}function ht(){return null}function gt({value:e,showTitle:t=!0}){let n=Date.parse(e),r=Number.isNaN(n)?e:new Date(n).toUTCString(),i=(0,V.useSyncExternalStore)(pt,mt,ht),a=r;if(i!==null&&!Number.isNaN(n)){let e=Math.round((i-n)/1e3),t=ft.find(([t])=>Math.abs(e)>=t);a=t?`${e<0?`in `:``}${Math.round(Math.abs(e)/t[0])}${t[1]}${e<0?``:` ago`}`:`just now`}return(0,U.jsx)(`time`,{dateTime:e,title:t?r:void 0,"aria-label":r,children:a})}function _t({thread:e,currentBuildNumber:t,resolution:n,anchorStatusLabel:r,selected:i,selectionBlocked:a,copy:o,onSelect:s,buildHref:c}){let l=(0,V.useId)(),{root:u}=e,d=u.author.name||`@${u.author.login}`,f=a&&!i,p=o.buildLabel.replace(`%{number}`,u.buildNumber?.toString()??``),m=u.buildNumber!==null&&u.buildPath!==null&&u.buildNumber!==t,h=e.replies.length===1?o.replyCountOneLabel:o.replyCountOtherLabel.replace(`%{count}`,e.replies.length.toString()),g=o.missingAnchorLabel;return u.resolvedAt?g=o.resolvedLabel:r===void 0?n?n.status===`resolved`?g=null:n.status===`moved`?g=o.movedAnchorLabel:n.status===`changed`?g=o.changedAnchorLabel:n.status===`route-mismatch`&&(g=o.routeMismatchLabel):g=null:g=r,(0,U.jsx)(`article`,{className:`review-comment-row${i?` review-comment-row--selected`:``}${e.unread?` review-comment-row--unread`:``}`,onClick:t=>{f||t.target instanceof Element&&t.target.closest(`a`)||s(e)},children:(0,U.jsx)(`div`,{className:`review-comment-row__layout`,children:(0,U.jsxs)(`div`,{className:`review-comment-row__content`,children:[(0,U.jsxs)(`div`,{className:`review-comment-row__copy`,children:[(0,U.jsxs)(`div`,{className:`review-comment-row__metadata`,children:[(0,U.jsxs)(`span`,{className:`review-comment-row__author-and-build`,children:[(0,U.jsx)(at,{src:u.author.avatarUrl,size:20,className:`review-comment-row__avatar`}),(0,U.jsx)(`span`,{id:`${l}-author`,className:`review-comment-row__author`,children:d}),m?(0,U.jsxs)(`span`,{className:`review-comment-row__build`,children:[`(`,(0,U.jsx)(`a`,{href:c||u.buildPath||void 0,target:c?`_blank`:void 0,rel:c?`noopener noreferrer`:void 0,children:p}),`)`]}):null]}),(0,U.jsx)(gt,{value:e.lastActivityAt})]}),(0,U.jsx)(`button`,{type:`button`,className:`review-comment-row__button`,"aria-labelledby":`${l}-author ${l}-body${e.unread?` ${l}-unread`:``}`,"aria-pressed":i,disabled:f,title:f?o.selectionBlockedLabel:void 0,children:(0,U.jsxs)(`span`,{className:`review-comment-row__body-container`,children:[e.unread?(0,U.jsx)(`span`,{role:`img`,id:`${l}-unread`,"aria-label":o.unreadLabel,title:o.unreadLabel,className:`review-comment-row__unread`}):null,(0,U.jsx)(`span`,{id:`${l}-body`,className:`review-comment-row__body`,children:u.body??o.deletedCommentLabel})]})})]}),g||e.replies.length>0?(0,U.jsxs)(`div`,{className:`review-comment-row__context`,children:[e.replies.length>0?(0,U.jsx)(`span`,{className:`review-comment-row__replies`,children:h}):null,g?(0,U.jsx)(H.Label,{size:`small`,className:`review-comment-row__status`,children:g}):null]}):null]})})})}function vt({frame:e,threads:t,currentBuildNumber:n,buildLinkOrigin:r,totalCount:i,hasThreads:a,filters:o,participants:s,resolutions:c,selectedThreadId:l,selectionBlocked:u,closeBlocked:d,showPins:f,loading:p,loadFailed:m,notice:h,copy:g,onClose:_,onFiltersChange:v,onShowPinsChange:y,onRetry:b,onSelect:x}){let S=a?g.noMatchesLabel:g.emptyLabel,C=(0,U.jsxs)(U.Fragment,{children:[h,(0,U.jsx)(dt,{filters:o,participants:s,showPins:f,copy:g,onFiltersChange:v,onShowPinsChange:y}),(0,U.jsxs)(`div`,{className:`review-comments-sidebar__body`,"aria-live":`polite`,children:[m?(0,U.jsxs)(`div`,{className:`review-comments-sidebar__state`,role:`alert`,children:[(0,U.jsx)(`span`,{children:g.loadErrorLabel}),(0,U.jsx)(H.Button,{size:`small`,onClick:b,children:g.retryLabel})]}):t.length===0&&!p?(0,U.jsx)(`div`,{className:`review-comments-sidebar__state`,children:S}):(0,U.jsx)(`div`,{className:`review-comments-sidebar__threads`,children:t.map(e=>(0,U.jsx)(_t,{thread:e,currentBuildNumber:n,buildHref:r&&e.root.buildPath?new URL(e.root.buildPath,r).href:void 0,resolution:c.get(e.root.id),selected:l===e.root.id,selectionBlocked:u,copy:g,onSelect:x},e.root.id))}),p?(0,U.jsxs)(`div`,{className:`review-comments-sidebar__loading`,children:[(0,U.jsx)(ce,{decorative:!0,size:`small`}),(0,U.jsx)(`span`,{children:g.loadingLabel})]}):null]})]});return e?(0,U.jsx)(it,{...e,title:g.heading,closeLabel:g.closeLabel,closeDisabled:d,closeShortcut:`Shift+C`,onClose:_,headerAccessory:(0,U.jsx)(tt,{children:i}),children:C}):(0,U.jsxs)(`aside`,{className:`review-comments-sidebar`,"aria-label":g.heading,children:[(0,U.jsxs)(`header`,{className:`review-comments-sidebar__header`,children:[(0,U.jsxs)(`span`,{className:`review-comments-sidebar__heading`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:g.heading}),(0,U.jsx)(tt,{children:i})]}),(0,U.jsx)(G,{icon:B,"aria-label":g.closeLabel,"aria-keyshortcuts":`Shift+C`,description:g.closeLabel,size:`small`,variant:`invisible`,className:`review-comments-sidebar__close`,disabled:d,onClick:_})]}),C]})}function yt({bridgeReady:e,copy:t,selectionBlocked:n,selecting:r,onCancelSelection:i,onStartAreaSelection:a,onStartElementSelection:o}){let s=(0,V.useId)(),c=!e||n,l=e?n?t.selectionBlockedLabel:t.commentMenuLabel:t.bridgeUnavailableLabel;if(r)return(0,U.jsx)(G,{icon:B,"aria-label":t.cancelSelectionLabel,description:t.cancelSelectionLabel,"aria-pressed":!0,size:`small`,variant:`default`,className:`review-comment-control__trigger`,onClick:i});let u=(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`start`,disabled:c,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-control__trigger`,variant:`secondary`,"aria-label":t.commentMenuLabel,"aria-describedby":s,leadingVisual:(0,U.jsx)(f,{size:16}),onClick:e=>{let t=e.currentTarget,n=t.closest(`.repository-workspace__content`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??window.innerHeight),i=Math.max(0,r-t.getBoundingClientRect().bottom-8);t.closest(`[data-testid="ActionMenu"]`)?.style.setProperty(`--review-comment-control-menu-height`,`${i}px`)},children:``}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":t.commentMenuLabel,children:[(0,U.jsx)(H.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`element`,leadingVisual:(0,U.jsx)(M,{size:16}),"aria-keyshortcuts":`C`,onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},children:t.commentOnElementLabel}),(0,U.jsx)(H.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`area`,leadingVisual:(0,U.jsx)(T,{size:16}),"aria-keyshortcuts":`H`,onClick:a,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),a())},children:t.highlightRegionLabel})]})]});return c?(0,U.jsxs)(`div`,{title:l,children:[u,(0,U.jsx)(W,{id:s,children:l})]}):(0,U.jsx)(H.Tooltip,{id:s,text:l,type:`description`,children:(0,U.jsx)(`div`,{children:u})})}var bt={search:``,currentBuildOnly:!1,currentPageOnly:!1,showResolved:!1,showRead:!0,onlyMine:!1,participant:null},xt={heading:`Comments`,closeLabel:`Close comments`,commentMenuLabel:`Add a comment`,commentOnElementLabel:`Comment on element`,highlightRegionLabel:`Highlight a region`,cancelSelectionLabel:`Cancel selection`,bridgeUnavailableLabel:`Adding comments needs the review bridge.`,selectionBlockedLabel:`Close or submit the open draft.`,selectionFailedLabel:`Hub could not anchor a comment to that element.`,areaTooSmallLabel:`Draw a larger region to add a comment.`,areaUnavailableLabel:`Hub could not save that region.`,searchLabel:`Search comments`,searchPlaceholder:`Search comments`,filterLabel:`Filters`,currentBuildFilterLabel:`Current build only`,currentPageFilterLabel:`Current page only`,participantFilterLabel:`Participant`,allParticipantsLabel:`All participants`,showResolvedLabel:`Show resolved`,unreadOnlyLabel:`Unread only`,onlyMineLabel:`Only your threads`,showPinsLabel:`Show pins`,sidebarShortcutLabel:`Shift+C`,loadingLabel:`Loading comments`,loadErrorLabel:`Comments could not be loaded.`,retryLabel:`Retry`,emptyLabel:`No comments have been added.`,noMatchesLabel:`No comments match these filters.`,buildLabel:`build %{number}`,movedAnchorLabel:`Moved`,changedAnchorLabel:`Context changed`,missingAnchorLabel:`Not found`,routeMismatchLabel:`Saved on another page`,resolvedLabel:`Resolved`,markerLabel:`Thread started by %{author}`,markerWithRepliesLabel:`Thread started by %{author}, %{count} comments`,unreadLabel:`Unread`,unreadMarkerLabel:`Unread thread started by %{author}`,unreadMarkerWithRepliesLabel:`Unread thread started by %{author}, %{count} comments`,replyCountOneLabel:`1 reply`,replyCountOtherLabel:`%{count} replies`,threadHeading:`Conversation`,backToCommentsLabel:`Back to comments`,resolvedByLabel:`Resolved by %{author}. Reopen this thread to reply.`,editedLabel:`Edited`,deletedCommentLabel:`Comment deleted`,addReactionLabel:`Add reaction`,reactionCountOneLabel:`%{reaction}, 1 reaction`,reactionCountOtherLabel:`%{reaction}, %{count} reactions`,reactionErrorLabel:`The reaction could not be changed.`,readErrorLabel:`Hub could not mark this conversation as read.`,markUnreadLabel:`Mark as unread`,markUnreadErrorLabel:`Hub could not mark this conversation as unread. Try again.`,reactionLabels:{"+1":`Thumbs up`,"-1":`Thumbs down`,laugh:`Laugh`,hooray:`Hooray`,confused:`Confused`,heart:`Heart`,rocket:`Rocket`,eyes:`Eyes`},commentActionsLabel:`Actions for comment by %{author}`,editLabel:`Edit`,deleteLabel:`Delete`,editCommentLabel:`Edit comment`,saveEditLabel:`Save`,savingEditLabel:`Saving comment`,cancelEditLabel:`Cancel`,editErrorLabel:`The comment could not be updated.`,deleteHeading:`Delete this comment?`,deletePromptLabel:`Deleted comment text cannot be recovered.`,confirmDeleteLabel:`Delete`,deletingLabel:`Deleting comment`,deleteErrorLabel:`The comment could not be deleted.`,replyLabel:`Reply`,replyPlaceholder:`Reply to this conversation`,replySubmitLabel:`Reply`,replySubmitTooltipMacLabel:`Reply (Cmd+Return)`,replySubmitTooltipOtherLabel:`Reply (Ctrl+Enter)`,replyingLabel:`Saving reply`,replyErrorLabel:`The reply could not be saved.`,resolveLabel:`Resolve`,resolvingLabel:`Resolving thread`,reopenLabel:`Reopen`,reopeningLabel:`Reopening thread`,resolutionErrorLabel:`The thread state could not be changed.`,resolvedReplyBlockedLabel:`Reopen this thread to reply.`,deletedReplyBlockedLabel:`Replies are closed.`,threadDiscardPromptLabel:`Your reply or edit has not been saved.`,composerHeading:`New comment`,composerLabel:`Comment`,composerPlaceholder:`Leave a review comment`,submitLabel:`Comment`,submitTooltipMacLabel:`Comment (Cmd+Return)`,submitTooltipOtherLabel:`Comment (Ctrl+Enter)`,submittingLabel:`Saving comment`,closeComposerLabel:`Cancel`,discardHeading:`Keep this draft?`,discardPromptLabel:`This comment has not been submitted.`,keepLabel:`Keep`,discardButtonLabel:`Discard`,bodyTooLongLabel:`Comments must be 10000 UTF-8 bytes or fewer.`,createErrorLabel:`The comment could not be saved.`};function St(e,t){let n=new Map;n.set(e.login.toLowerCase(),e);for(let e of t.toReversed()){let t=e.login.toLowerCase();n.has(t)||n.set(t,e)}return Array.from(n.values())}function Ct(e){let t=new Map,n=new Map;for(let r of e){if(r.kind===`root`){t.set(r.id,r);continue}let e=n.get(r.rootId)??[];e.push(r),n.set(r.rootId,e)}return Array.from(t.values()).flatMap(e=>{let t=(n.get(e.id)??[]).filter(e=>e.deletedAt===null).sort((e,t)=>Date.parse(e.createdAt)-Date.parse(t.createdAt)||e.id-t.id);return e.deletedAt!==null&&t.length===0?[]:[{root:e,replies:t,participants:St(e.author,t.map(e=>e.author)),lastActivityAt:t.at(-1)?.createdAt??e.createdAt,unread:e.viewerLastSeenActivityVersion===null||e.viewerLastSeenActivityVersionDate.parse(t.lastActivityAt)-Date.parse(e.lastActivityAt)||t.root.id-e.root.id)}var wt=new TextEncoder;function Tt(e,{prefix:t,required:n=!1}={}){return N().refine(r=>(!n||r!==``)&&(!t||r===``||r.startsWith(t))&&wt.encode(r).length<=e)}var Et=16384,Dt=2048,Q=2048,Ot=1024,kt=4096,At=1e3,jt=2e3,Mt=1e6,Nt=1e5,Pt=new TextEncoder,Ft=z().min(0).max(Mt),It=z().min(-Mt).max(Mt),Lt=z().min(0).max(Mt),Rt=E({x:z().min(0).max(1),y:z().min(0).max(1)}).strict(),zt=E({pathname:Tt(Dt,{prefix:`/`,required:!0}),search:Tt(Q,{prefix:`?`}),hash:Tt(Ot,{prefix:`#`})}).strict(),Bt=E({x:Ft,y:Ft,width:Lt,height:Lt}).strict();E({x:It,y:It}).strict();var Vt=E({width:z().min(1).max(Nt),height:z().min(1).max(Nt),scrollX:Ft,scrollY:Ft}).strict(),Ht=E({schemaVersion:I(1),kind:I(`element`),route:zt,selector:Tt(kt,{required:!0}),accessibleName:Tt(At),tagName:Tt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),selectedText:Tt(jt),rect:Bt,viewport:Vt,elementOffset:Rt}).strict().refine(e=>Pt.encode(JSON.stringify(e)).length<=Et),Ut=E({selector:Tt(kt,{required:!0}),accessibleName:Tt(At),tagName:Tt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),role:Tt(64),textExcerpt:Tt(500),rect:Bt}).strict(),Wt=E({schemaVersion:I(1),kind:I(`area`),route:zt,path:R(Rt).min(2).max(160),rect:Bt,viewport:Vt,elements:R(Ut).max(8)}).strict().refine(e=>Math.hypot(e.rect.width,e.rect.height)>=8).refine(e=>Pt.encode(JSON.stringify(e)).length<=Et),Gt=w(`kind`,[Ht,Wt]);w(`status`,[E({commentId:z().int().positive().max(2**53-1),status:te([`resolved`,`moved`]),rect:E({x:It,y:It,width:Lt,height:Lt}).strict(),point:E({x:It,y:It}).strict()}).strict(),E({commentId:z().int().positive().max(2**53-1),status:te([`changed`,`missing`,`route-mismatch`])}).strict()]);var Kt=z().int().positive().max(2**53-1),qt=N().refine(e=>!Number.isNaN(Date.parse(e))),Jt=qt.nullable(),Yt=E({login:N().min(1),name:N().nullable(),avatarUrl:N().nullable()}),Xt=te([`+1`,`-1`,`laugh`,`hooray`,`confused`,`heart`,`rocket`,`eyes`]),Zt=E({content:Xt,count:Kt,viewerHasReacted:j()}),Qt={id:Kt,body:N().nullable(),mentions:R(E({login:N().min(1),githubId:Kt})).optional(),createdAt:qt,updatedAt:qt,editedAt:Jt,deletedAt:Jt,author:Yt,viewerCanEdit:j(),viewerCanDelete:j(),reactions:R(Zt)},$t=E({...Qt,kind:I(`root`),buildNumber:Kt.nullable(),buildPath:N().startsWith(`/`).nullable(),draftRevisionId:Kt.nullable().optional(),anchor:Gt,resolvedAt:Jt,resolvedBy:Yt.nullable(),activityVersion:Kt,viewerLastSeenActivityVersion:Kt.nullable()}),en=E({...Qt,kind:I(`reply`),rootId:Kt}),tn=w(`kind`,[$t,en]),nn=w(`hasMore`,[E({comments:R(tn),nextCursor:N().min(1),hasMore:I(!0)}),E({comments:R(tn),nextCursor:F(),hasMore:I(!1)})]),rn=E({comments:R(tn).min(1).max(2)});function an(e,t){let{root:n}=e,{filters:r}=t;if(!r.showResolved&&n.resolvedAt!==null||!r.showRead&&!e.unread||r.onlyMine&&![n,...e.replies].some(e=>e.author.login.toLowerCase()===t.viewerLogin.toLowerCase())||r.currentBuildOnly&&(t.selectedDraftRevisionId==null?n.buildNumber!==t.selectedBuildNumber:n.draftRevisionId!==t.selectedDraftRevisionId)||r.participant!==null&&!e.participants.some(e=>e.login.toLowerCase()===r.participant?.toLowerCase())||r.currentPageOnly&&t.route!==null&&(n.anchor.route.pathname!==t.route.pathname||n.anchor.route.search!==t.route.search||n.anchor.route.hash!==t.route.hash))return!1;let i=r.search.trim().toLowerCase();if(!i)return!0;let a=n.anchor.kind===`element`?[n.anchor.accessibleName,n.anchor.selectedText,n.anchor.tagName]:n.anchor.elements.flatMap(e=>[e.accessibleName,e.textExcerpt,e.tagName,e.role]);return[n.body??``,n.author.login,n.author.name??``,n.buildNumber?.toString()??``,...e.replies.flatMap(e=>[e.body??``,e.author.login,e.author.name??``]),...a].join(`
+`).toLowerCase().includes(i)}var on=E({candidates:R(E({githubId:z().int().positive().max(2**53-1),login:N().min(1).max(39),avatarUrl:N().nullable()}))});async function $(e,t,n={}){let r=await fetch(e,{...n,headers:{"Content-Type":`application/json`,"X-Replica-Canvas-Token":t,...n.headers}}),i=await r.json().catch(()=>({error:K.invalidResponse}));if(!r.ok)throw Object.assign(Error(i.error||K.requestFailed),{code:i.code,statusCode:r.status,authorization:i.authorization});return i}function sn({error:e,busy:t,requested:n,onFix:r,onDismiss:i}){let a=(0,V.useId)();return(0,U.jsxs)(le,{title:K.commentingUnavailable,descriptionId:a,closeLabel:K.closeCommentingDialog,onClose:i,children:[(0,U.jsx)(`p`,{id:a,children:K.commentingDescription}),e?(0,U.jsx)(`p`,{role:`alert`,children:e}):null,(0,U.jsxs)(`div`,{className:`canvas-commenting-recovery__actions`,children:[(0,U.jsx)(H.Button,{variant:`primary`,disabled:t||n,onClick:r,children:n?K.commentingFixRequested:K.commentingFix}),(0,U.jsx)(H.Button,{variant:`subtle`,onClick:i,children:K.commentingDismiss})]})]})}function cn({identity:e,enabled:t,ready:n,bridgeProblem:r,token:i}){let[a,o]=(0,V.useState)(``),[s,c]=(0,V.useState)(!1),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(e);(0,V.useLayoutEffect)(()=>(p.current=e,()=>{p.current=``}),[e]),(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{o(``),c(!1),u(!1),f(!1)},0);return()=>{window.clearTimeout(e)}},[e,t]);async function m(){let t=e;o(``),c(!0);try{await $(`/api/commenting/fix`,i,{method:`POST`}),p.current===t&&f(!0)}catch(e){p.current===t&&o(e instanceof Error?e.message:String(e))}finally{p.current===t&&c(!1)}}return{visible:t&&!n&&!l&&!!r,error:a,busy:s,requested:d,onFix:()=>void m(),onDismiss:()=>u(!0)}}function ln({cancelLabel:e,confirmLabel:t,description:n,errorLabel:r,heading:i,loading:a=!1,loadingAnnouncement:o,compact:s=!1,condensed:c=!1,onCancel:l,onConfirm:u}){let d=(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:c?`primary`:void 0,className:`review-confirmation-panel__cancel`,onClick:l,children:e}),f=(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:c?`secondary`:`primary`,className:c?void 0:`review-confirmation-panel__danger`,disabled:a,"aria-busy":a,onClick:u,children:t});return(0,U.jsxs)(`div`,{className:`review-confirmation-panel${s||c?` review-confirmation-panel--compact`:``}${c?` review-confirmation-panel--condensed`:``}`,role:`alert`,children:[(0,U.jsxs)(`div`,{className:`review-confirmation-panel__copy`,children:[(0,U.jsx)(`strong`,{children:i}),c?(0,U.jsx)(W,{children:n}):(0,U.jsx)(`span`,{children:n})]}),r?(0,U.jsx)(`span`,{className:`review-confirmation-panel__error`,children:r}):null,(0,U.jsxs)(`div`,{className:`review-confirmation-panel__actions`,children:[c?f:d,c?d:f,a&&o?(0,U.jsx)(W,{role:`status`,children:o}):null]})]})}function un(){return(0,V.useContext)(nt)}function dn(e){let t=e.matchAll(/(?e[1]?[e[1].toLowerCase()]:[])))}function fn({value:e,onValueChange:t,onKeyDown:n,ref:r,...i}){let a=un(),o=(0,V.useRef)(null),s=(0,V.useRef)(null),c=(0,V.useRef)(null),l=(0,V.useId)(),[u,d]=(0,V.useState)(e.length),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(!1),[v,y]=(0,V.useState)(0),[b,x]=(0,V.useState)(0),[S,C]=(0,V.useState)({left:0,top:0,width:0}),w=e.slice(0,u).match(/(?:^|[\s(])@([a-zA-Z0-9-]*)$/)?.[1]?.toLowerCase(),T=a!==null&&w!==void 0&&!f&&!i.disabled,E=dn(e).length>10,D=m?.source===a&&m?.failed,O=g||m?.source!==a,k=(m?.source===a?m.candidates:[]).filter(e=>e.login.toLowerCase().includes(w??``)).slice(0,8),A=Math.min(b,Math.max(0,k.length-1));(0,V.useEffect)(()=>{o.current?.setCustomValidity(E?a?.copy.limit??``:``)},[a?.copy.limit,E]),(0,V.useEffect)(()=>{if(!T||!a)return;let e=!0,t=window.setTimeout(()=>{_(!0),a.load().then(t=>{e&&h({source:a,candidates:t,failed:!1})},()=>{e&&h({source:a,candidates:[],failed:!0})}).finally(()=>{e&&_(!1)})},150);return()=>{e=!1,window.clearTimeout(t)}},[T,v,a]),(0,V.useLayoutEffect)(()=>{if(!T)return;function e(){let e=o.current?.getBoundingClientRect();e&&C({left:e.left,width:e.width,top:Math.max(4,window.innerHeight-e.bottom<224?e.top-224:e.bottom)})}return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[T]);function j(n){if(w===void 0)return;let r=u-w.length-1,i=`@${n.login} `;t(e.slice(0,r)+i+e.slice(u)),p(!0);let a=r+i.length;window.requestAnimationFrame(()=>{o.current?.focus(),o.current?.setSelectionRange(a,a),d(a)})}function M(e,t){o.current=e,typeof t==`function`?t(e):t&&(t.current=e)}return(0,U.jsxs)(`div`,{className:`mention-input`,children:[(0,U.jsx)(`textarea`,{...i,ref:e=>M(e,r),value:e,"aria-autocomplete":a?`list`:void 0,"aria-controls":T?l:void 0,"aria-activedescendant":T&&k.length?`${l}-${A}`:void 0,onChange:e=>{d(e.currentTarget.selectionStart),p(!1),x(0),t(e.currentTarget.value)},onSelect:e=>d(e.currentTarget.selectionStart),onBlur:e=>{s.current?.contains(e.relatedTarget)||p(!0)},onKeyDown:e=>{if(T&&e.key===`Escape`)e.preventDefault(),e.stopPropagation(),p(!0);else if(T&&D&&!O&&e.key===`Tab`&&!e.shiftKey)e.preventDefault(),c.current?.focus();else{if(T&&!O&&!D&&k.length){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),x((A+(e.key===`ArrowDown`?1:-1)+k.length)%k.length);return}if((e.key===`Enter`||e.key===`Tab`)&&!e.nativeEvent.isComposing&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey){e.preventDefault();let t=k[A];t&&j(t);return}}n?.(e)}}}),E&&a?.copy.limit?(0,U.jsx)(`span`,{role:`alert`,children:a.copy.limit}):null,T&&a?(0,et.createPortal)((0,U.jsx)(`div`,{ref:s,id:l,className:`mention-input__suggestions`,style:S,onBlur:e=>{e.relatedTarget!==o.current&&!e.currentTarget.contains(e.relatedTarget)&&p(!0)},onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),p(!0),o.current?.focus()):e.key===`Tab`&&e.shiftKey&&(e.preventDefault(),o.current?.focus())},children:O?(0,U.jsx)(`span`,{role:`status`,children:a.copy.loading}):D?(0,U.jsxs)(`div`,{role:`alert`,children:[a.copy.error,` `,(0,U.jsx)(`button`,{ref:c,type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{y(v+1),o.current?.focus()},children:a.copy.retry})]}):(0,U.jsxs)(`ul`,{role:`listbox`,"aria-label":a.copy.suggestions,children:[k.map((e,t)=>(0,U.jsx)(`li`,{id:`${l}-${t}`,role:`option`,"aria-selected":t===A,children:(0,U.jsxs)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>j(e),children:[`@`,e.login]})},e.githubId)),k.length?null:(0,U.jsx)(`li`,{role:`presentation`,children:a.copy.empty})]})}),document.body):null]})}function pn({anchorPoint:e,anchorRectangle:t,anchorSelector:n,layoutKey:r,preserveVerticalSide:i=!1}){let a=(0,V.useRef)(null),o=(0,V.useRef)(null),[s,c]=(0,V.useState)({left:e.x+12,top:e.y+12}),l=(0,V.useCallback)(()=>{let r=a.current,s=r?.parentElement;if(!r||!s)return;let l=r.offsetWidth,u=r.offsetHeight,d=s.clientWidth-l-8,f=s.clientHeight-u-8,p,m,h=(n?s.querySelector(n)??s.parentElement?.querySelector(n):null)?.getBoundingClientRect(),g=s.getBoundingClientRect(),_=h?{x:h.left-g.left,y:h.top-g.top,width:h.height,height:h.height}:t;if(_){let e=_.x+_.width+12,t=_.x-12-l,n=e+l<=s.clientWidth-8,r=t>=8,i=s.clientWidth-8-_.x-_.width,a=_.x-8;p=n?e:r?t:i>=a?e:t,m=_.y}else{let t=e.x+12,n=e.y+12;p=t+l<=s.clientWidth-8?t:e.x-12-l;let r=o.current,a=i&&r?.x===e.x&&r.y===e.y?r.side:n+u<=s.clientHeight-8?`below`:`above`;i&&(o.current={x:e.x,y:e.y,side:a}),m=a===`below`?n:e.y-12-u}let v={left:Math.max(8,Math.min(p,d)),top:Math.max(8,Math.min(m,f))};c(e=>e.left===v.left&&e.top===v.top?e:v)},[e,t,n,i]);return(0,V.useLayoutEffect)(()=>{l();let e=a.current,t=e?.parentElement;if(!e||!t||typeof ResizeObserver!=`function`)return;let r=new ResizeObserver(l);r.observe(e),r.observe(t);let i=n?t.querySelector(n)??t.parentElement?.querySelector(n):null;return i&&r.observe(i),window.addEventListener(`resize`,l),()=>{r.disconnect(),window.removeEventListener(`resize`,l)}},[n,r,l]),{cardRef:a,position:s}}function mn(){return typeof navigator<`u`&&/Mac/i.test(navigator.platform)}function hn(e,{allowPlainEnter:t=!1}={}){let n=e.isComposing||e.keyCode===229,r=mn()?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey,i=t&&!e.metaKey&&!e.ctrlKey;return e.key===`Enter`&&!e.shiftKey&&!e.altKey&&!n&&!e.repeat&&(r||i)}var gn=new TextEncoder;function _n({anchorPoint:e,bodyMaximumBytes:t,copy:n,creating:r,submitError:i,onSubmit:a,onDiscard:o}){let s=(0,V.useId)(),[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(!1),m=(0,V.useRef)(!1),{cardRef:h,position:g}=pn({anchorPoint:e,layoutKey:`${u}:${f}:${i??``}`,preserveVerticalSide:!0}),_=gn.encode(c).length>t,v=c.trim()!==``&&!_&&!r&&!u,y=mn()?n.submitTooltipMacLabel:n.submitTooltipOtherLabel;(0,V.useEffect)(()=>{u?h.current?.querySelector(`.review-confirmation-panel__cancel`)?.focus({preventScroll:!0}):m.current&&h.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),m.current=u},[h,u]);function b(){r||(c.trim()===``?o():d(!0))}async function x(e){e.preventDefault(),v&&(await a(c)||p(!0))}return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-hidden":`true`,className:`review-comment-composer-backdrop`,onClick:b}),(0,U.jsx)(`section`,{ref:h,role:`dialog`,"aria-labelledby":s,className:`review-comment-composer`,style:{left:g.left,top:g.top},children:(0,U.jsxs)(`form`,{className:`review-comment-composer__form`,onSubmit:e=>{x(e)},onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),u?d(!1):b())},children:[(0,U.jsxs)(`header`,{className:`review-comment-composer__header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,id:s,children:n.composerHeading}),(0,U.jsx)(G,{icon:B,"aria-label":n.closeComposerLabel,description:n.closeComposerLabel,variant:`invisible`,type:`button`,disabled:r,onClick:b})]}),(0,U.jsx)(fn,{autoFocus:!0,"aria-label":n.composerLabel,placeholder:n.composerPlaceholder,value:c,rows:4,onValueChange:e=>{l(e),d(!1),p(!1)},onKeyDown:e=>{v&&hn(e.nativeEvent)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),_?(0,U.jsx)(`span`,{role:`alert`,className:`review-comment-composer__error`,children:n.bodyTooLongLabel}):null,f?(0,U.jsx)(pe,{variant:`critical`,title:n.createErrorLabel,description:i,className:`review-comment-composer__banner`}):null,u?(0,U.jsx)(ln,{heading:n.discardHeading,description:n.discardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,condensed:!0,onCancel:()=>d(!1),onConfirm:o}):(0,U.jsxs)(`footer`,{className:`review-comment-composer__actions`,children:[(0,U.jsx)(H.Button,{type:`button`,size:`small`,disabled:r,onClick:b,children:n.closeComposerLabel}),(0,U.jsx)(H.Tooltip,{text:y,type:`description`,children:(0,U.jsx)(H.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!v,"aria-busy":r,children:n.submitLabel})}),r?(0,U.jsx)(W,{role:`status`,children:n.submittingLabel}):null]})]})})]})}function vn({blockedLabel:e,confirmingDiscard:t,replyDraft:n,replyBodyTooLong:r,replyFailed:i,replyDisabled:a,replying:o,copy:s,onKeepDraft:c,onDiscardDraft:l,onSubmit:u,onDraftChange:d}){let f=(0,V.useRef)(null),p=n.trim()!==``&&!r&&!a&&!o&&!t&&!e,m=mn()?s.replySubmitTooltipMacLabel:s.replySubmitTooltipOtherLabel;return(0,V.useLayoutEffect)(()=>{f.current&&(f.current.style.height=`auto`,f.current.style.height=n?`${Math.min(f.current.scrollHeight,120)}px`:`2.5rem`)},[n]),t?(0,U.jsx)(ln,{heading:s.discardHeading,description:s.threadDiscardPromptLabel,cancelLabel:s.keepLabel,confirmLabel:s.discardButtonLabel,compact:!0,onCancel:c,onConfirm:l}):e?(0,U.jsx)(`span`,{className:`review-thread-reply-form__blocked`,children:e}):(0,U.jsxs)(`form`,{className:`review-thread-reply-form`,onSubmit:e=>{e.preventDefault(),p&&u()},children:[(0,U.jsxs)(`div`,{className:`review-thread-reply-form__composer`,children:[(0,U.jsx)(fn,{ref:f,"aria-label":s.replyLabel,placeholder:s.replyPlaceholder,value:n,rows:1,disabled:a,onValueChange:d,onKeyDown:e=>{p&&hn(e.nativeEvent,{allowPlainEnter:!0})&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),(0,U.jsx)(H.Tooltip,{text:m,type:`description`,children:(0,U.jsx)(`button`,{type:`submit`,className:`review-thread-reply-form__submit`,disabled:!p,"aria-label":s.replySubmitLabel,"aria-busy":o,children:(0,U.jsx)(_,{size:16})})})]}),r?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:s.bodyTooLongLabel}):null,i?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:s.replyErrorLabel}):null,o?(0,U.jsx)(W,{role:`status`,children:s.replyingLabel}):null]})}function yn({comment:e}){let t=e.body??``,n=new Set(e.mentions?.map(e=>e.login.toLowerCase())??[]),r=t.matchAll(/(?({content:e,emoji:xn(e)}));function Cn(e,t=0,n=0){if(t!==0||n!==0)return{x:t,y:n};let r=e.getBoundingClientRect();return{x:r.left+r.width/2,y:r.top+r.height/2}}function wn({comment:e,mutation:t,actionsDisabled:n,controlsHidden:r=!1,copy:i,onAdd:a,onRemove:o,onBurst:s}){let c=(0,V.useId)(),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(`outside-bottom`),v=t!==null&&(t.kind===`add-reaction`||t.kind===`remove-reaction`)&&t.commentId===e.id,y=e.reactions.flatMap(e=>{if(!m||e.content!==m.content)return[e];let t=e.count+Number(m.viewerHasReacted)-Number(e.viewerHasReacted);return t>0?[{...e,count:t,viewerHasReacted:m.viewerHasReacted}]:[]});m?.viewerHasReacted&&!e.reactions.some(({content:e})=>e===m.content)&&y.push({content:m.content,count:1,viewerHasReacted:!0});async function b(r,i){if(n||t!==null||p.current)return;let c=e.reactions.find(e=>e.content===r)?.viewerHasReacted??!1;p.current=!0,u(!1),h({content:r,viewerHasReacted:!c});try{if(!c){let e=Sn.find(e=>e.content===r);e&&s(e.emoji,i.x,i.y)}let e=c?await o(r):await a(r);u(!e)}catch{u(!0)}finally{p.current=!1,h(null)}}function x(e,t){b(e,Cn(t.currentTarget,t.clientX,t.clientY))}let S=(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:g,disabled:n,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-reactions__menu-trigger`,variant:`subtle`,"aria-label":i.addReactionLabel,"aria-describedby":c,"aria-busy":v||m!==null,leadingVisual:(0,U.jsx)(k,{size:16}),onClick:e=>{f(!0);let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0),a=Sn.length*36+16;_(rr?`outside-top`:`outside-bottom`)},children:``}),(0,U.jsx)(H.ActionMenu.Overlay,{"aria-label":i.addReactionLabel,children:Sn.map(e=>(0,U.jsx)(H.ActionMenu.Item,{value:e.content,leadingVisual:(0,U.jsx)(`span`,{className:`review-comment-reactions__picker-emoji`,children:e.emoji}),onClick:t=>x(e.content,t),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),b(e.content,Cn(t.currentTarget)))},children:i.reactionLabels[e.content]},e.content))})]});return r&&!l?null:(0,U.jsxs)(`div`,{className:`review-comment-reactions__layout`,children:[r?null:(0,U.jsxs)(`div`,{className:`review-comment-reactions`,children:[y.map(e=>{let r=Sn.find(({content:t})=>t===e.content);if(!r)return null;let a=(e.count===1?i.reactionCountOneLabel:i.reactionCountOtherLabel).replace(`%{reaction}`,i.reactionLabels[e.content]).replace(`%{count}`,e.count.toString());return(0,U.jsxs)(H.Button,{size:`small`,"aria-label":a,title:a,"aria-pressed":e.viewerHasReacted,disabled:n,"aria-busy":m?.content===e.content||v&&`content`in t&&t.content===e.content,className:e.viewerHasReacted?`review-comment-reaction--selected`:void 0,onClick:t=>x(e.content,t),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,children:r.emoji}),(0,U.jsx)(tt,{"aria-hidden":`true`,children:e.count})]},e.content)}),n?(0,U.jsxs)(`div`,{title:i.addReactionLabel,children:[S,(0,U.jsx)(W,{id:c,children:i.addReactionLabel})]}):(0,U.jsx)(H.Tooltip,{id:c,text:i.addReactionLabel,type:`description`,className:`review-comment-reactions__tooltip${d?` review-comment-reactions__tooltip--suppressed`:``}`,children:(0,U.jsx)(`div`,{onMouseEnter:e=>{e.currentTarget.querySelector(`[aria-expanded="true"]`)||f(!1)},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||f(!1)},children:S})})]}),l?(0,U.jsx)(`span`,{role:`alert`,className:`review-comment-reactions__error`,children:i.reactionErrorLabel}):null]})}function Tn({comment:e,mutation:t,copy:n,editing:r,editDraft:i,editBodyTooLong:a,editFailed:o,confirmingEditDiscard:s,saving:c,confirmingDelete:l,deleting:u,deleteFailed:d,actionsDisabled:f,onStartEdit:p,onEditDraftChange:m,onSaveEdit:h,onCancelEdit:g,onKeepEdit:_,onDiscardEdit:v,onRequestDelete:y,onCancelDelete:b,onDelete:x,onAddReaction:S,onRemoveReaction:C,onBurstReaction:w,onMarkUnread:T,markUnreadDisabled:E=!1}){let D=(0,V.useId)(),k=(0,V.useRef)(null),A=(0,V.useRef)(!1),[j,M]=(0,V.useState)(`outside-bottom`),N=e.author.name||`@${e.author.login}`,P=n.commentActionsLabel.replace(`%{author}`,`@${e.author.login}`),F=f&&(!T||E),I=!!(e.body&&e.viewerCanEdit),L=!!(e.body&&e.viewerCanDelete);return(0,V.useEffect)(()=>{s?k.current?.querySelector(`.review-confirmation-panel button`)?.focus({preventScroll:!0}):A.current&&k.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),A.current=s},[s]),(0,U.jsxs)(`article`,{className:`review-thread-message`,"data-review-message-id":e.id,children:[(0,U.jsxs)(`div`,{className:`review-thread-message__header`,children:[(0,U.jsx)(at,{src:e.author.avatarUrl,size:28}),(0,U.jsxs)(`span`,{className:`review-thread-message__byline`,children:[(0,U.jsx)(`strong`,{className:`review-thread-message__identity`,children:N}),(0,U.jsx)(gt,{value:e.createdAt}),e.editedAt?(0,U.jsx)(`span`,{children:n.editedLabel}):null]}),T||I||L?F?(0,U.jsxs)(`div`,{title:P,children:[(0,U.jsx)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,disabled:!0,children:(0,U.jsx)(H.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":P,"aria-describedby":D,leadingVisual:(0,U.jsx)(re,{size:16}),children:``})}),(0,U.jsx)(W,{id:D,children:P})]}):(0,U.jsx)(H.Tooltip,{id:D,text:P,type:`description`,children:(0,U.jsx)(`div`,{children:(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:j,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":P,"aria-describedby":D,leadingVisual:(0,U.jsx)(re,{size:16}),onClick:e=>{let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0);M(r<(T?128:88)&&i>r?`outside-top`:`outside-bottom`)},children:``}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":P,children:[T?(0,U.jsx)(H.ActionMenu.Item,{value:`mark-unread`,disabled:E,leadingVisual:(0,U.jsx)(ee,{size:16}),onClick:()=>{E||T()},onKeyDown:e=>{!E&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),T())},children:n.markUnreadLabel}):null,I?(0,U.jsx)(H.ActionMenu.Item,{value:`edit`,disabled:f,leadingVisual:(0,U.jsx)(ae,{size:16}),onClick:p,onKeyDown:e=>{!f&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),p())},children:n.editLabel}):null,L&&(T||I)?(0,U.jsx)(`li`,{role:`separator`,className:`review-thread-message__menu-divider`}):null,L?(0,U.jsx)(H.ActionMenu.Item,{value:`delete`,disabled:f||t!==null,className:`review-thread-message__delete-item`,leadingVisual:(0,U.jsx)(O,{size:16}),onClick:y,onKeyDown:e=>{!f&&t===null&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),y())},children:n.deleteLabel}):null]})]})})}):null]}),r?(0,U.jsxs)(`form`,{ref:k,className:`review-thread-message__edit`,onSubmit:e=>{e.preventDefault(),s||h()},children:[(0,U.jsx)(fn,{autoFocus:!0,"aria-label":n.editCommentLabel,value:i,rows:3,onValueChange:m}),a?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.bodyTooLongLabel}):null,o?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.editErrorLabel}):null,s?(0,U.jsx)(ln,{heading:n.discardHeading,description:n.threadDiscardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,compact:!0,onCancel:_,onConfirm:v}):(0,U.jsxs)(`div`,{className:`review-thread-message__actions`,children:[(0,U.jsx)(H.Button,{type:`button`,size:`small`,disabled:c,onClick:g,children:n.cancelEditLabel}),(0,U.jsx)(H.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:i.trim()===``||a||t!==null||c,"aria-busy":c,children:n.saveEditLabel}),c?(0,U.jsx)(W,{role:`status`,children:n.savingEditLabel}):null]})]}):l?(0,U.jsx)(ln,{heading:n.deleteHeading,description:n.deletePromptLabel,errorLabel:d?n.deleteErrorLabel:void 0,cancelLabel:n.cancelEditLabel,confirmLabel:n.confirmDeleteLabel,loading:u,loadingAnnouncement:n.deletingLabel,compact:!0,onCancel:b,onConfirm:x}):(0,U.jsx)(`p`,{className:e.body?`review-thread-message__body`:`review-thread-message__body review-thread-message__body--deleted`,children:e.body?(0,U.jsx)(yn,{comment:e}):n.deletedCommentLabel}),e.body&&(e.kind!==`root`||e.buildNumber!==null)?(0,U.jsx)(wn,{comment:e,mutation:t,actionsDisabled:f,controlsHidden:r||l,copy:n,onAdd:S,onRemove:C,onBurst:w}):null]})}function En(){let e=(0,V.useRef)(null),t=(0,V.useRef)([]),n=(0,V.useRef)(new Map),[r,i]=(0,V.useState)(!1),a=(0,V.useCallback)((e,n,r)=>{if(window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)return;let a=4+Math.floor(Math.random()*5),o=performance.now();for(let i=0;i{if(!r)return;let a=e.current,o=a?.getContext(`2d`);if(!a||!o){console.error(`Emoji reaction burst could not create a canvas context.`),t.current=[];let e=requestAnimationFrame(()=>i(!1));return()=>cancelAnimationFrame(e)}let s=a,c=o,l;function u(){let e=window.devicePixelRatio||1;s.width=Math.round(window.innerWidth*e),s.height=Math.round(window.innerHeight*e),c.setTransform(e,0,0,e,0,0)}function d(e,t){let r=Math.round(t),i=`${e}_${r}`;if(n.current.has(i))return n.current.get(i)??null;let a=document.createElement(`canvas`);a.width=r*2,a.height=r*2;let o=a.getContext(`2d`);return o?(o.font=`${r}px serif`,o.textAlign=`center`,o.textBaseline=`middle`,o.fillText(e,r,r),n.current.set(i,a),a):(console.error(`Emoji reaction burst could not draw an emoji.`),n.current.set(i,null),null)}function f(e){c.clearRect(0,0,window.innerWidth,window.innerHeight);let n=[];for(let r of t.current){if(e10&&(r.opacity-=.04),r.opacity<=0)continue;let t=d(r.emoji,r.size);t&&(c.globalAlpha=r.opacity,c.drawImage(t,r.x-t.width/2,r.y-t.height/2)),n.push(r)}c.globalAlpha=1,t.current=n,n.length>0?l=requestAnimationFrame(f):i(!1)}return u(),window.addEventListener(`resize`,u),l=requestAnimationFrame(f),()=>{cancelAnimationFrame(l),window.removeEventListener(`resize`,u)}},[r]),{burst:a,canvas:r?(0,et.createPortal)((0,U.jsx)(`canvas`,{ref:e,className:`review-emoji-burst`,"aria-hidden":`true`}),document.body):null}}var Dn=new TextEncoder;function On({thread:e,bodyMaximumBytes:t,mutation:n,onClose:r,onDraftStateChange:i,onReply:a,onEdit:o,onDelete:s,onResolve:c,onReopen:l}){let[u,d]=(0,V.useState)(``),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(``),[v,y]=(0,V.useState)(``),[b,x]=(0,V.useState)(!1),[S,C]=(0,V.useState)(!1),[w,T]=(0,V.useState)(null),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(!1),[A,j]=(0,V.useState)(!1),M=u.trim()!==``||m!==null,ee=Dn.encode(u).length>t,N=Dn.encode(g).length>t,P=e.root.resolvedAt!==null,F=e.root.deletedAt!==null||P;(0,V.useEffect)(()=>(i(M),()=>i(!1)),[M,i]);function I(){n||(u.trim()===``&&g===v?r():(C(!1),j(!0)))}function L(){d(``),h(null),_(``),y(``),C(!1),j(!1),i(!1),r()}async function R(){u.trim()===``||ee||n||(await a(u)?(d(``),p(!1)):p(!0))}function z(e){d(e),p(!1),j(!1)}function te(e){e.body&&(h(e.id),_(e.body),y(e.body),x(!1),T(null),D(!1))}function B(e){_(e),x(!1),C(!1),j(!1)}async function ne(e){g.trim()===``||N||n||(await o(e,g)?(h(null),_(``),y(``),C(!1),x(!1)):x(!0))}function re(){g===v?ie():C(!0)}function ie(){h(null),_(``),y(``),x(!1),C(!1),j(!1)}function ae(e){T(e),D(!1)}function oe(){T(null),D(!1)}async function se(e){n||(await s(e)?oe():D(!0))}async function H(){if(n||M)return;let e=P?await l():await c();k(!e)}return{state:{replyDraft:u,replyFailed:f,editingCommentId:m,editDraft:g,editFailed:b,confirmingEditDiscard:S,confirmingDeleteId:w,deleteFailed:E,resolutionFailed:O,confirmingDiscard:A,draftActive:M,replyBodyTooLong:ee,editBodyTooLong:N,resolved:P,replyBlocked:F},actions:{requestDismissal:I,discardAndClose:L,keepDraft:()=>j(!1),submitReply:R,changeReplyDraft:z,startEdit:te,changeEditDraft:B,saveEdit:ne,cancelEdit:re,keepEdit:()=>C(!1),discardEdit:ie,requestDelete:ae,cancelDelete:oe,deleteComment:se,changeResolution:H}}}function kn(e){let t=e.closest(`[data-testid="ActionMenu"]`);if(!t)return;let n=e.getBoundingClientRect(),r=e.closest(`.review-shell`)?.getBoundingClientRect(),i=Math.max(0,r?.top??0),a=Math.min(window.innerHeight,r?.bottom??window.innerHeight);t.style.setProperty(`--review-thread-menu-room-top`,`${Math.max(0,n.top-i-8)}px`),t.style.setProperty(`--review-thread-menu-room-bottom`,`${Math.max(0,a-n.bottom-8)}px`)}function An({thread:e,anchorPoint:t,bodyMaximumBytes:n,mutation:r,copy:i,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d,onAddReaction:f,onRemoveReaction:p,onMarkRead:m,onMarkUnread:h}){let g=(0,V.useId)(),_=(0,V.useRef)(null),v=(0,V.useRef)(0),y=(0,V.useRef)(e.root.activityVersion),b=(0,V.useRef)(null),x=(0,V.useRef)(!1),S=(0,V.useRef)(!1),C=(0,V.useRef)(!1),[w,T]=(0,V.useState)(!1),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(!1),[A,j]=(0,V.useState)(!1),{burst:M,canvas:ee}=En(),{state:N,actions:P}=On({thread:e,bodyMaximumBytes:n,mutation:r,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d}),F={x:12,y:12},I=[e.root,...e.replies],{cardRef:L,position:R}=pn({anchorPoint:t??F,...t?{anchorSelector:`[data-review-thread-id="${e.root.id}"]`,anchorRectangle:{x:t.x-16,y:t.y-16,width:32,height:32}}:{},layoutKey:[N.confirmingDiscard,N.confirmingEditDiscard,N.replyFailed,N.editFailed,N.deleteFailed,N.resolutionFailed,N.editingCommentId,N.confirmingDeleteId,N.resolved,w,O,e.replies.length,e.participants.length,I.map(e=>e.reactions.length).join(`,`)].join(`:`)}),z={"--review-thread-left":`${R.left}px`,"--review-thread-top":`${R.top}px`},te=N.replyBlocked?e.root.deletedAt?i.deletedReplyBlockedLabel:e.root.resolvedBy?i.resolvedByLabel.replace(`%{author}`,e.root.resolvedBy.name||`@${e.root.resolvedBy.login}`):i.resolvedReplyBlockedLabel:null,ne=(0,V.useCallback)(()=>{L.current?.querySelector(`.review-thread-conversation__close`)?.focus({preventScroll:!0})},[L]);(0,V.useEffect)(()=>{if(N.confirmingDiscard)L.current?.querySelector(`.review-thread-conversation__footer button`)?.focus({preventScroll:!0});else if(C.current){let e=N.editingCommentId===null?`.review-thread-reply-form textarea`:`.review-thread-message__edit textarea`;L.current?.querySelector(e)?.focus({preventScroll:!0})}C.current=N.confirmingDiscard},[L,N.confirmingDiscard,N.editingCommentId]),(0,V.useEffect)(()=>{let e=document.activeElement;return _.current=e instanceof HTMLElement?e:null,ne(),()=>{_.current?.isConnected&&_.current.focus()}},[ne]),(0,V.useEffect)(()=>{let t=y.current;e.unread&&b.current!==t&&(b.current=t,x.current=!0,D(!0),m(t).then(e=>T(!e)).catch(()=>T(!0)).finally(()=>{x.current=!1,D(!1)}))},[m,e.unread]);async function re(){if(!(x.current||S.current||r!==null)){b.current=y.current,S.current=!0,j(!0),k(!1);try{let e=await h();k(!e),e&&T(!1)}catch{k(!0)}finally{S.current=!1,j(!1)}}}return(0,V.useEffect)(()=>{function e(){N.confirmingDiscard?P.keepDraft():N.confirmingEditDiscard?P.keepEdit():P.requestDismissal()}function t(t){t.key!==`Escape`||t.defaultPrevented||t.isComposing||L.current?.querySelector(`[role="menu"]`)||t.target instanceof Element&&t.target.closest(`[role="menu"], [role="dialog"], dialog`)||(t.preventDefault(),e())}function n(){let t=document.activeElement;L.current?.querySelector(`[role="menu"]`)||t instanceof Element&&(t.closest(`[role="menu"]`)||t.closest(`[role="dialog"], dialog`)&&!L.current?.contains(t))||e()}return document.addEventListener(`keydown`,t),window.addEventListener(`replica:review-dismiss`,n),()=>{document.removeEventListener(`keydown`,t),window.removeEventListener(`replica:review-dismiss`,n)}},[P,L,N.confirmingDiscard,N.confirmingEditDiscard]),(0,U.jsxs)(`section`,{ref:L,role:`dialog`,"aria-labelledby":g,className:`review-thread-conversation${t?` review-thread-conversation--anchored`:` review-thread-conversation--docked`}`,style:z,onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||e.nativeEvent.isComposing||e.target instanceof Element&&e.target.closest(`[role="menu"]`)||(e.preventDefault(),N.confirmingDiscard?P.keepDraft():N.confirmingEditDiscard?P.keepEdit():P.requestDismissal())},children:[(0,U.jsxs)(`div`,{className:`review-thread-conversation__layout`,children:[(0,U.jsxs)(`header`,{className:`review-thread-conversation__header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,id:g,children:i.threadHeading}),e.root.buildNumber===null?null:(0,U.jsx)(H.Button,{size:`small`,disabled:N.draftActive||r!==null,"aria-busy":r!==null&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`),onClick:()=>{P.changeResolution()},children:N.resolved?i.reopenLabel:i.resolveLabel}),r&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`)?(0,U.jsx)(W,{role:`status`,children:N.resolved?i.reopeningLabel:i.resolvingLabel}):null,(0,U.jsx)(G,{icon:B,"aria-label":i.backToCommentsLabel,title:i.backToCommentsLabel,variant:`invisible`,className:`review-thread-conversation__close`,onClick:P.requestDismissal})]}),N.resolutionFailed?(0,U.jsx)(pe,{variant:`critical`,title:i.resolutionErrorLabel,className:`review-thread-conversation__banner`}):null,w?(0,U.jsx)(pe,{variant:`critical`,title:i.readErrorLabel,className:`review-thread-conversation__banner`}):null,O?(0,U.jsx)(pe,{variant:`critical`,title:i.markUnreadErrorLabel,className:`review-thread-conversation__banner`}):null,(0,U.jsx)(`div`,{className:`review-thread-conversation__messages`,onClickCapture:e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`button[data-testid="ActionMenu-button"]`);t&&e.currentTarget.contains(t)&&(v.current=e.currentTarget.scrollTop,kn(t))},onScroll:e=>{let t=e.currentTarget.scrollTop,n=t-v.current;if(v.current=t,n===0)return;let r=e.currentTarget.getBoundingClientRect();e.currentTarget.querySelectorAll(`[role="menu"]`).forEach(e=>{let t=e.closest(`[data-testid="ActionMenu"]`)?.querySelector(`button[data-testid="ActionMenu-button"]`);if(!t)return;let i=t.getBoundingClientRect();if(r.height>0&&(i.bottom<=r.top||i.top>=r.bottom)){let n=e.contains(document.activeElement);t.click(),n&&ne();return}let a=Number.parseFloat(e.style.top);Number.isFinite(a)&&(e.style.top=`${a-n}px`),kn(t)})},children:I.map(t=>(0,U.jsx)(Tn,{comment:t,mutation:r,copy:i,editing:N.editingCommentId===t.id,editDraft:N.editingCommentId===t.id?N.editDraft:``,editBodyTooLong:N.editingCommentId===t.id&&N.editBodyTooLong,editFailed:N.editingCommentId===t.id&&N.editFailed,confirmingEditDiscard:N.editingCommentId===t.id&&N.confirmingEditDiscard,saving:r?.kind===`edit`&&r.commentId===t.id,confirmingDelete:N.confirmingDeleteId===t.id,deleting:r?.kind===`delete`&&r.commentId===t.id,deleteFailed:N.confirmingDeleteId===t.id&&N.deleteFailed,actionsDisabled:r!==null&&r.kind!==`add-reaction`&&r.kind!==`remove-reaction`||N.confirmingDiscard||N.confirmingDeleteId!==null||N.replyDraft.trim()!==``||N.editingCommentId!==null&&N.editingCommentId!==t.id,onStartEdit:()=>P.startEdit(t),onEditDraftChange:P.changeEditDraft,onSaveEdit:()=>{P.saveEdit(t.id)},onCancelEdit:P.cancelEdit,onKeepEdit:P.keepEdit,onDiscardEdit:P.discardEdit,onRequestDelete:()=>P.requestDelete(t.id),onCancelDelete:P.cancelDelete,onDelete:()=>{P.deleteComment(t.id)},onAddReaction:e=>f(t.id,e),onRemoveReaction:e=>p(t.id,e),onBurstReaction:M,onMarkUnread:t.kind===`root`&&e.root.buildNumber!==null?()=>void re():void 0,markUnreadDisabled:E||A||r!==null},t.id))}),e.root.buildNumber!==null||N.confirmingDiscard?(0,U.jsx)(`div`,{className:`review-thread-conversation__footer${te&&!N.confirmingDiscard?` review-thread-conversation__footer--blocked`:``}`,children:(0,U.jsx)(vn,{blockedLabel:te,confirmingDiscard:N.confirmingDiscard,replyDraft:N.replyDraft,replyBodyTooLong:N.replyBodyTooLong,replyFailed:N.replyFailed,replyDisabled:r!==null||N.editingCommentId!==null,replying:r?.kind===`reply`&&r.commentId===e.root.id,copy:i,onKeepDraft:P.keepDraft,onDiscardDraft:P.discardAndClose,onSubmit:()=>{P.submitReply()},onDraftChange:P.changeReplyDraft})}):null]}),ee]})}function jn({selectionNotice:e,rateLimitNotice:t,composer:n,conversation:r}){return(0,U.jsxs)(U.Fragment,{children:[e||t?(0,U.jsxs)(`div`,{className:`canvas-selection-notice`,role:`alert`,children:[e?(0,U.jsx)(`div`,{children:e}):null,t?(0,U.jsx)(`div`,{children:t}):null]}):null,n?(0,U.jsx)(`div`,{className:`canvas-composer-shell`,children:(0,U.jsx)(_n,{...n})}):null,r?(0,U.jsx)(`div`,{className:`canvas-conversation-shell`,children:(0,U.jsx)(An,{...r},r.thread.root.id)}):null]})}function Mn({preference:e,disabled:t=!1}){let n=(0,V.useId)(),r=(0,V.useId)(),i=(0,V.useId)(),a=(0,V.useId)();return(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":n,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:n,children:q.settings}),(0,U.jsxs)(`div`,{className:`canvas-publish-settings__option`,children:[(0,U.jsx)(`label`,{id:r,htmlFor:i,children:q.alwaysCommit}),(0,U.jsx)(lt,{className:`canvas-publish-settings__toggle`,id:i,"aria-labelledby":r,"aria-describedby":e.error?a:void 0,checked:e.remember===!0,disabled:e.loading||e.remember===null,"aria-disabled":e.saving||t||void 0,onChange:n=>{!e.saving&&!t&&e.save(n)},size:`small`})]}),e.error?(0,U.jsxs)(`div`,{id:a,className:`canvas-publish-settings__error`,children:[(0,U.jsx)(pe,{title:e.error,variant:`critical`,layout:`compact`}),(0,U.jsx)(H.Button,{size:`small`,disabled:e.loading||e.saving,onClick:()=>void e.retry(),children:q.retrySettings})]}):null]})}function Nn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pn(e){return!Nn(e)||typeof e.pathname!=`string`||typeof e.search!=`string`||typeof e.hash!=`string`?null:{pathname:e.pathname,search:e.search,hash:e.hash}}function Fn({config:e,frameRef:t,onRouteChange:n,status:r,onStatusChange:i,onSelectHub:o,onConnect:s,onDisconnected:c,connectionButtonRef:l,connecting:u=!1,publication:d,publicationBusy:f=!1,dirty:p=!1,onPublish:m,onRetryPublication:h,publishPreference:g,open:_,onClose:v}){let[y,b]=(0,V.useState)({identity:``,items:[]}),x=r?.prototype?.repositoryId,S=r?.prototype?.id,C=r?.state===`connected`,w=r?.hubOrigin,T=(0,V.useMemo)(()=>({load:async()=>{if(!C||!w)throw Error(K.mentionSuggestionsError);return on.parse(await $(`/api/hub/mention-candidates?repositoryId=${x}&prototypeId=${S}`,e.token)).candidates},copy:{suggestions:K.mentionSuggestions,error:K.mentionSuggestionsError,loading:K.mentionSuggestionsLoading,empty:K.mentionSuggestionsEmpty,retry:xt.retryLabel,limit:K.mentionLimit}}),[e.token,C,w,x,S]),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(bt),[A,j]=(0,V.useState)(!0),[M,ee]=(0,V.useState)(null),[N,P]=(0,V.useState)(null),[F,I]=(0,V.useState)(``),[R,z]=(0,V.useState)(``),[te,B]=(0,V.useState)(``),[ne,re]=(0,V.useState)(``),[ie,ae]=(0,V.useState)(!1),[oe,se]=(0,V.useState)(!1),[ce,W]=(0,V.useState)(!1),[G,le]=(0,V.useState)(r?.discovery?.mismatch&&r.discovery.origin||r?.hubOrigin||``),[ue,de]=(0,V.useState)(!1),[fe,q]=(0,V.useState)(!1),[me,he]=(0,V.useState)(``),[ge,_e]=(0,V.useState)(``),[ve,ye]=(0,V.useState)(``),[be,J]=(0,V.useState)(!1),[xe,Se]=(0,V.useState)(null),[Ce,we]=(0,V.useState)(!1),[Te,Ee]=(0,V.useState)(new Map),[De,Oe]=(0,V.useState)(!1),[Y,ke]=(0,V.useState)(``),[je,Me]=(0,V.useState)(null),[Ne,Pe]=(0,V.useState)(!1),[Z,Fe]=(0,V.useState)(null),[Ie,Le]=(0,V.useState)(null),[Re,ze]=(0,V.useState)(!1),[Be,Ve]=(0,V.useState)(null),He=(0,V.useRef)(!1),Ue=(0,V.useRef)(0),We=(0,V.useRef)(!1),Ge=(0,V.useRef)(0),Ke=(0,V.useRef)(``),qe=(0,V.useRef)(``),Je=(0,V.useRef)(void 0),Ye=(0,V.useRef)(0),Xe=(0,V.useRef)(null),Ze=(0,V.useRef)(null),Qe=(0,V.useRef)(!1),$e=(0,V.useRef)(``),nt=(0,V.useRef)(_),at=(0,V.useRef)(void 0),ot=`${r?.hubOrigin??``}/${r?.repository??``}/${r?.branch??``}/${r?.state===`connected`?r.prototype?.id??``:``}`,lt=r?.reviewRevision,ut=lt?.id,dt=`${ot}/revision/${ut??``}`,ft=r?r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``:null,pt=(0,V.useRef)(ft),mt=r?.state,ht=mt===`unavailable`||mt===`denied`,gt=(0,V.useRef)(mt);(0,V.useEffect)(()=>{if(ft===null||pt.current===ft)return;let e=window.setTimeout(()=>{le(ft),pt.current=ft},0);return()=>window.clearTimeout(e)},[ft]),(0,V.useEffect)(()=>{if(!mt||gt.current===mt)return;if(mt!==`connected`&&mt!==`undiscovered`){gt.current=mt;return}let e=window.setTimeout(()=>{W(!1),gt.current=mt},0);return()=>window.clearTimeout(e)},[mt]);let _t=cn({identity:ot,enabled:r?.repositoryAuthorized===!0,ready:De,bridgeProblem:Y,token:e.token}),St=(0,V.useMemo)(()=>y.identity===dt?y.items:[],[y,dt]),wt=(0,V.useMemo)(()=>Ct(St),[St]),Tt=(0,V.useMemo)(()=>{let e=new Map(wt.flatMap(e=>e.participants.map(e=>[e.login.toLowerCase(),e])));return Array.from(e.values()).sort((e,t)=>(e.name||e.login).localeCompare(t.name||t.login))},[wt]),Et=(0,V.useMemo)(()=>{let e=new Map;for(let t of wt){let n=t.root.id,r=Te.get(n);if(r)e.set(n,{commentId:n,status:`resolved`,point:r,rect:r.rect});else if(De){let r=t.root.anchor.route;e.set(n,{commentId:n,status:M&&(r.pathname!==M.pathname||r.search!==M.search||r.hash!==M.hash)?`route-mismatch`:`missing`})}}return e},[De,Te,M,wt]),Dt=wt.find(e=>e.root.id===N),Q=r?.state===`connected`?r.prototype:null,Ot=r?.state===`disconnected`||r?.state===`pairing`||r?.state===`unconfigured`,kt=Q?.build?.author.login,At=kt&&/^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}(?:\[bot\])?$/i.test(kt)?`https://github.com/${encodeURIComponent(kt)}`:null,jt=Q?.build?.author.name?.trim()||(At?kt:null)||K.unknownCommitAuthor,Mt=Q?.canEdit&&Q.registered,Nt=Q?.id,Pt=Q?.build??null,Ft=Q?.viewerLogin||r?.viewerLogin,It=(0,V.useMemo)(()=>Ft?wt.filter(e=>an(e,{filters:O,viewerLogin:Ft,selectedBuildNumber:ut?null:Pt?.number,selectedDraftRevisionId:ut,route:M})):wt,[Pt?.number,ut,O,M,Ft,wt]),Lt=It.length,Rt=It.some(e=>e.unread),zt=!(!lt||r?.reviewError),Bt=!!(r?.repositoryAuthorized&&r.branch&&r.viewerLogin)||!!Q,Vt=Z!==null||Ce||Be!==null||Ne,Ht=_&&!E,Ut=typeof document>`u`?null:document.getElementById(`canvas-review-controls`),Wt=Z?Z.kind===`element`?{x:Z.rect.x-Z.viewport.scrollX+Z.rect.width*Z.elementOffset.x,y:Z.rect.y-Z.viewport.scrollY+Z.rect.height*Z.elementOffset.y}:st(Z,{x:Z.rect.x-Z.viewport.scrollX,y:Z.rect.y-Z.viewport.scrollY,width:Z.rect.width,height:Z.rect.height}).point:null;(0,V.useLayoutEffect)(()=>($e.current=ot,Ye.current+=1,Qe.current=!1,()=>window.clearTimeout(at.current)),[ot]),(0,V.useLayoutEffect)(()=>{Ke.current=dt,Ge.current+=1},[dt]),(0,V.useLayoutEffect)(()=>{_&&Xe.current?.focus({preventScroll:!0})},[_]),(0,V.useLayoutEffect)(()=>{!Z&&!Be&&!Ce&&Qe.current&&(Qe.current=!1,Ze.current?.focus({preventScroll:!0}))},[Z,Be,Ce]),(0,V.useEffect)(()=>{let e=nt.current;if(nt.current=_,!_||e||!E)return;if(Ce){v();return}let t=window.setTimeout(()=>{D(!1),P(null)},0);return()=>window.clearTimeout(t)},[E,Ce,v,_]),(0,V.useEffect)(()=>{if(!_)return;function e(e){e.key!==`Escape`||e.defaultPrevented||e.target instanceof Element&&e.target.closest(`[role="dialog"], dialog, [role="menu"]`)||(e.preventDefault(),v())}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[_,v]);let Kt=be&&xe===ot,qt=JSON.stringify(wt.slice(0,200).map(({root:e})=>({id:e.id,anchor:e.anchor}))),Jt=(0,V.useCallback)(async()=>{if(!Bt||We.current||Ke.current!==dt)return;let t=dt,n=++Ge.current,r=Ue.current;ae(!0),se(!1);try{let i=[],a=null;for(let t=0;t<100;t+=1){let n=nn.parse(await $(`/api/hub/comments${a||ut?`?${new URLSearchParams({...a?{cursor:a}:{},...ut?{local_revision_id:String(ut)}:{}})}`:``}`,e.token));if(i.push(...n.comments),a=n.nextCursor,!a)break;if(t===99)throw Error(K.commentPagesExceeded)}if(Ke.current!==t||Ge.current!==n||Ue.current!==r)return;b({identity:t,items:i}),se(!1),I(``)}catch(e){Ke.current===t&&Ge.current===n&&Ue.current===r&&(se(!0),I(e instanceof Error?e.message:String(e)))}finally{Ke.current===t&&Ge.current===n&&Ue.current===r&&ae(!1)}},[e.token,ut,Bt,dt]),Yt=(0,V.useRef)(Jt);(0,V.useLayoutEffect)(()=>{Yt.current=Jt},[Jt]),(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{b({identity:Ke.current,items:[]}),D(!1),k(bt),j(!0),ee(null),P(null),we(!1),J(!1),Se(null),he(``),_e(``),Ve(null),He.current=!1,We.current=!1,Ue.current+=1,Ee(new Map),Oe(!1),Me(null),Pe(!1),Fe(null),Le(null),z(``),B(``),se(!1)},0);return()=>window.clearTimeout(e)},[ot]),(0,V.useEffect)(()=>{if(!Bt)return;let e=window.setTimeout(()=>void Jt(),0);return()=>window.clearTimeout(e)},[Bt,Jt]),(0,V.useEffect)(()=>{if(!Bt)return;let e=window.setInterval(()=>void Jt(),3e4);return()=>window.clearInterval(e)},[Bt,Jt]),(0,V.useEffect)(()=>{if(!Nt)return;let t=new AbortController,n,r=5e3;async function i(){let a=Date.now();try{let n=await fetch(`/api/hub/events`,{headers:{"X-Replica-Canvas-Token":e.token},signal:t.signal});if(!n.ok||!n.body)throw Error(`Live review connection unavailable.`);ze(!1);let r=n.body.getReader(),i=new TextDecoder,a=``;for(;!t.signal.aborted;){let{value:e,done:t}=await r.read();if(t)throw Error(`Live review connection closed.`);a+=i.decode(e,{stream:!0});let n=a.split(`
`);a=n.pop()||``;for(let e of n)if(e.startsWith(`event: comments
-`)&&Mt(),e.startsWith(`event: error
-`))throw Error(`Live review connection failed.`)}}catch{t.signal.aborted||Ie(!0)}t.signal.aborted||(Date.now()-a>=3e4&&(r=5e3),n=window.setTimeout(()=>void i(),r),r=Math.min(r*2,6e4))}return i(),()=>{t.abort(),window.clearTimeout(n)}},[qe,ht,e.token,Mt]);let Nt=(0,V.useCallback)((n,r={})=>{let i=t.current;return!i?.contentWindow||!He.current?!1:(i.contentWindow.postMessage({type:n,nonce:He.current,...r},new URL(e.previewUrl??e.prototypeUrl).origin),!0)},[e.prototypeUrl,e.previewUrl,t]),Pt=(0,V.useCallback)(e=>{Ee&&Tt&&!Et&&(P(null),Pe(null),Ae(e),v(),Nt(`replica:canvas:select`,{mode:e}))},[Ee,Tt,v,Et,Nt]),Ft=(0,V.useCallback)(()=>{J&&(Nt(`replica:canvas:cancel-selection`),Ae(null))},[J,Nt]),It=(0,V.useCallback)(()=>{Nt(`replica:canvas:clear-selection`),Me(null),Pe(null)},[Nt]);(0,V.useEffect)(()=>{let r=t.current;if(!r){Te(new Map),De(!1);return}let i=new URL(e.previewUrl??e.prototypeUrl).origin,a=JSON.parse(jt),o=new Set(a.map(({id:e})=>e)),s=Date.now(),c=!1;function l(){He.current=crypto.randomUUID(),s=Date.now(),c=!1,De(!1),ke(``),Te(new Map),r?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:He.current},i),u()}function u(){a.length&&r?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:He.current,anchors:a},i)}function d(e){let t=e.data;if(e.source===r?.contentWindow&&e.origin===i&&Nn(t)&&t.nonce===He.current){if(t.type===`replica:canvas:bridge-error`)De(!1),ke(G.commentingMissing);else if(t.type===`replica:canvas:ready`){if(t.protocolVersion!==1){c=!0,De(!1),ke(G.commentingIncompatible);return}if(!Pn(t.route))return;s=Date.now(),c=!1,De(!0),ke(``),ee(Pn(t.route)),n?.(Pn(t.route),t.replaceRoute===!0)}else if(!c){if(t.type===`replica:canvas:conversation-dismiss-requested`)window.dispatchEvent(new Event(`replica:review-dismiss`));else if(t.type===`replica:canvas:resolved`){if(t.protocolVersion!==1||!Pn(t.route)||!Array.isArray(t.results)||t.results.length>200)return;s=Date.now(),De(!0),ke(``),ee(Pn(t.route)),n?.(Pn(t.route),t.replaceRoute===!0);let e=new Map;for(let n of t.results){if(!Nn(n)||typeof n.id!=`number`||typeof n.x!=`number`||typeof n.y!=`number`||!o.has(n.id)||!Number.isFinite(n.x)||!Number.isFinite(n.y)||n.x<0||n.y<0||n.x>r.clientWidth||n.y>r.clientHeight)continue;let t=Nn(n.rect)&&typeof n.rect.x==`number`&&typeof n.rect.y==`number`&&typeof n.rect.width==`number`&&typeof n.rect.height==`number`&&Number.isFinite(n.rect.x)&&Number.isFinite(n.rect.y)&&Number.isFinite(n.rect.width)&&Number.isFinite(n.rect.height)&&n.rect.width>=0&&n.rect.height>=0?{x:n.rect.x,y:n.rect.y,width:n.rect.width,height:n.rect.height}:{x:n.x,y:n.y,width:0,height:0};e.set(n.id,{x:n.x,y:n.y,rect:t})}Te(e)}else if(t.type===`replica:canvas:selected`){let e=Gt.safeParse(t.anchor);if(!e.success){Nt(`replica:canvas:cancel-selection`),Nt(`replica:canvas:clear-selection`),Ae(null),Pe(Nn(t.anchor)&&t.anchor.kind===`area`?`area-unavailable`:`element-unavailable`);return}Me(e.data),Ae(null),Pe(null)}else t.type===`replica:canvas:selection-failed`&&(t.reason===`element-unavailable`||t.reason===`area-too-small`||t.reason===`area-unavailable`)?(Ae(null),Pe(t.reason)):t.type===`replica:canvas:selection-cancelled`&&Ae(null)}}}function f(){Ae(null),Me(null),Pe(null),l()}r.addEventListener(`load`,f),window.addEventListener(`message`,d),l();let p=window.setInterval(()=>{Date.now()-s>=2e4&&(De(!1),Te(new Map),ke(c?G.commentingIncompatible:G.commentingMissing)),r.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:He.current},i),u()},2e3);return()=>{r.removeEventListener(`load`,f),window.removeEventListener(`message`,d),window.clearInterval(p)}},[qe,jt,e.prototypeUrl,e.previewUrl,t,n,Nt]);async function Lt(t,n,r,i){let a=qe,o=i?.kind===`add-reaction`||i?.kind===`remove-reaction`||i?.kind===`mark-unread`;if(i){if(ze.current)return!1;ze.current=!0,Re(i)}o&&(Ve.current=!0,Be.current+=1),z(``);try{let i=await $(`/api/hub/comments/${t}`,e.token,{method:n,...r?{body:JSON.stringify(r)}:{}});if(We.current!==a)return!1;if(o){let e=rn.parse(i);b(t=>{if(t.identity!==a)return t;let n=new Map(t.items.map(e=>[e.id,e]));for(let t of e.comments)n.set(t.id,t);return{identity:a,items:[...n.values()]}})}return o||(Ke.current=window.setTimeout(()=>void Mt(),0)),!0}catch(e){return We.current===a&&(I(e instanceof Error?e.message:String(e)),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&z(e.message)),!1}finally{i&&We.current===a&&(o&&(Ve.current=!1,Be.current+=1,Ke.current=window.setTimeout(()=>void Mt(),0)),ze.current=!1,Re(null))}}async function Rt(t){if(!gt||!X||ze.current)return!1;let n=qe;ze.current=!0,Re({kind:`create`}),z(``);try{let r=rn.parse(await $(`/api/hub/comments`,e.token,{method:`POST`,body:JSON.stringify({review_comment:{build_number:gt.number,body:t,anchor:X}})}));if(We.current!==n)return!1;let i=r.comments.find(e=>e.kind===`root`);return i?(b(e=>{if(e.identity!==n)return e;let t=new Map(e.items.map(e=>[e.id,e]));for(let e of r.comments)t.set(e.id,e);return{identity:n,items:[...t.values()]}}),It(),P(i.id),!0):!1}catch(e){return We.current===n&&(I(e instanceof Error?e.message:String(e)),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&z(e.message)),!1}finally{We.current===n&&(ze.current=!1,Re(null))}}function zt(){Et||(E?(P(null),D(!1)):(D(!0),_&&v()))}let Bt=r?.repository&&r.branch?`https://github.com/${r.repository.split(`/`).map(e=>encodeURIComponent(e)).join(`/`)}/tree/${encodeURIComponent(r.branch)}`:null,Vt=r?.branch&&Bt?(0,U.jsxs)(`a`,{className:`canvas-hub-publication__branch`,href:Bt,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open ${r.branch} on GitHub`,children:[(0,U.jsx)(a,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`span`,{children:r.branch})]}):r?.branch?(0,U.jsxs)(`span`,{className:`canvas-hub-publication__branch`,children:[(0,U.jsx)(a,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`span`,{children:r.branch})]}):null,Ht=(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-origin-title`,children:`Hub`}),r&&r.state!==`unconfigured`?(0,U.jsx)(`div`,{className:`canvas-hub-origin`,children:r.hubOrigin?(0,U.jsx)(`a`,{href:Q?new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}`,r.hubOrigin).href:r.hubOrigin,target:`_blank`,rel:`noopener noreferrer`,children:r.hubOrigin}):(0,U.jsx)(`span`,{children:`URL unavailable`})}):null,oe||r?.state===`disconnected`||r?.state===`unconfigured`?(0,U.jsxs)(`form`,{className:`canvas-hub-origin-form`,onSubmit:e=>{e.preventDefault(),!(W||de)&&(ue(!0),se(!0),I(``),o(ce).then(()=>{se(!1)}).catch(e=>I(e.message)).finally(()=>ue(!1)))},children:[(0,U.jsxs)(`div`,{className:`canvas-hub-origin-field`,children:[(0,U.jsxs)(`label`,{children:[G.hubUrl,(0,U.jsx)(`input`,{type:`url`,required:!0,value:ce,placeholder:`https://hub.example.com`,disabled:W||de,onChange:e=>le(e.target.value)})]}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,className:`canvas-icon-button`,leadingVisual:(0,U.jsx)(L,{size:16}),"aria-label":G.resetHubUrl,title:G.resetHubUrl,disabled:W||de,"aria-busy":de,onClick:()=>{fe(!0),I(``),$(`/api/hub/discovery`,e.token,{method:`POST`,body:`{}`}).then(async e=>{if(e.discovery?.state!==`valid`||!e.discovery.origin)throw Error(e.discovery?.message||G.resetHubUnavailable);le(e.discovery.origin),await i()}).catch(e=>I(e.message)).finally(()=>fe(!1))},children:(0,U.jsx)(`span`,{className:`visually-hidden`,children:G.resetHubUrl})})]}),(0,U.jsx)(`p`,{children:G.hubHttpsHint}),(0,U.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,U.jsx)(H.Button,{type:`submit`,size:`small`,disabled:W||de,children:`Save Hub`}),oe&&r?.state!==`unconfigured`&&r?.state!==`disconnected`?(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,disabled:W||de,onClick:()=>se(!1),children:`Cancel`}):null]})]}):null]});return(0,U.jsxs)(it,{source:T,children:[$e.visible?(0,U.jsx)(sn,{...$e}):null,Q&&Ot?(0,tt.createPortal)((0,U.jsxs)(`div`,{className:`canvas-review-controls review-shell__comment-actions`,role:`group`,"aria-label":bt.heading,children:[(0,U.jsx)(vt,{bridgeReady:Ee&&Tt,copy:bt,selectionBlocked:Et,selecting:J!==null,onCancelSelection:Ft,onStartAreaSelection:()=>Pt(`area`),onStartElementSelection:()=>Pt(`element`)}),(0,U.jsx)(H.Tooltip,{text:Et?bt.selectionBlockedLabel:`${bt.heading} (${bt.sidebarShortcutLabel})`,type:`description`,children:(0,U.jsxs)(H.Button,{className:`canvas-comments-toggle review-shell__comments-toggle`,variant:`secondary`,size:`small`,"aria-label":`${bt.heading}, ${Ct}${wt?`, ${bt.unreadLabel}`:``}`,"aria-expanded":E,"aria-keyshortcuts":`Shift+C`,disabled:!gt||Et,onClick:zt,children:[(0,U.jsx)(nt,{children:Ct}),wt?(0,U.jsx)(`span`,{className:`canvas-comments-unread-badge review-shell__unread-badge`,"aria-hidden":`true`}):null]})})]}),Ot):null,A&&xt.length&&Ee?(0,U.jsx)(`div`,{className:`canvas-marker-layer`,children:(0,U.jsx)(lt,{threads:xt,resolutions:st,selectedThreadId:N,selectionBlocked:Se,focusSelectedMarker:!1,showAreaHighlightsOnlyWhenSelected:!0,copy:bt,onSelect:e=>P(e.root.id)})}):null,(0,U.jsxs)(at,{className:`canvas-hub-panel`,contentClassName:`canvas-hub-content`,title:`Replica Hub`,label:`Hub`,open:Dt,closeLabel:`Close Hub`,closeRef:Ue,onClose:v,children:[F?(0,U.jsx)(`p`,{role:`alert`,children:F}):null,te?(0,U.jsx)(`p`,{role:`alert`,children:te}):null,r?null:(0,U.jsx)(`p`,{children:`Checking Hub connection…`}),!ut&&!Ze&&r?.message?(0,U.jsx)(`p`,{role:`status`,children:r.message}):null,Ze?(0,U.jsxs)(`div`,{className:`canvas-hub-status`,children:[(0,U.jsx)(me,{variant:`warning`,layout:`compact`,title:r?.message||Y.hubUnavailable}),(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:f,"aria-busy":f,leadingVisual:f?(0,U.jsx)(L,{size:16}):void 0,onClick:h||(()=>void i()),children:Y.retry})]}):null,!ut&&!Ze&&d&&m&&h?(0,U.jsx)(je,{publication:d,busy:f,dirty:p,onPublish:m,onRetry:h}):null,ut?(0,U.jsxs)(`section`,{className:`canvas-hub-connection`,children:[(0,U.jsx)(`p`,{children:G.connectionBeforePublishing}),(0,U.jsx)(H.Button,{ref:l,variant:`primary`,onClick:s,disabled:u,children:u?G.connectionOpeningBrowser:G.connectToHub})]}):null,!ut&&(!oe&&(r?.discovery?.mismatch||[`invalid`,`unreachable`].includes(r?.discovery?.state||``))||r?.state===`unconfigured`)?(0,U.jsxs)(`div`,{className:`canvas-hub-settings`,children:[!oe&&r?.discovery?.mismatch?(0,U.jsx)(`p`,{role:`alert`,children:`The repository configuration differs from your selected Hub. Your connection has not changed. Disconnect Hub before selecting another URL.`}):null,!oe&&[`invalid`,`unreachable`].includes(r?.discovery?.state||``)?(0,U.jsx)(`p`,{role:`alert`,children:r?.discovery?.message}):null,r?.state===`unconfigured`?(0,U.jsx)(`p`,{children:`Enter your Hub URL to connect.`}):null]}):null,r?.state===`undiscovered`&&!d?(0,U.jsxs)(`p`,{children:[`Connected to `,r.repository,`. Hub has not discovered`,` `,r.branch||`a prototype branch`,`. Your repository connection is ready. Push a named branch to make its Builds and reviews available.`]}):null,Q?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`section`,{className:d&&d.kind!==`ready`&&m&&h?`canvas-hub-publication canvas-hub-publication--after-status`:`canvas-hub-publication`,"aria-label":`Prototype`,children:mt&&At?(0,U.jsxs)(`form`,{className:`canvas-hub-publication__form`,onSubmit:t=>{t.preventDefault(),$(`/api/hub/metadata`,e.token,{method:`PATCH`,body:JSON.stringify({name:pe,description:he,startPage:_e})}).then(async()=>{be(!1),await i()}).catch(e=>I(e.message))},children:[(0,U.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,U.jsxs)(`label`,{className:`canvas-hub-publication__name-field`,children:[(0,U.jsx)(`span`,{className:`visually-hidden`,children:`Name`}),(0,U.jsx)(`input`,{required:!0,maxLength:255,value:pe,onChange:e=>K(e.target.value)})]}),(0,U.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),Vt,(0,U.jsxs)(`label`,{className:`canvas-hub-publication__description-field`,children:[(0,U.jsx)(`span`,{className:`visually-hidden`,children:`Description`}),(0,U.jsx)(`textarea`,{value:he,placeholder:`Add a description`,onChange:e=>ge(e.target.value)})]}),(0,U.jsxs)(`label`,{className:`canvas-hub-publication__start-page-field`,children:[G.startPage,(0,U.jsx)(`input`,{value:_e,placeholder:`/`,"aria-describedby":`canvas-start-page-hint`,onChange:e=>ve(e.target.value)})]}),(0,U.jsx)(`p`,{id:`canvas-start-page-hint`,className:`canvas-hub-publication__hint`,children:G.startPageHint}),(0,U.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,U.jsx)(H.Button,{type:`submit`,size:`small`,children:`Save metadata`}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,onClick:()=>be(!1),children:`Cancel`})]})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-large`,children:Q.name||r?.branch}),(0,U.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),Vt,Q.description?(0,U.jsx)(`p`,{className:`canvas-hub-publication__description`,children:Q.description}):null,(0,U.jsxs)(`p`,{className:`canvas-hub-publication__description canvas-hub-publication__start-page`,children:[G.startPage,`: `,(0,U.jsx)(`code`,{children:Q.startPage||`/`})]}),mt?(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:()=>{K(Q.name||``),ge(Q.description||``),ve(Q.startPage||``),q(qe),be(!0)},children:G.editDetails}):null]})}),(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-build-title`,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-build-title`,children:G.latestBuild}),Q.build?(0,U.jsxs)(`div`,{className:`canvas-hub-build`,children:[(0,U.jsxs)(`div`,{className:`canvas-hub-build__identity`,children:[(0,U.jsx)(`a`,{href:Q.build.url,target:`_blank`,rel:`noopener noreferrer`,children:G.buildTitle(Q.build.number)}),(0,U.jsx)(`code`,{title:Q.build.commitSha,"aria-label":`${G.buildCommit} ${Q.build.commitSha}`,children:Q.build.commitSha.slice(0,7)})]}),(0,U.jsx)(`p`,{children:ft?(0,U.jsx)(`a`,{className:`canvas-hub-build__author`,href:ft,target:`_blank`,rel:`noopener noreferrer`,children:pt}):(0,U.jsx)(`span`,{children:pt})}),r?.commitSha&&r.commitSha!==Q.build.commitSha?(0,U.jsx)(`p`,{className:`canvas-hub-build__notice`,children:`Local checkout differs from this Build`}):null]}):(0,U.jsxs)(`p`,{children:[`No successful imported Build yet. Current Build: `,Q.buildState||`none`,`.`]}),Q.build&&r?.hubOrigin?(0,U.jsx)(`a`,{className:`canvas-hub-build__history`,href:new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}/builds`,r.hubOrigin).href,target:`_blank`,rel:`noopener noreferrer`,children:G.showBuildHistory}):null]})]}):null,ut?null:(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-origin-title`,children:[Ht,r?.hubOrigin&&[`connected`,`undiscovered`,`pairing`,`denied`,`unavailable`].includes(r.state)?(0,U.jsx)(`div`,{className:`canvas-hub-disconnect`,children:(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:()=>{B(``),$(`/api/hub/disconnect`,e.token,{method:`POST`,body:`{}`}).then(async()=>{le(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),se(!0),await i(),c?.()}).catch(e=>{B(G.disconnectFailed(r.hubOrigin||``,e.message)),le(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),se(!0)})},children:`Disconnect Hub`})}):null]}),Q?.registered&&Q.build&&g?(0,U.jsx)(Mn,{preference:g,disabled:f}):null]}),Q?(0,U.jsx)(_t,{frame:{open:E,className:`canvas-comments-sidebar-shell`,contentClassName:`canvas-comments-sidebar-content`},threads:xt,currentBuildNumber:gt?.number||0,buildLinkOrigin:r?.hubOrigin,totalCount:xt.length,hasThreads:rt.length>0,filters:O,participants:ot,resolutions:st,selectedThreadId:N,selectionBlocked:Et,closeBlocked:Se,showPins:A,loading:ne,loadFailed:ie,notice:Fe||gt&&!Tt?(0,U.jsxs)(`div`,{className:`canvas-comments-live-notices`,children:[Fe?(0,U.jsx)(`p`,{className:`canvas-comments-live-status`,role:`status`,children:`Live updates paused; checking every 30 seconds.`}):null,gt&&!Tt?(0,U.jsxs)(`p`,{className:`canvas-comments-live-status`,children:[`New comments are available when the local checkout matches Build #`,gt.number,`.`]}):null]}):null,copy:bt,onClose:zt,onFiltersChange:k,onShowPinsChange:j,onRetry:()=>void Mt(),onSelect:e=>P(e.root.id)}):null,(0,U.jsx)(An,{selectionNotice:Ne?Ne===`area-too-small`?bt.areaTooSmallLabel:Ne===`area-unavailable`?bt.areaUnavailableLabel:bt.selectionFailedLabel:null,rateLimitNotice:R&&!Dt?R:null,composer:X&&kt?{anchorPoint:kt,bodyMaximumBytes:1e4,copy:bt,creating:Le?.kind===`create`,onSubmit:Rt,onDiscard:It}:null,conversation:Z?{thread:Z,anchorPoint:we.get(Z.root.id)??null,bodyMaximumBytes:1e4,mutation:Le,copy:bt,onClose:()=>P(null),onDraftStateChange:Ce,onReply:e=>Lt(`${Z.root.id}/replies`,`POST`,{review_comment:{body:e}},{kind:`reply`,commentId:Z.root.id}),onEdit:(e,t)=>Lt(`${e}`,`PATCH`,{review_comment:{body:t}},{kind:`edit`,commentId:e}),onDelete:e=>Lt(`${e}`,`DELETE`,void 0,{kind:`delete`,commentId:e}),onResolve:()=>Lt(`${Z.root.id}/resolution`,`POST`,void 0,{kind:`resolve`,commentId:Z.root.id}),onReopen:()=>Lt(`${Z.root.id}/resolution`,`DELETE`,void 0,{kind:`reopen`,commentId:Z.root.id}),onAddReaction:(e,t)=>Lt(`${e}/reactions`,`POST`,{review_comment_reaction:{content:t,activity_version:Z.root.activityVersion}},{kind:`add-reaction`,commentId:e,content:t}),onRemoveReaction:(e,t)=>Lt(`${e}/reactions/${encodeURIComponent(t)}`,`DELETE`,{review_comment_reaction:{activity_version:Z.root.activityVersion}},{kind:`remove-reaction`,commentId:e,content:t}),onMarkRead:e=>Lt(`${Z.root.id}/read`,`POST`,{review_thread_read:{activity_version:e}}),onMarkUnread:()=>Lt(`${Z.root.id}/read`,`DELETE`,void 0,{kind:`mark-unread`,commentId:Z.root.id})}:null})]})}function In(e,t,n){function r(e,t,n){return{kind:e,title:t,detail:n}}if(!e||!t)return n.kind===`unknown`?r(`retry`,J.unavailable,n.detail):r(`checking`,J.checking,J.checkingDetail);if(!e.stats.branch)return r(`restricted`,J.restricted,n.detail);if(t.repository&&t.repository!==e.stats.repository||t.branch&&t.branch!==e.stats.branch)return r(`retry`,J.unavailable,J.changedDetail);if(t.discovery?.state===`local`||e.stats.repository?.startsWith(`local/`))return r(`restricted`,J.restricted,J.local);if(t.registrationReason===`branch_not_reviewable`||e.stats.branch===t.discovery?.defaultBranch)return r(`restricted`,J.restricted,Y.registrationReasons.get(`branch_not_reviewable`).description);if([`disconnected`,`pairing`,`unconfigured`].includes(t.state))return r(`connect`,J.connect,J.connectDetail);if([`denied`,`unavailable`].includes(t.state))return r(`retry`,J.unavailable,t.message||J.unavailableDetail);if(t.repository!==e.stats.repository||t.branch!==e.stats.branch)return r(`retry`,J.unavailable,J.unavailableDetail);let i=t.prototype;if(t.state===`connected`&&i?.branch===e.stats.branch&&i.registered&&i.published&&i.build&&Number.isSafeInteger(i.build.number)&&i.build.number>0)return r(`ready`,J.ready,J.readyDetail);if(t.state===`connected`&&(!i||i.branch!==e.stats.branch||typeof i.published!=`boolean`||i.published))return r(`retry`,J.unavailable,J.unavailableDetail);let a=t.state===`connected`?i?.canEdit:t.canPublish;if(a===!1)return r(`restricted`,J.restricted,J.publishDenied);let o=e.stats.remoteBranch,s=t.state===`undiscovered`&&t.repositoryAuthorized===!0&&!i&&(!t.commitSha||t.commitSha===e.stats.commitSha)&&o?.repository===e.stats.repository&&o?.branch===e.stats.branch&&o?.commitSha===e.stats.commitSha&&(o?.state===`absent`||o?.state===`present`&&e.publishRequest?.commitSha===e.stats.commitSha&&([`requested`,`in_progress`].includes(e.publishRequest?.state??``)||e.publishRequest?.state===`idle`&&e.publishRequest.remoteState===`absent`))&&![`loading`,`unknown`,`detached`,`workflow_missing`].includes(n.kind),c=a===void 0&&s;if(a!==!0&&!c)return r(`retry`,J.unavailable,J.permissionUnknown);let l=t.registrationReason||i?.registrationReason;if(n.error&&(l!==`remote_branch_missing`||!s)){let e=[`successful_build_required`,`already_registered`].includes(l||``),t=[`write_access_required`,`repository_mismatch`,`branch_not_reviewable`,`remote_branch_missing`,`branch_authorship_required`].includes(l||``);return{...r(e?`progress`:t?`restricted`:`retry`,n.error.title,n.error.description),...e?{publication:{...n,action:`retry`,label:Y.retry}}:{}}}if(n.kind===`detached`)return r(`restricted`,J.restricted,n.detail);if(n.action===`retry`)return r(`retry`,J.unavailable,n.detail);if(n.kind===`loading`)return r(`checking`,J.checking,n.detail);let u=c?`${J.publishDetail} ${J.publishPermissionUnverified}`:J.publishDetail,d=s&&l===`remote_branch_missing`?{...n,error:void 0}:n;return n.action===`publish`?{...r(`publish`,J.publish,u),publication:d}:{...r(`progress`,J.preparing,u),publication:d}}function Ln({open:e,onToggle:t,buttonRef:n}){return(0,U.jsx)(W,{icon:C,"aria-label":G.controls,description:G.controls,ref:n,size:`small`,variant:`default`,className:`canvas-controls-toggle`,"aria-expanded":e,onClick:t})}function Rn({toolbarRef:e,config:t,onPublish:n,publishButtonRef:r,hubButtonRef:a,titleButtonRef:o,onBuildDetails:s,publishing:c,state:l,prototypeName:u,hubOpen:d,onHub:f,publication:p,onControls:m,controlsOpen:h,controlsButtonRef:g,onShare:_,shareButtonRef:v}){let y=l?.publishStatus??{state:`unavailable`,detail:G.statusUnavailable},b=u?.trim()||l?.stats.branch||l?.name||t.name,x=l?[b,l.stats.repository,l.stats.commitSha?.slice(0,7),l.stats.workingTree===`changed`?G.workingTreeChanged:G.workingTreeClean,l.stats.urlHost].filter(Boolean).join(` · `):b,S=c||(p?p.action===`none`:y.state===`requested`||y.state===`in_progress`||y.state===`published`),C=c||(p?p.kind===`requested`||p.kind===`queued`||p.kind===`building`||p.kind===`importing`||p.kind===`awaiting_build`||p.kind===`registration`:y.state===`requested`||y.state===`in_progress`),w=!C&&(p?p.kind===`ready`:y.state===`published`),T=(0,U.jsx)(H.Button,{type:`button`,ref:r,className:`canvas-publish-button`,variant:`secondary`,size:`small`,leadingVisual:C?(0,U.jsx)(L,{size:16}):zn(y.state),disabled:S&&!w,"aria-busy":C,title:w?void 0:p?.detail||y.detail,onClick:S||w?void 0:n,children:p?.label||G.publishLabels[y.state]});return(0,U.jsxs)(`header`,{ref:e,className:`canvas-toolbar`,children:[(0,U.jsx)(H.Button,{type:`button`,className:`canvas-title`,ref:o,variant:`subtle`,size:`small`,title:x,disabled:!l,onClick:s,children:b}),(0,U.jsx)(`div`,{id:`canvas-review-controls`,className:`canvas-review-controls-slot`}),m?(0,U.jsx)(Ln,{buttonRef:g,open:h,onToggle:m}):null,f?(0,U.jsx)(H.Button,{type:`button`,ref:a,size:`small`,variant:`secondary`,"aria-expanded":d,onClick:f,children:G.editDetails}):null,(0,U.jsxs)(`div`,{className:`canvas-publish-share`,role:`group`,"aria-label":q.group,children:[w?(0,U.jsx)(H.Tooltip,{ref:r,text:Y.alreadyPublished,type:`description`,children:T}):T,_?(0,U.jsx)(W,{ref:v,icon:i,size:`small`,"aria-label":q.title,description:q.title,onClick:_}):null]})]})}function zn(e){return e===`published`?(0,U.jsx)(s,{size:16}):e===`failed`||e===`in_progress`||e===`requested`?(0,U.jsx)(L,{size:16}):(0,U.jsx)(D,{size:16})}function Bn(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>Ye(e,t)))}}var Vn={bridgeUnavailable:`The prototype bridge is not ready on this page.`,routeChanged:`The prototype route changed. Inspect the live canvas again.`,reloaded:`The prototype reloaded before confirming the click. Inspect the live canvas and retry.`,unconfirmed:`The prototype did not confirm the click. Check its bridge and retry.`,clickFailed:`The target could not be clicked.`,addressUnavailable:`The canvas address field is unavailable.`,unknownAction:`Unknown canvas action.`,replyRejected:`The live canvas rejected the action reply. Check its transport diagnostics.`,actionInterrupted:`The canvas changed before the action could run. Inspect the live canvas and retry.`,statusInterrupted:`The canvas changed while collecting Controls status. Inspect the live canvas and retry.`};function Hn(e){let{token:t,prototypeUrl:n,previewUrl:r,cancelClick:i}=e,a=(0,V.useRef)(e),o=(0,V.useRef)(null);(0,V.useLayoutEffect)(()=>{a.current=e}),(0,V.useEffect)(()=>{o.current??=crypto.randomUUID();let e={"X-Replica-Renderer-Id":o.current},s=!1,c=!1,l=new AbortController,u=new URL(r??n).origin;async function d(e){let t=a.current.frameRef.current,n=a.current.liveRoute;if(!t?.contentWindow||!n)throw Error(Vn.bridgeUnavailable);if(e.route.pathname!==n.pathname||e.route.search!==n.search||e.route.hash!==n.hash)throw Error(Vn.routeChanged);let r=crypto.randomUUID();return await new Promise((n,a)=>{function o(){window.clearTimeout(c),window.removeEventListener(`message`,l),i.current===s&&(i.current=null)}function s(){o(),a(Error(Vn.reloaded))}let c=window.setTimeout(()=>{o(),a(Error(Vn.unconfirmed))},2e3);function l(i){let s=i.data;i.source===t?.contentWindow&&i.origin===u&&s&&typeof s==`object`&&`type`in s&&s.type===`replica:canvas:click-result`&&`nonce`in s&&s.nonce===r&&(o(),`clicked`in s&&s.clicked===!0?n({clicked:!0,route:e.route}):a(Error(Vn.clickFailed)))}i.current=s,window.addEventListener(`message`,l),t.contentWindow.postMessage({type:`replica:canvas:click`,nonce:r,...e},u)})}async function f(e){let t=a.current.frameRef.current,r=crypto.randomUUID(),i=Date.now()+e,o=await new Promise((n,o)=>{function s(){window.clearTimeout(d),window.removeEventListener(`message`,p),t?.removeEventListener(`load`,m),l.signal.removeEventListener(`abort`,c)}function c(){s(),o(Error(Vn.statusInterrupted))}let d=window.setTimeout(()=>{if(s(),a.current.liveRoute)o(Error(Vn.bridgeUnavailable));else{let e=new URL(a.current.navigation.entries[a.current.navigation.index]);e.protocol=new URL(u).protocol,e.host=new URL(u).host,n({status:`pending`,url:e.href,error:``,controls:[]})}},e+1500),f=!1;function p(e){let i=e.data;e.source===t?.contentWindow&&t===a.current.frameRef.current&&e.origin===u&&i&&typeof i==`object`&&`type`in i&&(i.type===`replica:canvas:ready`&&!f&&(f=!0,m()),i.type===`replica:controls:status-result`&&`nonce`in i&&i.nonce===r&&`value`in i&&(s(),n(i.value)))}function m(){t===a.current.frameRef.current&&t?.contentWindow?.postMessage({type:`replica:controls:status`,nonce:r,timeoutMs:Math.max(0,i-Date.now())},u)}window.addEventListener(`message`,p),t?.addEventListener(`load`,m),l.signal.addEventListener(`abort`,c),m()});if(!o||typeof o!=`object`||!(`url`in o)||typeof o.url!=`string`||!(`status`in o)||typeof o.status!=`string`||!(`error`in o)||typeof o.error!=`string`||!(`controls`in o)||!Array.isArray(o.controls))throw Error(Vn.bridgeUnavailable);let s=new URL(o.url);if(s.origin!==u)throw Error(Vn.routeChanged);let c=new URL(n);s.protocol=c.protocol,s.host=c.host;let d=await p(i);return!d&&a.current.controlsConnection===void 0?{...o,url:s.href}:{...d?Bn(d,d.loading,s.href):{status:`pending`,url:s.href,error:``,controls:[]},runtime:{status:o.status,error:o.error,controls:o.controls}}}function p(e){let t=a.current.controlsConnection;if(!t)return Promise.resolve(null);let n=t.getSnapshot,r=t.subscribe,i=n();return!i.loading||e<=Date.now()?Promise.resolve(i):new Promise(t=>{let i={};function a(e){window.clearTimeout(c),i.unsubscribe?.(),l.signal.removeEventListener(`abort`,s),t(e)}function o(){let e=n();e.loading||a(e)}function s(){a(null)}let c=window.setTimeout(()=>a(n()),e-Date.now());i.unsubscribe=r(o),l.signal.addEventListener(`abort`,s,{once:!0}),o()})}async function m(){if(!(s||c)){s=!0;try{let{command:r,prototypeUrl:i}=await $(`/api/agent/next`,t,{headers:{...e,"X-Replica-Prototype-Url":n}});if(!c&&i&&i!==n){window.location.reload();return}if(!r)return;let o;try{if(await $(`/api/agent/progress`,t,{method:`POST`,headers:e,body:JSON.stringify({id:r.id,stage:`handler started`})}),c)throw Error(Vn.actionInterrupted);let n;if(r.type===`inspect`){let{appearance:e,navigation:t,liveRoute:r,addressRef:i}=a.current,o=i.current?.value;if(o===void 0)throw Error(Vn.addressUnavailable);n={address:t.entries[t.index],addressDraft:o,appearance:e,canGoBack:t.index>0,canGoForward:t.indexvoid m(),300);return()=>{c=!0,l.abort(),window.clearInterval(h),i.current?.()}},[n,r,t,i])}function Un(e,t,n){let r=t?.repository===e?.stats.repository&&t?.branch===e?.stats.branch,i=!e?.stats.branch&&!!e?.stats.branchError,a=i?void 0:t?.branch,o=!!(e&&!i&&(t?.repository&&t.repository!==e.stats.repository||t?.branch&&t.branch!==e.stats.branch||t?.commitSha&&t.commitSha!==e.stats.commitSha)),s=!!(n.kind===`ready`&&r&&t?.state===`connected`&&t.prototype?.published&&t.prototype.build?.commitSha===e?.stats.commitSha);return{state:e&&{...e,publishStatus:!s&&[`requested`,`in_progress`].includes(e.publishStatus?.state??``)||t?.state===`connected`&&!r?e.publishStatus:s&&t?.prototype?.build?{state:`published`,detail:G.hubBuildImported,versionCount:t.prototype.versionCount,lastUpdatedAt:t.prototype.build.publishedAt,run:{url:t.prototype.build.url,actor:t.prototype.build.author.login||t.prototype.build.author.name?{login:t.prototype.build.author.login||void 0,name:t.prototype.build.author.name||void 0,avatarUrl:t.prototype.build.author.avatarUrl||void 0}:null}}:{state:t?.state===`connected`?`not_published`:`unavailable`,detail:t?.state===`connected`?G.hubBuildMissing:G.hubPublicationUnavailable},stats:{...e.stats,branch:a||e.stats.branch,branchError:a&&a!==e.stats.branch?null:e.stats.branchError,repository:t?.repository||e.stats.repository,commitSha:e.stats.commitSha,comparison:o?{branch:null,source:null,behind:null,error:G.comparisonNeedsRefresh}:e.stats.comparison,publishedUrl:s?t?.prototype?.build?.url:void 0}},hubPublished:s,comparisonOutdated:o}}function Wn(e,t){let n;function r(e,t,r,i=`none`){return{kind:e,detail:t,label:r,action:i,...n?{error:n}:{}}}if(!e)return r(`loading`,Y.initial,Y.checking);let{stats:i}=e,a=i.remoteBranch;if(!a||a.state===`loading`)return r(`loading`,Y.checkingRemote,Y.checking);if(!i.branch||a.state===`detached`)return r(`detached`,Y.detached,Y.retry,`retry`);if(a.repository!==i.repository||a.branch!==i.branch||a.commitSha!==i.commitSha)return r(`unknown`,Y.changed,Y.retry,`retry`);if(a.state===`unknown`)return r(`unknown`,Y.unknown(a.error),Y.retry,`retry`);let o=t?.state===`connected`?t.prototype:void 0,s=o?.build?.commitSha===i.commitSha&&o?.branch===i.branch,c=e.publishRequest,l=t?.state===`connected`&&t.repository===i.repository&&t.branch===i.branch&&(!t.commitSha||t.commitSha===i.commitSha)&&t.prototype?.branch===i.branch&&t.prototype.build?.commitSha===i.commitSha?t.prototype.build:null,u=!!(l&&(c?.commitSha!==i.commitSha||c.buildNumber===void 0||typeof c.buildNumber==`number`&&l.number>c.buildNumber)),d=u&&o?.registered&&o.published,f=t!==null&&t.repository===i.repository&&(!t.branch||t.branch===i.branch)&&(!t.commitSha||t.commitSha===i.commitSha);if(t&&f&&(t.state===`connected`||t.state===`undiscovered`)&&!o?.registered&&(!o||o.branch===i.branch)){let e=t.registrationReason||o?.registrationReason,r=i.branch===t.discovery?.defaultBranch;if(e||t.registrationError||o?.canRegister===!1||r){let i=e||(r?`branch_not_reviewable`:o?.canEdit===!1?`write_access_required`:o?.canRegister===!1&&a.state===`absent`?`remote_branch_missing`:void 0);n=i&&Y.registrationReasons.get(i)||{title:Y.registrationErrorTitle,description:t.registrationError||Y.registrationDenied}}}if(c?.state===`requested`&&(!c.commitSha||c.commitSha===i.commitSha)&&(a.state===`absent`||a.remoteSha!==i.commitSha)&&!u){let e=Date.now()-Date.parse(c.requestedAt||``);if(Number.isFinite(e)&&e<6e5)return r(`requested`,Y.pending,Y.awaitingCopilot)}if(!t)return r(`loading`,Y.checkingHub,Y.checking);if(t.state===`disconnected`||t.state===`pairing`||t.state===`unconfigured`)return r(`disconnected`,t.message||Y.disconnected,Y.connect);if(t.state===`denied`||t.state===`unavailable`)return{...r(`unknown`,t.message||Y.hubUnavailable,Y.retry,`retry`),error:{title:Y.hubUnavailableTitle,description:t.message||Y.hubUnavailable}};if(!f)return r(`unknown`,Y.staleHub,Y.retry,`retry`);if(!i.replicaWorkflowExists)return r(`workflow_missing`,Y.workflowMissing,Y.retry,`retry`);if(c?.state===`failed`&&!d&&(!c.commitSha||c.commitSha===i.commitSha))return r(`failed`,c.error||Y.dispatchFailed,Y.retryPublish,`publish`);if(a.state===`absent`)return r(`unpublished`,Y.absent,Y.publishBranch,`publish`);if(a.remoteSha!==i.commitSha)return r(`needs_push`,Y.needsPush,Y.publishChanges,`publish`);if(s){if(!o.registered)return r(`registration`,t.registrationError||(o.canEdit&&o.canRegister?Y.needsRegistration:Y.registrationDenied),t.registrationError?Y.registrationFailed:Y.registration);if(o.published&&u)return r(`ready`,Y.ready,Y.published)}if(o?.currentBuild?.commitSha===i.commitSha&&o.branch===i.branch&&o.currentBuild.state===`failed`)return r(`failed`,Y.importFailed,Y.retryPublish,`publish`);let p=i.workflow;if(!p||p.state===`unavailable`)return r(`unknown`,p?.detail||Y.workflowUnavailable,Y.retry,`retry`);let m=p.run;if(m&&(m.headSha!==i.commitSha||m.headBranch!==i.branch))return r(`unknown`,Y.staleWorkflow,Y.retry,`retry`);if(c?.commitSha===i.commitSha&&c.workflowRunId!=null&&m?.databaseId===c.workflowRunId&&!u)return r(`awaiting_build`,Y.noBuild,Y.awaitingBuild);let h;if(p.state===`in_progress`&&m){let e=[`queued`,`waiting`,`pending`,`requested`].includes(m.status||``);h=r(e?`queued`:`building`,e?Y.workflowQueued:Y.workflowBuilding,e?Y.queued:Y.building)}else h=p.state===`failed`&&m?r(`failed`,Y.workflowFailed(m.conclusion),Y.retryPublish,`publish`):p.state===`succeeded`&&m?r(`importing`,Y.importing,Y.awaitingHub):r(`awaiting_build`,Y.noBuild,Y.awaitingBuild);return m?.url?.startsWith(`https://github.com/`)&&(h.runUrl=m.url),h}function Gn({token:e,state:t,hubStatus:n,error:r,setError:i,refresh:a,refreshHub:o,preferenceSaving:s=!1}){let[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(null),m=(0,V.useRef)(!1),[h,g]=(0,V.useState)(null),[_,v]=(0,V.useState)(``),[y,b]=(0,V.useState)(!1),x=!t&&r?{kind:`unknown`,action:`retry`,label:Y.retry,detail:r}:Wn(t,n),S=`${t?.stats.repository}/${t?.stats.branch}/${t?.stats.commitSha}`,C=f?.identity===S&&x.action===`publish`?{...x,kind:`failed`,detail:f.message,label:Y.retryPublish}:x.kind===`ready`&&t?.stats.workingTree===`changed`?{...x,kind:`needs_push`,action:`publish`,label:Y.publishChanges,detail:Y.localChanges}:x,w=Un(t,n,x);(0,V.useEffect)(()=>{w.comparisonOutdated&&a(!0)},[w.comparisonOutdated,n?.branch,n?.commitSha,n?.repository,a]);async function T(){if(!y){b(!0);try{await Promise.all([a(!0),o()])}finally{b(!1)}}}async function E(){s||(C.action===`retry`?await T():C.action===`none`||m.current||h||await D())}async function D(){if(!(s||m.current)){m.current=!0,d(!0),i(``),v(``);try{let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});t.workingTree===`unavailable`||t.workingTree===`changed`&&!t.remember?g({preparation:t}):(g(null),await O(t,t.workingTree===`changed`?`commit-changes`:`committed-only`))}catch(e){let t=e instanceof Error?e.message:String(e);i(t),v(t)}finally{m.current=!1,d(!1)}}}async function O(r,s,c){if(s===`committed-only`&&n?.state===`connected`&&n.repository===r.target.repository&&n.branch===r.target.branch&&n.prototype?.registered&&n.prototype.published&&n.prototype.build?.commitSha===r.target.commitSha&&t?.stats.remoteBranch?.state===`present`&&t.stats.remoteBranch.remoteSha===r.target.commitSha)g(null);else{p(null),v(``),i(``);try{let t=await $(`/api/publish`,e,{method:`POST`,body:JSON.stringify({target:r.target,workingTree:r.workingTree,mode:s,remember:c})});g(null),l(t.message),await o(),await a(!1)}catch(e){let t=e instanceof Error?e.message:String(e);p({message:t,identity:S}),i(t),v(t)}}}async function k(e,t){if(!(s||!h||m.current)){if(h.preparation.workingTree===`unavailable`&&e!==`committed-only`)v(K.checkFailed);else{m.current=!0,d(!0);try{await O(h.preparation,e,t)}finally{m.current=!1,d(!1)}}}}return{publication:C,presentedState:w.state,busy:u||y||s,notice:c,publishDialog:h,publishDialogError:_,closePublishDialog:()=>g(null),choosePublish:k,retryPublishCheck:D,publish:E,retry:T}}var Kn=`replica:controls`;function qn(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&Ce(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||Ce({[r.id]:r.value}))}catch{return!1}}function Jn(e){return Array.isArray(e)&&e.length<=100&&e.every(e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&`scope`in e&&typeof e.scope==`string`&&e.scope.length>0&&e.scope.length<=64&&`error`in e&&typeof e.error==`string`&&e.error.length>0&&e.error.length<=500)}function Yn(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.runtimeAvailable!=`boolean`||t.reconnectRequired!==void 0&&typeof t.reconnectRequired!=`boolean`||t.status===`ready`&&(!t.runtimeAvailable||!t.scopes?.length)||t.error!==void 0&&(typeof t.error!=`string`||t.error.length>1e3)||t.scopeErrors!==void 0&&!Jn(t.scopeErrors)||![`ready`,`no-controls`,`missing-runtime`,`unsupported-runtime`,`invalid-config`].includes(t.status)||!Array.isArray(t.scopes)||t.scopes.length>100||t.status!==`ready`&&t.scopes.length>0)return!1;try{let e=new Set;for(let n of t.scopes){if(We(n.declaration),e.has(n.declaration.scope)||(e.add(n.declaration.scope),n.fingerprint!==JSON.stringify(n.declaration)||!Number.isSafeInteger(n.snapshot.revision)||n.snapshot.revision<0))return!1;let t=n.snapshot;if(!t.values||!t.visible||!t.groups||!t.actions)return!1;function r(e,t){return typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}if(!r(t.values,n.declaration.controls.filter(e=>e.type!==`button`).map(e=>e.id))||!r(t.visible,n.declaration.controls.map(e=>e.id))||!r(t.groups,(n.declaration.groups??[]).map(e=>e.id))||!r(t.actions,n.declaration.controls.filter(e=>e.type===`button`).map(e=>e.id))||Object.values(t.groups).some(e=>typeof e!=`boolean`))return!1;if(t.bindings!==void 0){if(!t.bindings||typeof t.bindings!=`object`||Array.isArray(t.bindings))return!1;for(let[e,r]of Object.entries(t.bindings))if(!n.declaration.controls.some(t=>t.id===e)||!r||typeof r.error!=`string`||r.error.length>500||typeof r.busy!=`boolean`||r.available!==void 0&&typeof r.available!=`boolean`)return!1}for(let e of n.declaration.controls){if(typeof t.visible[e.id]!=`boolean`)return!1;if(e.type===`button`){let n=t.actions[e.id];if(!n||typeof n.available!=`boolean`||typeof n.busy!=`boolean`)return!1}else if(Be(e,t.values[e.id]))return!1}}return!0}catch{return!1}}function Xn(){return{runtimeAvailable:!1,status:`missing-runtime`,scopes:[],scopeErrors:[],loading:!0,notice:``,error:``,storageError:``,resetting:!1}}var Zn=class{frame;origin;api;surface;epoch=``;sequence=-1;state=Xn();listeners=new Set;pending=new Map;saved;storageReady=!1;restored=new Set;preparing=new Set;persisted=new Map;cachedScopes=new Map;retryState;resetForIdentity=!1;fromFrameUrl=!1;requests=new AbortController;poll;deadline;saveQueue=Promise.resolve();editQueue=Promise.resolve();stopped=!0;constructor(e,t,n,r=`canvas`){this.frame=e,this.origin=t,this.api=n,this.surface=r}getSnapshot=()=>this.state;getControlValues=()=>{let e=structuredClone(this.saved?.scopes??{}),t=new Map(this.cachedScopes);for(let e of this.state.scopes)t.set(e.declaration.scope,e);for(let[n,r]of t)e[n]=Ze(r);return e};subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});publish(e){this.state={...this.state,...e},this.state.hasResettableValues=Object.values(this.getControlValues()).some(e=>Object.keys(e).length>0);for(let e of[...this.listeners])e()}hasBindingError(e,t){return this.state.scopes.some(n=>(!e||n.declaration.scope===e)&&Object.entries(n.snapshot.bindings??{}).some(([e,n])=>(!t||e===t)&&!!n.error))}checkSaved(e){let t=e,n=/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;if(!t||typeof t!=`object`||typeof t.identity!=`string`||!t.identity||t.identity.length>128||!t.scopes||typeof t.scopes!=`object`||Array.isArray(t.scopes)||t.storageError!==void 0&&(typeof t.storageError!=`string`||t.storageError.length>1e3)||t.notice!==void 0&&(typeof t.notice!=`string`||t.notice.length>1e3)||new Blob([JSON.stringify(t)]).size>27e4)throw Error(`Invalid controls storage response.`);for(let[e,r]of Object.entries(t.scopes)){if(!n.test(e)||!r||typeof r!=`object`||Array.isArray(r))throw Error(`Invalid controls storage scope.`);for(let[e,t]of Object.entries(r))if(!n.test(e)||!(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))throw Error(`Invalid saved control value.`)}}start=e=>{this.fromFrameUrl=e?.type===`load`&&this.sequence>=0;let t=[...this.pending.values()].some(e=>e.action);this.stop(),this.requests=new AbortController,this.stopped=!1,this.epoch=crypto.randomUUID(),this.sequence=-1,this.saved=void 0,this.storageReady=!1,this.restored.clear(),this.preparing.clear(),this.persisted.clear(),this.editQueue=Promise.resolve(),this.cachedScopes.clear(),this.retryState=void 0,this.resetForIdentity=!1,this.state=Xn(),t&&(this.state.notice=`The preview reconnected during an action. Its outcome is unknown; it was not replayed.`),this.publish({});let n=this.epoch;window.addEventListener(`message`,this.receive),this.frame.addEventListener(`load`,this.start);let r=()=>{this.storageReady&&(this.surface===`canvas`&&this.frame.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:n},this.origin),this.send(`hello`).catch(()=>{}))};r(),this.poll=setInterval(()=>{this.state.status===`missing-runtime`&&r()},1e3),this.deadline=setTimeout(()=>{this.state.loading&&this.publish({loading:!1,error:this.surface===`build`?`Build Controls did not connect. Reload the preview or check its definitions.`:G.controlsLocalConnectionFailed})},6e3),this.api().then(e=>{if(!(this.epoch!==n||this.stopped)){if(this.checkSaved(e),this.saved=e,this.retryState?.identity===e.identity)for(let[e,t]of this.retryState.scopes)this.restored.add(`${e}:${t.fingerprint}`),this.cachedScopes.set(e,t);else this.retryState?.identity&&(this.resetForIdentity=!0,this.publish({notice:`The checkout identity changed. Controls will use this branch's saved values or defaults.`}));this.retryState=void 0,this.storageReady=!0,this.publish({storageError:e.storageError||``,notice:e.notice||this.state.notice}),this.prepare(this.state),r()}}).catch(e=>{this.epoch!==n||this.stopped||(this.storageReady=!0,this.publish({storageError:this.surface===`build`?e instanceof Error?e.message:`Control settings could not be read from the URL.`:G.controlsLocalStorageFailed}),this.prepare(this.state),r())})};retry=()=>{let e={identity:this.saved?.identity,scopes:new Map(this.cachedScopes)};this.start(),this.retryState=e};stop=()=>{this.stopped=!0,this.requests.abort(),clearInterval(this.poll),clearTimeout(this.deadline),window.removeEventListener(`message`,this.receive),this.frame.removeEventListener(`load`,this.start);for(let e of this.pending.values())clearTimeout(e.timer),e.reject(Error(`The preview navigated. The command outcome is unknown; it will not be replayed.`));this.pending.clear()};receive=e=>{if(this.stopped||e.source!==this.frame.contentWindow||e.origin!==this.origin||!qn(e.data))return;let t=e.data;if(t.epoch!==this.epoch||!Yn(t.state)||!Number.isSafeInteger(t.sequence)||(t.sequence??-1)<0||t.type!==`snapshot`&&t.type!==`reply`)return;let n=this.pending.get(t.requestId);if(t.type!==`reply`||n){if((t.sequence??-1)>this.sequence){if(t.type===`snapshot`&&t.controlQuery!==void 0&&this.saved){let e=De(t.controlQuery),n=this.saved.identity,r=this.epoch;this.stop();let i=new AbortController;this.requests=i,this.publish({loading:!0}),this.api({method:`POST`,signal:i.signal,body:JSON.stringify({identity:n,replace:!0,scopes:e.scopes})}).then(()=>{this.epoch!==r||i.signal.aborted||(this.start(),e.notice&&this.publish({notice:e.notice}))}).catch(e=>{this.epoch!==r||i.signal.aborted||this.publish({loading:!1,storageError:e instanceof Error?e.message:`Controls history could not be restored.`})});return}if(t.controlQuery!==void 0&&this.saved){let e=this.epoch,n=this.requests,r=De(t.controlQuery);this.saved.scopes=r.scopes,this.restored.clear(),this.persisted.clear(),this.cachedScopes.clear(),this.publish({notice:r.notice,loading:!0}),this.api({method:`POST`,signal:n.signal,body:JSON.stringify({identity:this.saved.identity,replace:!0,scopes:r.scopes})}).catch(t=>{this.epoch!==e||this.stopped||n.signal.aborted||this.publish({storageError:t instanceof Error?t.message:`Controls history could not be restored.`})})}this.sequence=t.sequence;let e=t.state.status;this.publish({...t.state,scopeErrors:t.state.scopeErrors??[],reconnectRequired:t.state.reconnectRequired===!0,status:e,error:t.state.error||(this.state.status===`missing-runtime`&&t.state.status!==`missing-runtime`?``:this.state.error),loading:!this.storageReady||this.state.resetting||this.preparing.size>0||this.state.loading&&e===`missing-runtime`}),this.prepare(this.state)}n&&(this.pending.delete(t.requestId),clearTimeout(n.timer),t.error?n.reject(Error(t.error)):n.resolve(this.state))}};send(e,t){let n=crypto.randomUUID(),r={protocol:Kn,version:1,epoch:this.epoch,requestId:n,type:e,...t?{command:t}:{},...e===`hello`?{controlQuery:Ee(this.saved?.scopes??{}),fromFrameUrl:this.fromFrameUrl}:{}};return qn(r)?new Promise((i,a)=>{let o=setTimeout(()=>{this.pending.delete(n),a(Error(`The command timed out. Its outcome is unknown; it will not be retried automatically.`))},e===`hello`?1200:3e4);this.pending.set(n,{resolve:i,reject:a,timer:o,action:t?.operation===`action`}),this.frame.contentWindow?.postMessage(r,this.origin)}):Promise.reject(Error(`The controls command is invalid or exceeds the size limit.`))}async prepare(e){if(!this.saved&&!this.state.storageError||this.state.resetting||e.reconnectRequired)return;let t=this.epoch;if(this.resetForIdentity&&(e.status===`ready`||e.status===`no-controls`)){this.resetForIdentity=!1,this.publish({loading:!0,resetting:!0});try{await this.send(`command`,{operation:`reset-all`,contexts:e.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch{this.epoch===t&&this.publish({error:`The checkout changed, but runtime defaults could not be restored. Reload the preview before saving.`,storageError:`Saving is paused until the new checkout's runtime reconnects.`,loading:!1});return}finally{this.epoch===t&&this.publish({resetting:!1})}return this.epoch!==t||this.stopped?void 0:this.prepare(this.state)}for(let n of e.scopes){let e=n.declaration.scope,r=`${e}:${n.fingerprint}`;if(!this.preparing.has(r)){if(!this.restored.has(r)){this.preparing.add(r),this.publish({loading:!0});try{let i=this.saved?.scopes&&Object.hasOwn(this.saved.scopes,e)?this.saved.scopes[e]:{},a=Object.fromEntries(n.declaration.controls.filter(e=>e.type!==`button`).map(e=>[e.id,structuredClone(e.default)])),o=!1;for(let[e,t]of Object.entries(i)){let r=n.declaration.controls.find(t=>t.id===e);!r||Be(r,t)?o=!0:a[e]=t}if(Object.keys(a).length&&await this.send(`command`,{operation:`restore`,scope:e,fingerprint:n.fingerprint,revision:this.state.scopes.find(e=>e.fingerprint===n.fingerprint)?.snapshot.revision,values:a}),this.stopped||this.epoch!==t)return;this.restored.add(r),o&&this.publish({notice:this.surface===`build`?`Some URL control settings no longer match this page. Defaults were used.`:`Some saved controls no longer match this declaration and were discarded.`})}catch(n){if(this.epoch!==t||this.stopped)return;this.hasBindingError(e)||this.publish({error:n instanceof Error?n.message:`Saved controls could not be restored.`}),this.restored.add(r)}finally{this.epoch===t&&this.preparing.delete(r)}}if(this.epoch===t&&!this.stopped){let t=this.state.scopes.find(t=>t.declaration.scope===e);t&&(this.cachedScopes.set(e,t),this.persist(t))}}}this.epoch===t&&!this.stopped&&this.state.status!==`missing-runtime`&&this.publish({loading:this.preparing.size>0})}persist(e){if(!this.saved||this.state.storageError)return;let t=Ze(e),n=JSON.stringify(t);if(this.persisted.get(e.declaration.scope)===n)return;this.persisted.set(e.declaration.scope,n);let r=this.saved.identity,i=this.epoch,a=this.requests.signal;this.saveQueue=this.saveQueue.catch(()=>{}).then(async()=>{if(!(this.epoch!==i||this.stopped))try{if(await this.api({method:`POST`,signal:a,body:JSON.stringify({identity:r,scope:e.declaration.scope,values:t})}),this.epoch===i&&!this.stopped){let t=await this.api();if(this.checkSaved(t),this.epoch!==i||this.stopped)return;this.saved=t,await this.send(`command`,{operation:`url`,scope:e.declaration.scope,query:Ee(t.scopes)})}}catch(e){this.epoch===i&&!this.stopped&&this.publish({storageError:this.surface===`build`&&e instanceof Error?`${e.message} Changes remain in memory and are not in the URL.`:`Controls could not be saved. Changes remain in memory; use Retry to reconnect storage.`})}})}async command(e,t,n,r){if(this.state.loading||this.state.resetting||this.stopped)return;let i=this.epoch,a=this.state.scopes.find(e=>e.declaration.scope===t);if(!a){this.publish({error:`This controls scope is no longer active.`});return}let o=()=>this.applyCommand(e,t,a.fingerprint,i,n,r);if(e!==`update`)return o();let s=this.editQueue.catch(()=>{}).then(o);return this.editQueue=s.then(()=>{}),s}async applyCommand(e,t,n,r,i,a){if(this.epoch!==r||this.stopped||this.state.resetting)return;let o=this.state.scopes.find(e=>e.declaration.scope===t);if(!o||o.fingerprint!==n)this.publish({error:`The controls scope or declaration changed. The command was not applied.`});else{this.publish({error:``});try{if(this.state.reconnectRequired)throw Error(`Reconnect controls before sending more commands.`);if(e===`update`||e===`action`){let t=o.declaration.controls.find(e=>e.id===i);if(!t||!o.snapshot.visible[t.id])throw Error(`This control is unknown or hidden.`);if(e===`update`){let e=Be(t,a);if(e)throw Error(`Control "${t.id}": ${e}`)}else if(t.type!==`button`||!o.snapshot.actions[t.id]?.available||o.snapshot.actions[t.id]?.busy)throw Error(`This action is unavailable or busy.`)}let n=await this.send(`command`,{operation:e,scope:t,fingerprint:o.fingerprint,revision:o.snapshot.revision,...i?{id:i}:{},...e===`update`?{value:a}:{}});if(e===`update`&&i)return{value:n.scopes.find(e=>e.declaration.scope===t)?.snapshot.values[i]}}catch(e){!this.stopped&&this.epoch===r&&!this.hasBindingError(t,i)&&this.publish({error:e instanceof Error?e.message:`Controls command failed.`})}}}async resetAll(){if(this.state.resetting||this.stopped)return;let e=this.epoch;this.publish({resetting:!0});try{let t=``;await this.editQueue.catch(()=>{});let n=this.state.runtimeAvailable&&(this.state.status===`ready`||this.state.status===`no-controls`);if(n)try{await this.send(`command`,{operation:`reset-all`,contexts:this.state.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch(e){t=e instanceof Error?e.message:`Some app defaults could not be restored.`}if(this.epoch!==e||this.stopped)return;if(!this.saved){let e=await this.api();this.checkSaved(e),this.saved=e}await this.saveQueue.catch(()=>{}),await this.api({method:`POST`,signal:this.requests.signal,body:JSON.stringify({identity:this.saved.identity,reset:!0})}),this.saved.scopes={},await this.send(`command`,{operation:`url`,query:``}),this.cachedScopes.clear(),this.persisted.clear(),this.publish({storageError:``,error:this.hasBindingError()?``:t,notice:n?``:`Saved controls were cleared. Runtime defaults could not be restored until the preview reconnects.`})}catch(t){this.epoch===e&&this.publish({storageError:t instanceof Error?t.message:`Reset could not be saved.`})}finally{this.epoch===e&&this.publish({resetting:!1,loading:!1})}}};function Qn(e,t=()=>window.location.href,n=e=>{window.history.replaceState(window.history.state,``,e),window.dispatchEvent(new Event(we))}){return r=>Promise.resolve().then(()=>{r?.signal?.throwIfAborted();let i=De(new URL(t()).search);if(!r)return{identity:e,...i};if(r.method!==`POST`||typeof r.body!=`string`)throw Error(`Invalid URL controls request.`);let a=JSON.parse(r.body);if(!a||typeof a!=`object`||!(`identity`in a)||a.identity!==e)throw Error(`The controls URL identity changed.`);let o=i.scopes;if(`reset`in a&&a.reset===!0)o={};else if(`replace`in a&&a.replace===!0&&`scopes`in a){if(!a.scopes||typeof a.scopes!=`object`||Array.isArray(a.scopes))throw Error(`Invalid controls history settings.`);let e={};for(let[t,n]of Object.entries(a.scopes)){if(!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(t)||!Ce(n))throw Error(`Invalid controls history settings.`);e[t]=n}o=De(Ee(e)).scopes}else{if(!(`scope`in a)||typeof a.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(a.scope)||!(`values`in a)||!Ce(a.values))throw Error(`Invalid URL control settings.`);o={...o,[a.scope]:a.values}}let s=Oe(t(),Ee(o));s!==t()&&n(s)})}function $n({frameRef:e,prototypeUrl:t,previewUrl:n,address:r,replaceAddress:i}){let[a,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(null),l=(0,V.useRef)({address:r,replaceAddress:i});return(0,V.useLayoutEffect)(()=>{l.current={address:r,replaceAddress:i}},[r,i]),(0,V.useEffect)(()=>{if(!e.current)return;let r=new Zn(e.current,new URL(n??t).origin,Qn(`prototype:${new URL(t).origin}`,()=>l.current.address,e=>{l.current.address=e,l.current.replaceAddress(e)}));o(r);let i=r.subscribe(()=>c(r.getSnapshot()));return r.start(),()=>{i(),r.stop()}},[t,n,e]),{connection:a,state:s}}function er({token:e,status:t,onStatusChange:n,onSelectHub:r}){let[i,a]=(0,V.useState)(!1),[o,s]=(0,V.useState)(!1),[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(null),m=(0,V.useRef)(!1),h=(0,V.useRef)(!1),g=t?.state===`connected`||t?.state===`undiscovered`,_=t?.state===`disconnected`||t?.state===`pairing`||t?.state===`unconfigured`,v=g?null:t?.pairing||(f?.repository===t?.repository&&f?.hubOrigin===t?.hubOrigin?f?.pairing:null),y=v?.verificationUrl;(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{g?(a(!1),p(null),l(``)):_&&t?.repository&&!m.current&&(m.current=!0,a(!0))},0);return()=>window.clearTimeout(e)},[g,_,t?.repository]),(0,V.useEffect)(()=>{if(!y||u)return;let t=!1,r=!1;async function i(){if(!r){r=!0;try{let r=await $(`/api/hub/poll`,e,{method:`POST`,body:`{}`});if(t)return;r.status!==`pending`&&(p(null),r.status!==`approved`&&l(G.connectionApprovalExpired),await n())}catch(e){t||(l(e instanceof Error?e.message:String(e)),d(!0))}finally{r=!1}}}let a=window.setInterval(()=>void i(),3e3);return()=>{t=!0,window.clearInterval(a)}},[y,u,e,n,t?.repository,t?.hubOrigin]);async function b(i){if(m.current=!0,!h.current){if(!t?.repository)l(G.connectionRepositoryRequired);else if(!t.hubOrigin&&!i)l(G.connectionHubRequired);else{h.current=!0,s(!0),l(``),d(!1);try{!t.hubOrigin&&i&&await r(i);let a=await $(`/api/hub/connect`,e,{method:`POST`,body:`{}`});p({repository:t.repository,hubOrigin:new URL(a.verificationUrl).origin,pairing:a}),a.browserError&&l(G.connectionBrowserFailed(a.browserError)),await n()}catch(e){l(e instanceof Error?e.message:String(e))}finally{h.current=!1,s(!1)}}}}function x(){a(!0),t?.hubOrigin&&b()}return{open:i,close:()=>a(!1),show:()=>a(!0),showAndConnect:x,connect:b,connecting:o,error:c,pairing:v}}function tr({token:e,onStatus:t,onError:n}){let[r,i]=(0,V.useState)(null),a=(0,V.useRef)(0),o=(0,V.useRef)(0),s=(0,V.useRef)(!1),c=(0,V.useCallback)(async(r,c=!1)=>{if(s.current||c&&o.current>0)return;o.current+=1;let l=++a.current;try{let o=r===`open`||r===`interaction`,c=await $(o?r===`open`?`/api/hub/open`:`/api/hub/activity`:`/api/hub/status`,e,o?{method:`POST`,body:`{}`}:{});if(l!==a.current||s.current)return;i(c);let u=c.prototype?.startPageImportError||c.localStartPageError;u&&n(u),t(c)}catch(e){if(l!==a.current||s.current)return;let t=e instanceof Error?e.message:String(e);i(e=>({state:`unavailable`,repository:e?.repository,branch:e?.branch,hubOrigin:e?.hubOrigin,message:G.hubStatusUnavailable(t)})),n(t)}finally{--o.current}},[e,t,n]),l=(0,V.useCallback)(async t=>{s.current=!0,a.current+=1,i(null);try{await $(`/api/hub/origin`,e,{method:`POST`,body:JSON.stringify({origin:t})})}finally{s.current=!1,await c()}},[e,c]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void c(`open`),0),t=window.setInterval(()=>void c(void 0,!0),15e3);function n(){c(`interaction`)}return window.addEventListener(`focus`,n),()=>{a.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]);async function u(){let t=await $(`/api/hub/discovery`,e,{method:`POST`,body:`{}`});if(t.discovery?.state!==`valid`||!t.discovery.origin)throw Error(t.discovery?.message||G.resetHubUnavailable);return await c(),t.discovery.origin}return{status:r,refresh:c,select:l,reset:u}}function nr({prototypeUrl:e,previewUrl:t,shellRef:n,cancelClick:r}){let[{key:i,ref:a},o]=(0,V.useState)(()=>({key:0,ref:(0,V.createRef)()})),[s,c]=(0,V.useState)({input:e,url:e}),[l,u]=(0,V.useState)({input:e,entries:[e],index:0}),[d,f]=(0,V.useState)(()=>window.matchMedia?.(`(prefers-color-scheme: dark)`)?.matches?`dark`:`light`),[p,m]=(0,V.useState)(null),h=(0,V.useRef)(null),g=l.input===e?l:{input:e,entries:[e],index:0},_=g.entries[g.index],v=(0,V.useCallback)(()=>r.current?.(),[r]),y=(0,V.useCallback)(t=>{if(new URL(t).origin!==new URL(e).origin)throw Error(G.startPageOrigin);u(e=>{let n=[...e.entries];return n[e.index]=t,{...e,entries:n}})},[e]),b=(0,V.useCallback)(t=>{if(h.current===e)return;h.current=e;let n=new URL(e),r=t.state===`connected`&&(t.prototype?.startPageSet??t.prototype?.startPage!==void 0)?t.prototype?.startPage:t.localStartPage;if(n.pathname!==`/`||n.search||n.hash||!r)return;let i=new URL(r,n);if(i.origin!==n.origin)throw Error(G.startPageOrigin);c({input:e,url:i.href}),u({input:e,entries:[i.href],index:0})},[e]);function x(){v(),m(null),c({input:e,url:_}),o(e=>({key:e.key+1,ref:(0,V.createRef)()}))}function S(t){t===_?x():(u(n=>{let r=n.input===e?n:g;return{...r,entries:[...r.entries.slice(0,r.index+1),t],index:r.index+1}}),c({input:e,url:t}))}function C(t){let n=g.entries[t];n&&(u({...g,index:t}),c({input:e,url:n}))}let w=(0,V.useCallback)((t,n=!1)=>{m(t);let r=new URL(e);r.pathname=t.pathname,r.search=t.search,r.hash=t.hash,u(t=>{let i=t.input===e?t:{input:e,entries:[e],index:0},a=new URL(i.entries[i.index]),o=[...a.searchParams].filter(([e])=>e.startsWith(`rc.`));for(let e of[r,a])for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);if(a.pathname===r.pathname&&a.searchParams.toString()===r.searchParams.toString()&&a.hash===r.hash)return i;for(let[e,t]of o)r.searchParams.append(e,t);let s=r.href;if(n){let e=[...i.entries];return e[i.index]=s,{...i,entries:e}}return{...i,entries:[...i.entries.slice(0,i.index+1),s],index:i.index+1}})},[e]);(0,V.useEffect)(()=>{let e=a.current;if(!e)return;function t(){v(),m(null)}return e.addEventListener(`load`,t),()=>{v(),e.removeEventListener(`load`,t)}},[v,a]),(0,V.useEffect)(()=>{let r=a.current;if(!r)return;let i=new URL(t??e).origin,o=crypto.randomUUID();function s(){let e=n.current?.closest(`.canvas-base`);e&&r?.contentWindow?.postMessage({type:`replica:canvas:theme`,nonce:o,accent:window.getComputedStyle(e).getPropertyValue(`--hub-accent`).trim()},i)}function c(e){e.source===r?.contentWindow&&e.origin===i&&e.data?.type===`replica:canvas:ready`&&s()}return r.addEventListener(`load`,s),window.addEventListener(`message`,c),s(),()=>{r.removeEventListener(`load`,s),window.removeEventListener(`message`,c)}},[d,e,t,a,n]);let T=new URL(s.input===e?s.url:e);if(t){let e=new URL(t);T.protocol=e.protocol,T.host=e.host}return{frameRef:a,frameKey:i,source:T.href,navigation:g,address:_,replaceAddress:y,appearance:d,setAppearance:f,liveRoute:p,initialize:b,reportRoute:w,reload:x,navigate:S,travel:C}}function rr(e){let[t,n]=(0,V.useState)(null),[r,i]=(0,V.useState)(``),a=(0,V.useRef)(null),o=(0,V.useRef)(0),s=(0,V.useRef)(0),c=(0,V.useCallback)(async(t,r=!1)=>{if(r&&s.current>0)return;s.current+=1;let c=++o.current;try{let r=await $(t?`/api/refresh`:`/api/state`,e,t?{method:`POST`,body:`{}`}:{});if(c!==o.current)return;a.current=r,n(r),i(``)}catch(e){if(c!==o.current)return;n(t=>t&&{...t,stats:{...t.stats,remoteBranch:{state:`unknown`,repository:t.stats.repository||null,branch:t.stats.branch||null,commitSha:t.stats.commitSha||null,error:ir(e)}}}),i(ir(e))}finally{--s.current}},[e]);return(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void c(!0),0),t=window.setInterval(()=>{let e=a.current?.publishStatus?.state,t=a.current?.publishRequest,n=e===`requested`||e===`in_progress`||t?.state===`requested`||!!t?.requestedAt&&(e===`not_published`||e===`unavailable`);c(n,!0)},15e3);function n(){c(!0)}return window.addEventListener(`focus`,n),()=>{o.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]),{state:t,error:r,setError:i,refresh:c}}function ir(e){return e instanceof Error?e.message:String(e)}function ar({token:e,enabled:t,repository:n,branch:r,commitSha:i,publicationRevision:a}){let o=`${n}/${r}/${i}/${a}`,[s,c]=(0,V.useState)(null),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(null),m=(0,V.useRef)(0),h=t&&s?.identity===o?s:null,g=(0,V.useCallback)(async()=>{if(!t)return;let i=++m.current;u(!0);try{if(await p.current,i!==m.current)return;let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});if(i!==m.current)return;if(t.target.repository!==n||t.target.branch!==r)throw Error(K.preferenceTargetChanged);if(typeof t.remember!=`boolean`)throw Error(K.invalidPreference);c({identity:o,preparation:t,error:``})}catch(e){i===m.current&&c({identity:o,preparation:null,error:e instanceof Error?e.message:String(e)})}finally{i===m.current&&u(!1)}},[t,e,n,r,o]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void g(),0);return()=>{m.current+=1,window.clearTimeout(e)}},[g]);async function _(n){if(!t||!h?.preparation||l||p.current)return;f(!0);let r=m.current,i=h.preparation,a=(async()=>{try{if((await $(`/api/publish/preference`,e,{method:`POST`,body:JSON.stringify({target:i.target,remember:n})})).remember!==n)throw Error(K.invalidPreference);r===m.current&&c({identity:o,preparation:{...i,remember:n},error:``})}catch(e){r===m.current&&c({identity:o,preparation:i,error:e instanceof Error?e.message:String(e)})}})();p.current=a;try{await a}finally{p.current=null,f(!1)}}return{remember:h?.preparation?.remember??null,loading:l||!h,saving:d,error:h?.error||``,save:_,retry:g}}function or(e,t,n){let r=n?.included,i=n?.error,a=n?.revision,o=(0,V.useMemo)(()=>{if(r!==void 0)return{identity:e,revision:a,included:r,error:i??``,pending:!1};let t=!1,n=``;if(e)try{let n=localStorage.getItem(`replica:share-controls:v1:${e}`);if(n!==null&&n!==`true`&&n!==`false`)throw Error(`Invalid saved share preference.`);t=n===`true`}catch{n=`The share preference could not be read. Control settings are off by default.`}return{identity:e,revision:a,included:t,error:n,pending:!1}},[e,a,r,i]),[s,c]=(0,V.useState)(o),l=s.identity===e&&s.revision===a?s:o,u=``,d=``;if(l.included)try{u=Ee(t)}catch(e){d=e instanceof Error?e.message:`Control settings could not be shared.`}return{included:l.included,query:u,error:d||l.error,blocked:!!d,...n?{pending:l.pending}:{},onChange:t=>{if(n){c({identity:e,revision:a,included:t,error:``,pending:!0});function r(n){c(r=>r.identity===e&&r.revision===a&&r.included===t?{...r,error:n,pending:!1}:r)}n.onChange(t).then(()=>r(``),e=>r(e instanceof Error?e.message:`This preference could not be saved. It will only apply while this page is open.`));return}let r=``;if(e)try{localStorage.setItem(`replica:share-controls:v1:${e}`,String(t))}catch{r=`This preference could not be saved. It will only apply while this page is open.`}c({identity:e,revision:a,included:t,error:r,pending:!1})}}}function sr({token:e,state:t,hubStatus:n}){let[r,i]=(0,V.useState)(null),a=!!(r&&(r.stale||r.repository!==void 0&&r.repository!==t?.stats.repository||r.branch!==void 0&&r.branch!==t?.stats.branch||n?.hubOrigin!==void 0&&r.hubOrigin!==void 0&&r.hubOrigin!==n.hubOrigin||r.token!==e));(0,V.useEffect)(()=>{if(!r||r.stale)return;let e=r.repository??t?.stats.repository,o=r.branch??t?.stats.branch,s=r.hubOrigin??n?.hubOrigin;if(!a&&e===r.repository&&o===r.branch&&s===r.hubOrigin)return;let c=window.setTimeout(()=>{i(t=>t&&{...t,repository:e,branch:o,hubOrigin:s,stale:a,connecting:!a&&t.connecting})},0);return()=>window.clearTimeout(c)},[r,a,t?.stats.repository,t?.stats.branch,n?.hubOrigin]);function o(){i({repository:t?.stats.repository,branch:t?.stats.branch,hubOrigin:n?.hubOrigin,token:e,connecting:!1,stale:!1})}function s(e){i(t=>t&&{...t,connecting:e})}return{intent:r,targetChanged:a,begin:o,close:()=>i(null),setConnecting:s}}var cr={open:!1,context:null,links:[],loading:!1,busy:!1,stale:!0,error:``,notice:``,created:null};function lr({token:e,hubStatus:t,prototypeState:n}){let[r,i]=(0,V.useState)(cr),a=(0,V.useRef)(r);a.current=r;let o=(0,V.useRef)(0),s=(0,V.useRef)(!1),c=(0,V.useRef)(!1),l=(0,V.useRef)(!1),u=(0,V.useRef)(!1),d=(0,V.useRef)(null),f=`${t?.hubOrigin}/${t?.repository}/${t?.branch}/${t?.state}`,p=(0,V.useRef)(f);p.current=f;let m=(0,V.useCallback)(()=>{!u.current||s.current||c.current||l.current||!d.current||(u.current=!1,d.current())},[]);(0,V.useLayoutEffect)(()=>{o.current+=1,i(e=>e.open?{...cr,open:!0,error:q.stale}:cr)},[f,e]),(0,V.useEffect)(()=>()=>{o.current+=1,u.current=!1},[]),(0,V.useEffect)(()=>{let e=t?.prototype;e&&e.canManageShareLinks!==!0&&a.current.context?.prototype.canManageShareLinks===!0&&(o.current+=1,i(t=>t.open&&t.context?.prototype.id===e.id?{...cr,open:!0,stale:!1,context:{...t.context,prototype:{...t.context.prototype,canManageShareLinks:e.canManageShareLinks}}}:t))},[t?.prototype]),(0,V.useEffect)(()=>{t?.prototype?.publicSharingEnabled===!1&&(o.current+=1,i(e=>e.open?{...cr,open:!0,sharingDisabled:!0,error:q.disabled,context:e.context?{...e.context,prototype:{...e.context.prototype,publicSharingEnabled:!1}}:null}:cr))},[t?.prototype?.publicSharingEnabled]);let h=(0,V.useCallback)((t,n)=>$(`/api/hub/share-links/${t}`,e,{method:`POST`,body:JSON.stringify(n)}),[e]),g=(0,V.useCallback)(e=>{e instanceof Error&&`code`in e&&(e.code===`public_sharing_disabled`||e.code===`public_sharing_changed`||e.code===`creator_access_changed`)&&(o.current+=1,i(t=>({...t,busy:!1,loading:!1,stale:!0,sharingDisabled:e.code===`public_sharing_disabled`,links:[],created:null,authorization:void 0})))},[]),_=(0,V.useCallback)(async(e=a.current.context)=>{if(!e||!e.prototype.canManageShareLinks||e.prototype.publicSharingEnabled===!1||c.current)return;c.current=!0;let t=o.current,n=p.current;i(e=>({...e,loading:!0,stale:!0,error:``}));try{let r=new Map,a=new Set,s=null;do{let i=await h(`list`,{target:e.target,...s?{cursor:s}:{}});if(t!==o.current||n!==p.current)return;for(let e of i.shareLinks)r.set(e.id,e);if(s=i.nextCursor,s){if(a.has(s))throw Error(q.paginationFailed);a.add(s)}}while(s);i(e=>({...e,links:[...r.values()],created:e.created?r.get(e.created.id)??null:null,loading:u.current,stale:u.current,sharingDisabled:!1}))}catch(e){t===o.current&&n===p.current&&(i(t=>({...t,loading:!1,stale:!0,error:e instanceof Error?e.message:q.failed})),g(e))}finally{c.current=!1,m()}},[h,m,g]),v=(0,V.useCallback)(async()=>{if(s.current||l.current||c.current){u.current=!0,i(e=>({...e,open:!0,stale:!0,loading:!0}));return}l.current=!0;let e=++o.current,r=p.current;i({...cr,open:!0,loading:!0});let a=t?.repository===n?.stats.repository&&t?.branch===n?.stats.branch,d=``;if(!t||[`disconnected`,`pairing`,`unconfigured`].includes(t.state)?d=q.disconnected:[`unavailable`,`denied`].includes(t.state)?d=q.unavailable:(t.state!==`connected`||!a)&&(d=q.branch),d)i({...cr,open:!0,error:d}),l.current=!1;else try{let t=await h(`context`,{});if(e!==o.current||r!==p.current)return;i(e=>({...e,context:t,loading:!1,stale:t.prototype.canManageShareLinks===!0})),await _(t)}catch(t){e===o.current&&r===p.current&&i(e=>({...e,loading:!1,error:t instanceof Error?t.message:q.failed}))}finally{l.current=!1,m()}},[t,n,_,h,m]);d.current=v;let y=(0,V.useCallback)(async(e,t)=>{let n=a.current;if(s.current||l.current||c.current||u.current||n.stale||!n.context||n.context.prototype.canManageShareLinks!==!0||n.sharingDisabled||n.context.prototype.publicSharingEnabled===!1)return!1;s.current=!0;let r=o.current;i(e=>({...e,busy:!0,error:``,notice:``}));try{let a=await h(e,{target:n.context.target,...t});return r===o.current&&(i(n=>({...n,notice:e===`delete`?q.deleted:``,authorization:void 0,created:`id`in a?a:e===`delete`&&`id`in t&&n.created?.id===t.id?null:n.created,links:e===`delete`&&`id`in t?n.links.filter(e=>e.id!==t.id):n.links})),await _(n.context),!0)}catch(e){if(r!==o.current)return!1;let t=e instanceof Error&&`code`in e&&e.code===`fresh_authorization_required`&&`authorization`in e&&e.authorization&&typeof e.authorization==`object`&&`url`in e.authorization&&typeof e.authorization.url==`string`&&`expiresAt`in e.authorization&&typeof e.authorization.expiresAt==`string`?{url:e.authorization.url,expiresAt:e.authorization.expiresAt}:void 0,n=e instanceof Error&&(!(`statusCode`in e)||`code`in e&&e.code===`share_delivery_unknown`);return i(r=>({...r,stale:!0,authorization:t,error:n?q.unknown:e instanceof Error?e.message:q.failed})),g(e),!1}finally{s.current=!1,r===o.current&&i(e=>({...e,busy:!1})),m()}},[_,h,m,g]),b=(0,V.useCallback)(async e=>{let t=a.current;if(!t.context||l.current||c.current||u.current)throw Error(q.stale);let n=o.current,r=await h(`controls-preference`,{target:t.context.target,included:e});if(n!==o.current)throw Error(q.stale);if(r.included!==e)throw Error(`The share preference could not be saved.`)},[h]),x=(0,V.useCallback)(async(e,t)=>{let n=a.current;if(!n.context||n.stale||l.current||c.current||u.current)return;let r=o.current;try{await h(`open`,{target:n.context.target,id:e,...t?{controlsQuery:t}:{}})}catch(e){r===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:q.failed})),g(e))}},[h,g]),S=(0,V.useCallback)(async()=>{let e=a.current;if(!e.context||!e.authorization||e.busy)return;let t=o.current;try{await h(`authorize`,{target:e.context.target}),t===o.current&&i(e=>({...e,notice:q.authorizationRetry}))}catch(e){t===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:q.failed})),g(e))}},[h,g]);return(0,V.useEffect)(()=>{if(!r.open||!r.context)return;function e(){s.current||_()}let t=window.setInterval(e,3e4);return window.addEventListener(`focus`,e),()=>{window.clearInterval(t),window.removeEventListener(`focus`,e)}},[r.open,r.context,_]),{state:r,open:v,close:()=>{u.current=!1,i(e=>({...e,open:!1}))},refresh:()=>r.context&&!r.sharingDisabled&&r.context.prototype.publicSharingEnabled!==!1?_():v(),create:(e,t)=>y(`create`,{label:e,expiration:t,buildNumber:r.context?.prototype.build?.number}),remove:e=>y(`delete`,{id:e}),openLink:x,setControlPreference:b,authorize:S}}function ur({config:e}){let t=(0,V.useRef)(null),n=(0,V.useRef)(null),r=(0,V.useRef)(null),i=(0,V.useRef)(null),a=(0,V.useRef)(null),o=(0,V.useRef)(null),s=(0,V.useRef)(null),c=(0,V.useRef)(null),l=(0,V.useRef)(null),u=(0,V.useRef)(null),[d,f]=(0,V.useState)(!1),[p,m]=(0,V.useState)({position:null,collapsed:!1,collapsedGroups:{}}),[h,g]=(0,V.useState)(!1),[_,v]=(0,V.useState)(!1),y=(0,V.useCallback)(()=>{g(!1),o.current?.focus()},[]),{frameRef:b,frameKey:x,source:S,navigation:C,address:w,replaceAddress:T,appearance:E,setAppearance:D,liveRoute:O,initialize:k,reportRoute:A,reload:j,navigate:M,travel:ee}=nr({prototypeUrl:e.prototypeUrl,previewUrl:e.previewUrl,shellRef:t,cancelClick:u}),N=$n({...e,frameRef:b,address:w,replaceAddress:T}),P=N.state;Hn({...e,frameRef:b,addressRef:r,appearance:E,navigation:C,liveRoute:O,cancelClick:u,reload:j,controlsConnection:N.connection});let{state:F,error:I,setError:L,refresh:R}=rr(e.token),z=tr({token:e.token,onStatus:k,onError:L}),te=er({token:e.token,status:z.status,onStatusChange:z.refresh,onSelectHub:z.select}),B=lr({token:e.token,hubStatus:z.status,prototypeState:F}),ne=sr({token:e.token,state:F,hubStatus:z.status}),re=ar({token:e.token,enabled:h&&z.status?.state===`connected`&&z.status.prototype?.registered===!0&&!!z.status.prototype.build&&z.status.repository===F?.stats.repository&&z.status.branch===F?.stats.branch,repository:F?.stats.repository,branch:F?.stats.branch,commitSha:F?.stats.commitSha,publicationRevision:F?.publishRequest?.requestedAt}),ie=Gn({token:e.token,state:F,hubStatus:z.status,error:I,setError:L,refresh:R,refreshHub:z.refresh,preferenceSaving:re.saving}),ae=In(F,z.status,ie.publication),oe=B.state.context,se=or(oe?`${oe.hubOrigin}:${oe.prototype.repositoryId}:${oe.prototype.id}`:void 0,N.connection?.getControlValues()??{},{included:oe?.controlSettingsIncluded??!1,error:oe?.controlSettingsError,revision:oe?.target,onChange:B.setControlPreference});(0,V.useLayoutEffect)(()=>{document.body.classList.remove(`renderer-loading`);let e=t.current,r=n.current;if(!e||!r)return;function i(){let t=r?.getBoundingClientRect().height;t&&e?.style.setProperty(`--canvas-toolbar-height`,`${t}px`)}let a=new ResizeObserver(i);return a.observe(r),i(),()=>a.disconnect()},[]);function ce(){te.close(),ae.kind===`ready`?B.open():ne.begin()}return(0,U.jsxs)(H.ThemeProvider,{colorMode:E,className:`canvas-base`,children:[(0,U.jsxs)(`main`,{ref:t,className:`canvas-shell${B.state.open?` canvas-shell--inactive`:``}`,inert:B.state.open,"aria-hidden":B.state.open?!0:void 0,children:[(0,U.jsx)(Ne,{address:w,addressRef:r,canGoBack:C.index>0,canGoForward:C.indexee(C.index-1),onForward:()=>ee(C.index+1),onNavigate:M,onOpenTab:async()=>{await $(`/api/prototype/open`,e.token,{method:`POST`,body:JSON.stringify({url:w})})},onReload:j}),(0,U.jsx)(Rn,{toolbarRef:n,config:e,state:ie.presentedState,prototypeName:z.status?.state===`connected`&&z.status.prototype?.name||void 0,publishing:ie.busy,publication:ie.publication,publishButtonRef:i,hubButtonRef:o,titleButtonRef:c,onBuildDetails:()=>v(!0),controlsButtonRef:l,controlsOpen:d,onControls:()=>f(!d),onPublish:()=>void ie.publish(),onShare:ce,shareButtonRef:a,hubOpen:h,onHub:()=>{g(!h),z.refresh(`interaction`)}}),(0,U.jsx)(`iframe`,{ref:b,className:`prototype-frame`,title:G.prototypeFrameTitle(e.name),src:S,style:{colorScheme:E,backgroundColor:`var(--hub-canvas-default)`}},x),(0,U.jsx)(Fn,{config:e,frameRef:b,onRouteChange:A,status:z.status,onStatusChange:z.refresh,onSelectHub:z.select,onConnect:te.showAndConnect,onDisconnected:te.show,connectionButtonRef:s,connecting:te.connecting,publication:ie.publication,publicationBusy:ie.busy,dirty:F?.stats.workingTree===`changed`,onPublish:()=>void ie.publish(),onRetryPublication:()=>void ie.retry(),publishPreference:re,open:h,onClose:y}),d&&N.connection&&P?(0,U.jsx)(et,{state:P,connection:N.connection,layout:p,onLayoutChange:m,diagnosisTarget:w,onDiagnose:()=>$(`/api/controls/diagnose`,e.token,{method:`POST`,body:JSON.stringify({status:P.status,runtimeAvailable:P.runtimeAvailable,reconnectRequired:P.reconnectRequired===!0,hasError:!!P.error||Bn(P,P.loading,w).controls.some(e=>e.visible&&!!e.error),hasStorageError:!!P.storageError,previewUrl:w})})}):null]}),(0,U.jsx)(`div`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:I||ie.notice}),(0,U.jsx)(Me,{hub:z,connection:te,publication:ie,sharing:B,shareIntent:ne,controlSettings:se,readiness:ae,state:F,hubOpen:h,buildDetailsOpen:_,onCloseBuildDetails:()=>v(!1),shareButtonRef:a,hubButtonRef:o,connectionButtonRef:s,publishButtonRef:i,titleButtonRef:c})]})}var dr=document.querySelector(`#root`);if(!dr)throw Error(`Replica prototype renderer root is missing.`);(0,se.createRoot)(dr).render((0,U.jsx)(ur,{config:window.__REPLICA_CANVAS__}));
\ No newline at end of file
+`)&&Jt(),e.startsWith(`event: error
+`))throw Error(`Live review connection failed.`)}}catch{t.signal.aborted||ze(!0)}t.signal.aborted||(Date.now()-a>=3e4&&(r=5e3),n=window.setTimeout(()=>void i(),r),r=Math.min(r*2,6e4))}return i(),()=>{t.abort(),window.clearTimeout(n)}},[ot,Nt,e.token,Jt]);let Xt=(0,V.useCallback)((n,r={})=>{let i=t.current;return!i?.contentWindow||!qe.current?!1:(i.contentWindow.postMessage({type:n,nonce:qe.current,...r},new URL(e.previewUrl??e.prototypeUrl).origin),!0)},[e.prototypeUrl,e.previewUrl,t]),Zt=(0,V.useCallback)(async t=>{if(!De||!zt||Vt)return;let n=ot,i=++Ye.current;Je.current=void 0,Pe(!0),z(``),P(null),Le(null),Me(t),v();try{let a=await $(`/api/hub/status`,e.token);if($e.current!==n||Ye.current!==i)return;if(!a.repositoryAuthorized&&a.state!==`connected`||a.prototype?.id!==Nt||a.hubOrigin!==r?.hubOrigin||a.repository!==r?.repository||a.branch!==r?.branch||!a.reviewRevision)throw Error(a.reviewError||K.commentPreparationFailed);Je.current=a.reviewRevision,Xt(`replica:canvas:select`,{mode:t})}catch(e){$e.current===n&&Ye.current===i&&(Me(null),z(e instanceof Error?e.message:String(e)))}finally{Ye.current===i&&Pe(!1)}},[De,zt,e.token,ot,v,Nt,Vt,Xt,r]),Qt=(0,V.useCallback)(()=>{je&&(Ye.current+=1,Je.current=void 0,Pe(!1),Xt(`replica:canvas:cancel-selection`),Me(null))},[je,Xt]),$t=(0,V.useCallback)(()=>{Ye.current+=1,Je.current=void 0,Xt(`replica:canvas:clear-selection`),Fe(null),Le(null),z(``)},[Xt]);(0,V.useEffect)(()=>{let r=t.current;if(!r){Ee(new Map),Oe(!1);return}let i=new URL(e.previewUrl??e.prototypeUrl).origin,a=JSON.parse(qt),o=new Set(a.map(({id:e})=>e)),s=Date.now(),c=!1;function l(){qe.current=crypto.randomUUID(),s=Date.now(),c=!1,Oe(!1),ke(``),Ee(new Map),r?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:qe.current},i),u()}function u(){a.length&&r?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:qe.current,anchors:a},i)}function d(e){let t=e.data;if(e.source===r?.contentWindow&&e.origin===i&&Nn(t)&&t.nonce===qe.current){if(t.type===`replica:canvas:bridge-error`)Oe(!1),ke(K.commentingMissing);else if(t.type===`replica:canvas:ready`){if(t.protocolVersion!==1){c=!0,Oe(!1),ke(K.commentingIncompatible);return}if(!Pn(t.route))return;s=Date.now(),c=!1,Oe(!0),ke(``),ee(Pn(t.route)),n?.(Pn(t.route),t.replaceRoute===!0)}else if(!c){if(t.type===`replica:canvas:conversation-dismiss-requested`)window.dispatchEvent(new Event(`replica:review-dismiss`));else if(t.type===`replica:canvas:resolved`){if(t.protocolVersion!==1||!Pn(t.route)||!Array.isArray(t.results)||t.results.length>200)return;s=Date.now(),Oe(!0),ke(``),ee(Pn(t.route)),n?.(Pn(t.route),t.replaceRoute===!0);let e=new Map;for(let n of t.results){if(!Nn(n)||typeof n.id!=`number`||typeof n.x!=`number`||typeof n.y!=`number`||!o.has(n.id)||!Number.isFinite(n.x)||!Number.isFinite(n.y)||n.x<0||n.y<0||n.x>r.clientWidth||n.y>r.clientHeight)continue;let t=Nn(n.rect)&&typeof n.rect.x==`number`&&typeof n.rect.y==`number`&&typeof n.rect.width==`number`&&typeof n.rect.height==`number`&&Number.isFinite(n.rect.x)&&Number.isFinite(n.rect.y)&&Number.isFinite(n.rect.width)&&Number.isFinite(n.rect.height)&&n.rect.width>=0&&n.rect.height>=0?{x:n.rect.x,y:n.rect.y,width:n.rect.width,height:n.rect.height}:{x:n.x,y:n.y,width:0,height:0};e.set(n.id,{x:n.x,y:n.y,rect:t})}Ee(e)}else if(t.type===`replica:canvas:selected`){let e=Gt.safeParse(t.anchor);if(!e.success){Xt(`replica:canvas:cancel-selection`),Xt(`replica:canvas:clear-selection`),Me(null),Le(Nn(t.anchor)&&t.anchor.kind===`area`?`area-unavailable`:`element-unavailable`);return}Fe(e.data),Me(null),Le(null)}else t.type===`replica:canvas:selection-failed`&&(t.reason===`element-unavailable`||t.reason===`area-too-small`||t.reason===`area-unavailable`)?(Me(null),Le(t.reason)):t.type===`replica:canvas:selection-cancelled`&&Me(null)}}}function f(){Ye.current+=1,Pe(!1),Me(null),Le(null),l()}r.addEventListener(`load`,f),window.addEventListener(`message`,d),l();let p=window.setInterval(()=>{Date.now()-s>=2e4&&(Oe(!1),Ee(new Map),ke(c?K.commentingIncompatible:K.commentingMissing)),r.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:qe.current},i),u()},2e3);return()=>{r.removeEventListener(`load`,f),window.removeEventListener(`message`,d),window.clearInterval(p)}},[ot,qt,e.prototypeUrl,e.previewUrl,t,n,Xt]);async function en(t,n,r,i){let a=ot,o=dt,s=i?.kind===`add-reaction`||i?.kind===`remove-reaction`||i?.kind===`mark-unread`;if(i){if(He.current)return!1;He.current=!0,Ve(i)}s&&(We.current=!0,Ue.current+=1),B(``);try{let i=await $(`/api/hub/comments/${t}`,e.token,{method:n,...r?{body:JSON.stringify(r)}:{}});if($e.current!==a)return!1;if(s){let e=rn.parse(i);b(t=>{if(t.identity!==o)return t;let n=new Map(t.items.map(e=>[e.id,e]));for(let t of e.comments)n.set(t.id,t);return{identity:o,items:[...n.values()]}})}return s||(at.current=window.setTimeout(()=>void Yt.current(),0)),!0}catch(e){return $e.current===a&&(I(e instanceof Error?e.message:String(e)),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&B(e.message)),!1}finally{i&&$e.current===a&&(s&&(We.current=!1,Ue.current+=1,at.current=window.setTimeout(()=>void Yt.current(),0)),He.current=!1,Ve(null))}}async function tn(t){let n=Je.current;if(!n||!Z||He.current)return!1;let r=ot,a=dt;He.current=!0,Ve({kind:`create`}),B(``),z(``);try{let o=rn.parse(await $(`/api/hub/comments`,e.token,{method:`POST`,body:JSON.stringify({review_revision:n,review_comment:{body:t,anchor:Z}})}));if($e.current!==r)return!1;let s=o.comments.find(e=>e.kind===`root`);if(!s)return!1;let c=s.buildNumber!==null||s.draftRevisionId===ut;c&&b(e=>{if(e.identity!==a)return e;let t=new Map(e.items.map(e=>[e.id,e]));for(let e of o.comments)t.set(e.id,e);return{identity:a,items:[...t.values()]}});let l=c&&Ke.current===a;return Qe.current=!l,$t(),l&&P(s.id),i().then(()=>{if($e.current===r)return Yt.current()}).catch(e=>{if($e.current===r){let t=e instanceof Error?e.message:String(e);I(K.commentRefreshFailed(t))}}),!0}catch(e){if($e.current===r){let t=e instanceof Error?e.message:String(e);I(t),z(t),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&B(e.message)}return!1}finally{$e.current===r&&(He.current=!1,Ve(null))}}function ln(){Vt||(E?(P(null),D(!1)):(D(!0),_&&v()))}let un=r?.repository&&r.branch?`https://github.com/${r.repository.split(`/`).map(e=>encodeURIComponent(e)).join(`/`)}/tree/${encodeURIComponent(r.branch)}`:null,dn=r?.branch&&un?(0,U.jsxs)(`a`,{className:`canvas-hub-publication__branch`,href:un,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open ${r.branch} on GitHub`,children:[(0,U.jsx)(a,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`span`,{children:r.branch})]}):r?.branch?(0,U.jsxs)(`span`,{className:`canvas-hub-publication__branch`,children:[(0,U.jsx)(a,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`span`,{children:r.branch})]}):null,fn=(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-origin-title`,children:`Hub`}),r&&r.state!==`unconfigured`?(0,U.jsx)(`div`,{className:`canvas-hub-origin`,children:r.hubOrigin?(0,U.jsx)(`a`,{href:Q?new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}`,r.hubOrigin).href:r.hubOrigin,target:`_blank`,rel:`noopener noreferrer`,children:r.hubOrigin}):(0,U.jsx)(`span`,{children:`URL unavailable`})}):null,ce||r?.state===`disconnected`||r?.state===`unconfigured`?(0,U.jsxs)(`form`,{className:`canvas-hub-origin-form`,onSubmit:e=>{e.preventDefault(),!(ue||fe)&&(de(!0),W(!0),I(``),o(G).then(()=>{W(!1)}).catch(e=>I(e.message)).finally(()=>de(!1)))},children:[(0,U.jsxs)(`div`,{className:`canvas-hub-origin-field`,children:[(0,U.jsxs)(`label`,{children:[K.hubUrl,(0,U.jsx)(`input`,{type:`url`,required:!0,value:G,placeholder:`https://hub.example.com`,disabled:ue||fe,onChange:e=>le(e.target.value)})]}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,className:`canvas-icon-button`,leadingVisual:(0,U.jsx)(L,{size:16}),"aria-label":K.resetHubUrl,title:K.resetHubUrl,disabled:ue||fe,"aria-busy":fe,onClick:()=>{q(!0),I(``),$(`/api/hub/discovery`,e.token,{method:`POST`,body:`{}`}).then(async e=>{if(e.discovery?.state!==`valid`||!e.discovery.origin)throw Error(e.discovery?.message||K.resetHubUnavailable);le(e.discovery.origin),await i()}).catch(e=>I(e.message)).finally(()=>q(!1))},children:(0,U.jsx)(`span`,{className:`visually-hidden`,children:K.resetHubUrl})})]}),(0,U.jsx)(`p`,{children:K.hubHttpsHint}),(0,U.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,U.jsx)(H.Button,{type:`submit`,size:`small`,disabled:ue||fe,children:`Save Hub`}),ce&&r?.state!==`unconfigured`&&r?.state!==`disconnected`?(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,disabled:ue||fe,onClick:()=>W(!1),children:`Cancel`}):null]})]}):null]});return(0,U.jsxs)(rt,{source:T,children:[_t.visible?(0,U.jsx)(sn,{..._t}):null,Bt&&Ut?(0,et.createPortal)((0,U.jsxs)(`div`,{className:`canvas-review-controls review-shell__comment-actions`,role:`group`,"aria-label":xt.heading,children:[(0,U.jsx)(yt,{bridgeReady:De&&zt,copy:xt,selectionBlocked:Vt,selecting:je!==null,onCancelSelection:Qt,onStartAreaSelection:()=>void Zt(`area`),onStartElementSelection:()=>void Zt(`element`)}),(0,U.jsx)(H.Tooltip,{ref:Ze,text:Vt?xt.selectionBlockedLabel:`${xt.heading} (${xt.sidebarShortcutLabel})`,type:`description`,children:(0,U.jsxs)(H.Button,{className:`canvas-comments-toggle review-shell__comments-toggle`,variant:`secondary`,size:`small`,"aria-label":`${xt.heading}, ${Lt}${Rt?`, ${xt.unreadLabel}`:``}`,"aria-expanded":E,"aria-keyshortcuts":`Shift+C`,disabled:Vt,onClick:ln,children:[(0,U.jsx)(tt,{children:Lt}),Rt?(0,U.jsx)(`span`,{className:`canvas-comments-unread-badge review-shell__unread-badge`,"aria-hidden":`true`}):null]})})]}),Ut):null,A&&It.length&&De&&!je?(0,U.jsx)(`div`,{className:`canvas-marker-layer`,children:(0,U.jsx)(ct,{threads:It,resolutions:Et,selectedThreadId:N,selectionBlocked:Ce,focusSelectedMarker:!1,showAreaHighlightsOnlyWhenSelected:!0,copy:xt,onSelect:e=>P(e.root.id)})}):null,(0,U.jsxs)(it,{className:`canvas-hub-panel`,contentClassName:`canvas-hub-content`,title:`Replica Hub`,label:`Hub`,open:Ht,closeLabel:`Close Hub`,closeRef:Xe,onClose:v,children:[F?(0,U.jsx)(`p`,{role:`alert`,children:F}):null,ne?(0,U.jsx)(`p`,{role:`alert`,children:ne}):null,r?null:(0,U.jsx)(`p`,{children:`Checking Hub connection…`}),!Ot&&!ht&&r?.message?(0,U.jsx)(`p`,{role:`status`,children:r.message}):null,ht?(0,U.jsxs)(`div`,{className:`canvas-hub-status`,children:[(0,U.jsx)(pe,{variant:`warning`,layout:`compact`,title:r?.message||X.hubUnavailable}),(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:f,"aria-busy":f,leadingVisual:f?(0,U.jsx)(L,{size:16}):void 0,onClick:h||(()=>void i()),children:X.retry})]}):null,!Ot&&!ht&&d&&m&&h?(0,U.jsx)(Ae,{publication:d,busy:f,dirty:p,onPublish:m,onRetry:h}):null,Ot?(0,U.jsxs)(`section`,{className:`canvas-hub-connection`,children:[(0,U.jsx)(`p`,{children:K.connectionBeforePublishing}),(0,U.jsx)(H.Button,{ref:l,variant:`primary`,onClick:s,disabled:u,children:u?K.connectionOpeningBrowser:K.connectToHub})]}):null,!Ot&&(!ce&&(r?.discovery?.mismatch||[`invalid`,`unreachable`].includes(r?.discovery?.state||``))||r?.state===`unconfigured`)?(0,U.jsxs)(`div`,{className:`canvas-hub-settings`,children:[!ce&&r?.discovery?.mismatch?(0,U.jsx)(`p`,{role:`alert`,children:`The repository configuration differs from your selected Hub. Your connection has not changed. Disconnect Hub before selecting another URL.`}):null,!ce&&[`invalid`,`unreachable`].includes(r?.discovery?.state||``)?(0,U.jsx)(`p`,{role:`alert`,children:r?.discovery?.message}):null,r?.state===`unconfigured`?(0,U.jsx)(`p`,{children:`Enter your Hub URL to connect.`}):null]}):null,r?.state===`undiscovered`&&!d?(0,U.jsxs)(`p`,{children:[`Connected to `,r.repository,`. Hub has not discovered`,` `,r.branch||`a prototype branch`,`. Your repository connection is ready. Push a named branch to make its Builds and reviews available.`]}):null,Q?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`section`,{className:d&&d.kind!==`ready`&&m&&h?`canvas-hub-publication canvas-hub-publication--after-status`:`canvas-hub-publication`,"aria-label":`Prototype`,children:Mt&&Kt?(0,U.jsxs)(`form`,{className:`canvas-hub-publication__form`,onSubmit:t=>{t.preventDefault(),$(`/api/hub/metadata`,e.token,{method:`PATCH`,body:JSON.stringify({name:me,description:ge,startPage:ve})}).then(async()=>{J(!1),await i()}).catch(e=>I(e.message))},children:[(0,U.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,U.jsxs)(`label`,{className:`canvas-hub-publication__name-field`,children:[(0,U.jsx)(`span`,{className:`visually-hidden`,children:`Name`}),(0,U.jsx)(`input`,{required:!0,maxLength:255,value:me,onChange:e=>he(e.target.value)})]}),(0,U.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),dn,(0,U.jsxs)(`label`,{className:`canvas-hub-publication__description-field`,children:[(0,U.jsx)(`span`,{className:`visually-hidden`,children:`Description`}),(0,U.jsx)(`textarea`,{value:ge,placeholder:`Add a description`,onChange:e=>_e(e.target.value)})]}),(0,U.jsxs)(`label`,{className:`canvas-hub-publication__start-page-field`,children:[K.startPage,(0,U.jsx)(`input`,{value:ve,placeholder:`/`,"aria-describedby":`canvas-start-page-hint`,onChange:e=>ye(e.target.value)})]}),(0,U.jsx)(`p`,{id:`canvas-start-page-hint`,className:`canvas-hub-publication__hint`,children:K.startPageHint}),(0,U.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,U.jsx)(H.Button,{type:`submit`,size:`small`,children:`Save metadata`}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,onClick:()=>J(!1),children:`Cancel`})]})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-large`,children:Q.name||r?.branch}),(0,U.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),dn,Q.description?(0,U.jsx)(`p`,{className:`canvas-hub-publication__description`,children:Q.description}):null,(0,U.jsxs)(`p`,{className:`canvas-hub-publication__description canvas-hub-publication__start-page`,children:[K.startPage,`: `,(0,U.jsx)(`code`,{children:Q.startPage||`/`})]}),Mt?(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:()=>{he(Q.name||``),_e(Q.description||``),ye(Q.startPage||``),Se(ot),J(!0)},children:K.editDetails}):null]})}),(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-build-title`,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-build-title`,children:K.latestBuild}),Q.build?(0,U.jsxs)(`div`,{className:`canvas-hub-build`,children:[(0,U.jsxs)(`div`,{className:`canvas-hub-build__identity`,children:[(0,U.jsx)(`a`,{href:Q.build.url,target:`_blank`,rel:`noopener noreferrer`,children:K.buildTitle(Q.build.number)}),(0,U.jsx)(`code`,{title:Q.build.commitSha,"aria-label":`${K.buildCommit} ${Q.build.commitSha}`,children:Q.build.commitSha.slice(0,7)})]}),(0,U.jsx)(`p`,{children:At?(0,U.jsx)(`a`,{className:`canvas-hub-build__author`,href:At,target:`_blank`,rel:`noopener noreferrer`,children:jt}):(0,U.jsx)(`span`,{children:jt})}),r?.commitSha&&r.commitSha!==Q.build.commitSha?(0,U.jsx)(`p`,{className:`canvas-hub-build__notice`,children:`Local checkout differs from this Build`}):null]}):(0,U.jsxs)(`p`,{children:[`No successful imported Build yet. Current Build: `,Q.buildState||`none`,`.`]}),Q.build&&r?.hubOrigin?(0,U.jsx)(`a`,{className:`canvas-hub-build__history`,href:new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}/builds`,r.hubOrigin).href,target:`_blank`,rel:`noopener noreferrer`,children:K.showBuildHistory}):null]})]}):null,Ot?null:(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-origin-title`,children:[fn,r?.hubOrigin&&[`connected`,`undiscovered`,`pairing`,`denied`,`unavailable`].includes(r.state)?(0,U.jsx)(`div`,{className:`canvas-hub-disconnect`,children:(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:()=>{re(``),$(`/api/hub/disconnect`,e.token,{method:`POST`,body:`{}`}).then(async()=>{le(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),W(!0),await i(),c?.()}).catch(e=>{re(K.disconnectFailed(r.hubOrigin||``,e.message)),le(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),W(!0)})},children:`Disconnect Hub`})}):null]}),Q?.registered&&Q.build&&g?(0,U.jsx)(Mn,{preference:g,disabled:f}):null]}),Bt?(0,U.jsx)(vt,{frame:{open:E,className:`canvas-comments-sidebar-shell`,contentClassName:`canvas-comments-sidebar-content`},threads:It,currentBuildNumber:Pt?.number||0,buildLinkOrigin:r?.hubOrigin,totalCount:It.length,hasThreads:wt.length>0,filters:O,participants:Tt,resolutions:Et,selectedThreadId:N,selectionBlocked:Vt,closeBlocked:Ce,showPins:A,loading:ie,loadFailed:oe,notice:Re||r?.reviewError||r?.localCommentsError||ut?(0,U.jsxs)(`div`,{className:`canvas-comments-live-notices`,children:[Re?(0,U.jsx)(`p`,{className:`canvas-comments-live-status`,role:`status`,children:K.commentLiveUpdatesPaused}):null,r?.reviewError?(0,U.jsx)(`p`,{className:`canvas-comments-live-status`,children:r.reviewError}):null,r?.localCommentsError?(0,U.jsx)(`p`,{className:`canvas-comments-live-status`,role:`alert`,children:r.localCommentsError}):null,ut?(0,U.jsx)(`p`,{className:`canvas-comments-live-status`,children:K.localCommentsSaved}):null]}):null,copy:xt,onClose:ln,onFiltersChange:k,onShowPinsChange:j,onRetry:()=>void Jt(),onSelect:e=>P(e.root.id)}):null,(0,U.jsx)(jn,{selectionNotice:Ie?Ie===`area-too-small`?xt.areaTooSmallLabel:Ie===`area-unavailable`?xt.areaUnavailableLabel:xt.selectionFailedLabel:null,rateLimitNotice:Ht?null:te||!Z&&R||null,composer:Z&&Wt?{anchorPoint:Wt,bodyMaximumBytes:1e4,copy:xt,creating:Be?.kind===`create`,submitError:R,onSubmit:tn,onDiscard:$t}:null,conversation:Dt?{thread:Dt,anchorPoint:Te.get(Dt.root.id)??null,bodyMaximumBytes:1e4,mutation:Be,copy:xt,onClose:()=>P(null),onDraftStateChange:we,onReply:e=>en(`${Dt.root.id}/replies`,`POST`,{review_comment:{body:e}},{kind:`reply`,commentId:Dt.root.id}),onEdit:(e,t)=>en(`${e}`,`PATCH`,{review_comment:{body:t}},{kind:`edit`,commentId:e}),onDelete:e=>en(`${e}`,`DELETE`,void 0,{kind:`delete`,commentId:e}),onResolve:()=>en(`${Dt.root.id}/resolution`,`POST`,void 0,{kind:`resolve`,commentId:Dt.root.id}),onReopen:()=>en(`${Dt.root.id}/resolution`,`DELETE`,void 0,{kind:`reopen`,commentId:Dt.root.id}),onAddReaction:(e,t)=>en(`${e}/reactions`,`POST`,{review_comment_reaction:{content:t,activity_version:Dt.root.activityVersion}},{kind:`add-reaction`,commentId:e,content:t}),onRemoveReaction:(e,t)=>en(`${e}/reactions/${encodeURIComponent(t)}`,`DELETE`,{review_comment_reaction:{activity_version:Dt.root.activityVersion}},{kind:`remove-reaction`,commentId:e,content:t}),onMarkRead:e=>en(`${Dt.root.id}/read`,`POST`,{review_thread_read:{activity_version:e}}),onMarkUnread:()=>en(`${Dt.root.id}/read`,`DELETE`,void 0,{kind:`mark-unread`,commentId:Dt.root.id})}:null})]})}function In(e,t,n){function r(e,t,n){return{kind:e,title:t,detail:n}}if(!e||!t)return n.kind===`unknown`?r(`retry`,Y.unavailable,n.detail):r(`checking`,Y.checking,Y.checkingDetail);if(!e.stats.branch)return r(`restricted`,Y.restricted,n.detail);if(t.repository&&t.repository!==e.stats.repository||t.branch&&t.branch!==e.stats.branch)return r(`retry`,Y.unavailable,Y.changedDetail);if(t.discovery?.state===`local`||e.stats.repository?.startsWith(`local/`))return r(`restricted`,Y.restricted,Y.local);if(t.registrationReason===`branch_not_reviewable`||e.stats.branch===t.discovery?.defaultBranch)return r(`restricted`,Y.restricted,X.registrationReasons.get(`branch_not_reviewable`).description);if([`disconnected`,`pairing`,`unconfigured`].includes(t.state))return r(`connect`,Y.connect,Y.connectDetail);if([`denied`,`unavailable`].includes(t.state))return r(`retry`,Y.unavailable,t.message||Y.unavailableDetail);if(t.repository!==e.stats.repository||t.branch!==e.stats.branch)return r(`retry`,Y.unavailable,Y.unavailableDetail);let i=t.prototype;if(t.state===`connected`&&i?.branch===e.stats.branch&&i.registered&&i.published&&i.build&&Number.isSafeInteger(i.build.number)&&i.build.number>0)return r(`ready`,Y.ready,Y.readyDetail);if(t.state===`connected`&&(!i||i.branch!==e.stats.branch||typeof i.published!=`boolean`||i.published))return r(`retry`,Y.unavailable,Y.unavailableDetail);let a=t.state===`connected`?i?.canEdit:t.canPublish;if(a===!1)return r(`restricted`,Y.restricted,Y.publishDenied);let o=e.stats.remoteBranch,s=t.state===`undiscovered`&&t.repositoryAuthorized===!0&&!i&&(!t.commitSha||t.commitSha===e.stats.commitSha)&&o?.repository===e.stats.repository&&o?.branch===e.stats.branch&&o?.commitSha===e.stats.commitSha&&(o?.state===`absent`||o?.state===`present`&&e.publishRequest?.commitSha===e.stats.commitSha&&([`requested`,`in_progress`].includes(e.publishRequest?.state??``)||e.publishRequest?.state===`idle`&&e.publishRequest.remoteState===`absent`))&&![`loading`,`unknown`,`detached`,`workflow_missing`].includes(n.kind),c=a===void 0&&s;if(a!==!0&&!c)return r(`retry`,Y.unavailable,Y.permissionUnknown);let l=t.registrationReason||i?.registrationReason;if(n.error&&(l!==`remote_branch_missing`||!s)){let e=[`successful_build_required`,`already_registered`].includes(l||``),t=[`write_access_required`,`repository_mismatch`,`branch_not_reviewable`,`remote_branch_missing`,`branch_authorship_required`].includes(l||``);return{...r(e?`progress`:t?`restricted`:`retry`,n.error.title,n.error.description),...e?{publication:{...n,action:`retry`,label:X.retry}}:{}}}if(n.kind===`detached`)return r(`restricted`,Y.restricted,n.detail);if(n.action===`retry`)return r(`retry`,Y.unavailable,n.detail);if(n.kind===`loading`)return r(`checking`,Y.checking,n.detail);let u=c?`${Y.publishDetail} ${Y.publishPermissionUnverified}`:Y.publishDetail,d=s&&l===`remote_branch_missing`?{...n,error:void 0}:n;return n.action===`publish`?{...r(`publish`,Y.publish,u),publication:d}:{...r(`progress`,Y.preparing,u),publication:d}}function Ln({open:e,onToggle:t,buttonRef:n}){return(0,U.jsx)(G,{icon:C,"aria-label":K.controls,description:K.controls,ref:n,size:`small`,variant:`default`,className:`canvas-controls-toggle`,"aria-expanded":e,onClick:t})}function Rn({toolbarRef:e,config:t,onPublish:n,publishButtonRef:r,hubButtonRef:a,titleButtonRef:o,onBuildDetails:s,publishing:c,state:l,prototypeName:u,hubOpen:d,onHub:f,publication:p,onControls:m,controlsOpen:h,controlsButtonRef:g,onShare:_,shareButtonRef:v}){let y=l?.publishStatus??{state:`unavailable`,detail:K.statusUnavailable},b=u?.trim()||l?.stats.branch||l?.name||t.name,x=l?[b,l.stats.repository,l.stats.commitSha?.slice(0,7),l.stats.workingTree===`changed`?K.workingTreeChanged:K.workingTreeClean,l.stats.urlHost].filter(Boolean).join(` · `):b,S=c||(p?p.action===`none`:y.state===`requested`||y.state===`in_progress`||y.state===`published`),C=c||(p?p.kind===`requested`||p.kind===`queued`||p.kind===`building`||p.kind===`importing`||p.kind===`awaiting_build`||p.kind===`registration`:y.state===`requested`||y.state===`in_progress`),w=!C&&(p?p.kind===`ready`:y.state===`published`),T=(0,U.jsx)(H.Button,{type:`button`,ref:r,className:`canvas-publish-button`,variant:`secondary`,size:`small`,leadingVisual:C?(0,U.jsx)(L,{size:16}):zn(y.state),disabled:S&&!w,"aria-busy":C,title:w?void 0:p?.detail||y.detail,onClick:S||w?void 0:n,children:p?.label||K.publishLabels[y.state]});return(0,U.jsxs)(`header`,{ref:e,className:`canvas-toolbar`,children:[(0,U.jsx)(H.Button,{type:`button`,className:`canvas-title`,ref:o,variant:`subtle`,size:`small`,title:x,disabled:!l,onClick:s,children:b}),(0,U.jsx)(`div`,{id:`canvas-review-controls`,className:`canvas-review-controls-slot`}),m?(0,U.jsx)(Ln,{buttonRef:g,open:h,onToggle:m}):null,f?(0,U.jsx)(H.Button,{type:`button`,ref:a,size:`small`,variant:`secondary`,"aria-expanded":d,onClick:f,children:K.editDetails}):null,(0,U.jsxs)(`div`,{className:`canvas-publish-share`,role:`group`,"aria-label":J.group,children:[w?(0,U.jsx)(H.Tooltip,{ref:r,text:X.alreadyPublished,type:`description`,children:T}):T,_?(0,U.jsx)(G,{ref:v,icon:i,size:`small`,"aria-label":J.title,description:J.title,onClick:_}):null]})]})}function zn(e){return e===`published`?(0,U.jsx)(s,{size:16}):e===`failed`||e===`in_progress`||e===`requested`?(0,U.jsx)(L,{size:16}):(0,U.jsx)(D,{size:16})}function Bn(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>Je(e,t)))}}var Vn={bridgeUnavailable:`The prototype bridge is not ready on this page.`,routeChanged:`The prototype route changed. Inspect the live canvas again.`,reloaded:`The prototype reloaded before confirming the click. Inspect the live canvas and retry.`,unconfirmed:`The prototype did not confirm the click. Check its bridge and retry.`,clickFailed:`The target could not be clicked.`,addressUnavailable:`The canvas address field is unavailable.`,unknownAction:`Unknown canvas action.`,replyRejected:`The live canvas rejected the action reply. Check its transport diagnostics.`,actionInterrupted:`The canvas changed before the action could run. Inspect the live canvas and retry.`,statusInterrupted:`The canvas changed while collecting Controls status. Inspect the live canvas and retry.`};function Hn(e){let{token:t,prototypeUrl:n,previewUrl:r,cancelClick:i}=e,a=(0,V.useRef)(e),o=(0,V.useRef)(null);(0,V.useLayoutEffect)(()=>{a.current=e}),(0,V.useEffect)(()=>{o.current??=crypto.randomUUID();let e={"X-Replica-Renderer-Id":o.current},s=!1,c=!1,l=new AbortController,u=new URL(r??n).origin;async function d(e){let t=a.current.frameRef.current,n=a.current.liveRoute;if(!t?.contentWindow||!n)throw Error(Vn.bridgeUnavailable);if(e.route.pathname!==n.pathname||e.route.search!==n.search||e.route.hash!==n.hash)throw Error(Vn.routeChanged);let r=crypto.randomUUID();return await new Promise((n,a)=>{function o(){window.clearTimeout(c),window.removeEventListener(`message`,l),i.current===s&&(i.current=null)}function s(){o(),a(Error(Vn.reloaded))}let c=window.setTimeout(()=>{o(),a(Error(Vn.unconfirmed))},2e3);function l(i){let s=i.data;i.source===t?.contentWindow&&i.origin===u&&s&&typeof s==`object`&&`type`in s&&s.type===`replica:canvas:click-result`&&`nonce`in s&&s.nonce===r&&(o(),`clicked`in s&&s.clicked===!0?n({clicked:!0,route:e.route}):a(Error(Vn.clickFailed)))}i.current=s,window.addEventListener(`message`,l),t.contentWindow.postMessage({type:`replica:canvas:click`,nonce:r,...e},u)})}async function f(e){let t=a.current.frameRef.current,r=crypto.randomUUID(),i=Date.now()+e,o=await new Promise((n,o)=>{function s(){window.clearTimeout(d),window.removeEventListener(`message`,p),t?.removeEventListener(`load`,m),l.signal.removeEventListener(`abort`,c)}function c(){s(),o(Error(Vn.statusInterrupted))}let d=window.setTimeout(()=>{if(s(),a.current.liveRoute)o(Error(Vn.bridgeUnavailable));else{let e=new URL(a.current.navigation.entries[a.current.navigation.index]);e.protocol=new URL(u).protocol,e.host=new URL(u).host,n({status:`pending`,url:e.href,error:``,controls:[]})}},e+1500),f=!1;function p(e){let i=e.data;e.source===t?.contentWindow&&t===a.current.frameRef.current&&e.origin===u&&i&&typeof i==`object`&&`type`in i&&(i.type===`replica:canvas:ready`&&!f&&(f=!0,m()),i.type===`replica:controls:status-result`&&`nonce`in i&&i.nonce===r&&`value`in i&&(s(),n(i.value)))}function m(){t===a.current.frameRef.current&&t?.contentWindow?.postMessage({type:`replica:controls:status`,nonce:r,timeoutMs:Math.max(0,i-Date.now())},u)}window.addEventListener(`message`,p),t?.addEventListener(`load`,m),l.signal.addEventListener(`abort`,c),m()});if(!o||typeof o!=`object`||!(`url`in o)||typeof o.url!=`string`||!(`status`in o)||typeof o.status!=`string`||!(`error`in o)||typeof o.error!=`string`||!(`controls`in o)||!Array.isArray(o.controls))throw Error(Vn.bridgeUnavailable);let s=new URL(o.url);if(s.origin!==u)throw Error(Vn.routeChanged);let c=new URL(n);s.protocol=c.protocol,s.host=c.host;let d=await p(i);return!d&&a.current.controlsConnection===void 0?{...o,url:s.href}:{...d?Bn(d,d.loading,s.href):{status:`pending`,url:s.href,error:``,controls:[]},runtime:{status:o.status,error:o.error,controls:o.controls}}}function p(e){let t=a.current.controlsConnection;if(!t)return Promise.resolve(null);let n=t.getSnapshot,r=t.subscribe,i=n();return!i.loading||e<=Date.now()?Promise.resolve(i):new Promise(t=>{let i={};function a(e){window.clearTimeout(c),i.unsubscribe?.(),l.signal.removeEventListener(`abort`,s),t(e)}function o(){let e=n();e.loading||a(e)}function s(){a(null)}let c=window.setTimeout(()=>a(n()),e-Date.now());i.unsubscribe=r(o),l.signal.addEventListener(`abort`,s,{once:!0}),o()})}async function m(){if(!(s||c)){s=!0;try{let{command:r,prototypeUrl:i}=await $(`/api/agent/next`,t,{headers:{...e,"X-Replica-Prototype-Url":n}});if(!c&&i&&i!==n){window.location.reload();return}if(!r)return;let o;try{if(await $(`/api/agent/progress`,t,{method:`POST`,headers:e,body:JSON.stringify({id:r.id,stage:`handler started`})}),c)throw Error(Vn.actionInterrupted);let n;if(r.type===`inspect`){let{appearance:e,navigation:t,liveRoute:r,addressRef:i}=a.current,o=i.current?.value;if(o===void 0)throw Error(Vn.addressUnavailable);n={address:t.entries[t.index],addressDraft:o,appearance:e,canGoBack:t.index>0,canGoForward:t.indexvoid m(),300);return()=>{c=!0,l.abort(),window.clearInterval(h),i.current?.()}},[n,r,t,i])}function Un(e,t,n){let r=t?.repository===e?.stats.repository&&t?.branch===e?.stats.branch,i=!e?.stats.branch&&!!e?.stats.branchError,a=i?void 0:t?.branch,o=!!(e&&!i&&(t?.repository&&t.repository!==e.stats.repository||t?.branch&&t.branch!==e.stats.branch||t?.commitSha&&t.commitSha!==e.stats.commitSha)),s=!!(n.kind===`ready`&&r&&t?.state===`connected`&&t.prototype?.published&&t.prototype.build?.commitSha===e?.stats.commitSha);return{state:e&&{...e,publishStatus:!s&&[`requested`,`in_progress`].includes(e.publishStatus?.state??``)||t?.state===`connected`&&!r?e.publishStatus:s&&t?.prototype?.build?{state:`published`,detail:K.hubBuildImported,versionCount:t.prototype.versionCount,lastUpdatedAt:t.prototype.build.publishedAt,run:{url:t.prototype.build.url,actor:t.prototype.build.author.login||t.prototype.build.author.name?{login:t.prototype.build.author.login||void 0,name:t.prototype.build.author.name||void 0,avatarUrl:t.prototype.build.author.avatarUrl||void 0}:null}}:{state:t?.state===`connected`?`not_published`:`unavailable`,detail:t?.state===`connected`?K.hubBuildMissing:K.hubPublicationUnavailable},stats:{...e.stats,branch:a||e.stats.branch,branchError:a&&a!==e.stats.branch?null:e.stats.branchError,repository:t?.repository||e.stats.repository,commitSha:e.stats.commitSha,comparison:o?{branch:null,source:null,behind:null,error:K.comparisonNeedsRefresh}:e.stats.comparison,publishedUrl:s?t?.prototype?.build?.url:void 0}},hubPublished:s,comparisonOutdated:o}}function Wn(e,t){let n;function r(e,t,r,i=`none`){return{kind:e,detail:t,label:r,action:i,...n?{error:n}:{}}}if(!e)return r(`loading`,X.initial,X.checking);let{stats:i}=e,a=i.remoteBranch;if(!a||a.state===`loading`)return r(`loading`,X.checkingRemote,X.checking);if(!i.branch||a.state===`detached`)return r(`detached`,X.detached,X.retry,`retry`);if(a.repository!==i.repository||a.branch!==i.branch||a.commitSha!==i.commitSha)return r(`unknown`,X.changed,X.retry,`retry`);if(a.state===`unknown`)return r(`unknown`,X.unknown(a.error),X.retry,`retry`);let o=t?.state===`connected`?t.prototype:void 0,s=o?.build?.commitSha===i.commitSha&&o?.branch===i.branch,c=e.publishRequest,l=t?.state===`connected`&&t.repository===i.repository&&t.branch===i.branch&&(!t.commitSha||t.commitSha===i.commitSha)&&t.prototype?.branch===i.branch&&t.prototype.build?.commitSha===i.commitSha?t.prototype.build:null,u=!!(l&&(c?.commitSha!==i.commitSha||c.buildNumber===void 0||typeof c.buildNumber==`number`&&l.number>c.buildNumber)),d=u&&o?.registered&&o.published,f=t!==null&&t.repository===i.repository&&(!t.branch||t.branch===i.branch)&&(!t.commitSha||t.commitSha===i.commitSha);if(t&&f&&(t.state===`connected`||t.state===`undiscovered`)&&!o?.registered&&(!o||o.branch===i.branch)){let e=t.registrationReason||o?.registrationReason,r=i.branch===t.discovery?.defaultBranch;if(e||t.registrationError||o?.canRegister===!1||r){let i=e||(r?`branch_not_reviewable`:o?.canEdit===!1?`write_access_required`:o?.canRegister===!1&&a.state===`absent`?`remote_branch_missing`:void 0);n=i&&X.registrationReasons.get(i)||{title:X.registrationErrorTitle,description:t.registrationError||X.registrationDenied}}}if(c?.state===`requested`&&(!c.commitSha||c.commitSha===i.commitSha)&&(a.state===`absent`||a.remoteSha!==i.commitSha)&&!u){let e=Date.now()-Date.parse(c.requestedAt||``);if(Number.isFinite(e)&&e<6e5)return r(`requested`,X.pending,X.awaitingCopilot)}if(!t)return r(`loading`,X.checkingHub,X.checking);if(t.state===`disconnected`||t.state===`pairing`||t.state===`unconfigured`)return r(`disconnected`,t.message||X.disconnected,X.connect);if(t.state===`denied`||t.state===`unavailable`)return{...r(`unknown`,t.message||X.hubUnavailable,X.retry,`retry`),error:{title:X.hubUnavailableTitle,description:t.message||X.hubUnavailable}};if(!f)return r(`unknown`,X.staleHub,X.retry,`retry`);if(!i.replicaWorkflowExists)return r(`workflow_missing`,X.workflowMissing,X.retry,`retry`);if(c?.state===`failed`&&!d&&(!c.commitSha||c.commitSha===i.commitSha))return r(`failed`,c.error||X.dispatchFailed,X.retryPublish,`publish`);if(a.state===`absent`)return r(`unpublished`,X.absent,X.publishBranch,`publish`);if(a.remoteSha!==i.commitSha)return r(`needs_push`,X.needsPush,X.publishChanges,`publish`);if(s){if(!o.registered)return r(`registration`,t.registrationError||(o.canEdit&&o.canRegister?X.needsRegistration:X.registrationDenied),t.registrationError?X.registrationFailed:X.registration);if(o.published&&u)return r(`ready`,X.ready,X.published)}if(o?.currentBuild?.commitSha===i.commitSha&&o.branch===i.branch&&o.currentBuild.state===`failed`)return r(`failed`,X.importFailed,X.retryPublish,`publish`);let p=i.workflow;if(!p||p.state===`unavailable`)return r(`unknown`,p?.detail||X.workflowUnavailable,X.retry,`retry`);let m=p.run;if(m&&(m.headSha!==i.commitSha||m.headBranch!==i.branch))return r(`unknown`,X.staleWorkflow,X.retry,`retry`);if(c?.commitSha===i.commitSha&&c.workflowRunId!=null&&m?.databaseId===c.workflowRunId&&!u)return r(`awaiting_build`,X.noBuild,X.awaitingBuild);let h;if(p.state===`in_progress`&&m){let e=[`queued`,`waiting`,`pending`,`requested`].includes(m.status||``);h=r(e?`queued`:`building`,e?X.workflowQueued:X.workflowBuilding,e?X.queued:X.building)}else h=p.state===`failed`&&m?r(`failed`,X.workflowFailed(m.conclusion),X.retryPublish,`publish`):p.state===`succeeded`&&m?r(`importing`,X.importing,X.awaitingHub):r(`awaiting_build`,X.noBuild,X.awaitingBuild);return m?.url?.startsWith(`https://github.com/`)&&(h.runUrl=m.url),h}function Gn({token:e,state:t,hubStatus:n,error:r,setError:i,refresh:a,refreshHub:o,preferenceSaving:s=!1}){let[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(null),m=(0,V.useRef)(!1),[h,g]=(0,V.useState)(null),[_,v]=(0,V.useState)(``),[y,b]=(0,V.useState)(!1),x=!t&&r?{kind:`unknown`,action:`retry`,label:X.retry,detail:r}:Wn(t,n),S=`${t?.stats.repository}/${t?.stats.branch}/${t?.stats.commitSha}`,C=f?.identity===S&&x.action===`publish`?{...x,kind:`failed`,detail:f.message,label:X.retryPublish}:x.kind===`ready`&&t?.stats.workingTree===`changed`?{...x,kind:`needs_push`,action:`publish`,label:X.publishChanges,detail:X.localChanges}:x,w=Un(t,n,x);(0,V.useEffect)(()=>{w.comparisonOutdated&&a(!0)},[w.comparisonOutdated,n?.branch,n?.commitSha,n?.repository,a]);async function T(){if(!y){b(!0);try{await Promise.all([a(!0),o()])}finally{b(!1)}}}async function E(){s||(C.action===`retry`?await T():C.action===`none`||m.current||h||await D())}async function D(){if(!(s||m.current)){m.current=!0,d(!0),i(``),v(``);try{let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});t.workingTree===`unavailable`||t.workingTree===`changed`&&!t.remember?g({preparation:t}):(g(null),await O(t,t.workingTree===`changed`?`commit-changes`:`committed-only`))}catch(e){let t=e instanceof Error?e.message:String(e);i(t),v(t)}finally{m.current=!1,d(!1)}}}async function O(r,s,c){if(s===`committed-only`&&n?.state===`connected`&&n.repository===r.target.repository&&n.branch===r.target.branch&&n.prototype?.registered&&n.prototype.published&&n.prototype.build?.commitSha===r.target.commitSha&&t?.stats.remoteBranch?.state===`present`&&t.stats.remoteBranch.remoteSha===r.target.commitSha)g(null);else{p(null),v(``),i(``);try{let t=await $(`/api/publish`,e,{method:`POST`,body:JSON.stringify({target:r.target,workingTree:r.workingTree,mode:s,remember:c})});g(null),l(t.message),await o(),await a(!1)}catch(e){let t=e instanceof Error?e.message:String(e);p({message:t,identity:S}),i(t),v(t)}}}async function k(e,t){if(!(s||!h||m.current)){if(h.preparation.workingTree===`unavailable`&&e!==`committed-only`)v(q.checkFailed);else{m.current=!0,d(!0);try{await O(h.preparation,e,t)}finally{m.current=!1,d(!1)}}}}return{publication:C,presentedState:w.state,busy:u||y||s,notice:c,publishDialog:h,publishDialogError:_,closePublishDialog:()=>g(null),choosePublish:k,retryPublishCheck:D,publish:E,retry:T}}var Kn=`replica:controls`;function qn(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&Se(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||Se({[r.id]:r.value}))}catch{return!1}}function Jn(e){return Array.isArray(e)&&e.length<=100&&e.every(e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&`scope`in e&&typeof e.scope==`string`&&e.scope.length>0&&e.scope.length<=64&&`error`in e&&typeof e.error==`string`&&e.error.length>0&&e.error.length<=500)}function Yn(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.runtimeAvailable!=`boolean`||t.reconnectRequired!==void 0&&typeof t.reconnectRequired!=`boolean`||t.status===`ready`&&(!t.runtimeAvailable||!t.scopes?.length)||t.error!==void 0&&(typeof t.error!=`string`||t.error.length>1e3)||t.scopeErrors!==void 0&&!Jn(t.scopeErrors)||![`ready`,`no-controls`,`missing-runtime`,`unsupported-runtime`,`invalid-config`].includes(t.status)||!Array.isArray(t.scopes)||t.scopes.length>100||t.status!==`ready`&&t.scopes.length>0)return!1;try{let e=new Set;for(let n of t.scopes){if(Ue(n.declaration),e.has(n.declaration.scope)||(e.add(n.declaration.scope),n.fingerprint!==JSON.stringify(n.declaration)||!Number.isSafeInteger(n.snapshot.revision)||n.snapshot.revision<0))return!1;let t=n.snapshot;if(!t.values||!t.visible||!t.groups||!t.actions)return!1;function r(e,t){return typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}if(!r(t.values,n.declaration.controls.filter(e=>e.type!==`button`).map(e=>e.id))||!r(t.visible,n.declaration.controls.map(e=>e.id))||!r(t.groups,(n.declaration.groups??[]).map(e=>e.id))||!r(t.actions,n.declaration.controls.filter(e=>e.type===`button`).map(e=>e.id))||Object.values(t.groups).some(e=>typeof e!=`boolean`))return!1;if(t.bindings!==void 0){if(!t.bindings||typeof t.bindings!=`object`||Array.isArray(t.bindings))return!1;for(let[e,r]of Object.entries(t.bindings))if(!n.declaration.controls.some(t=>t.id===e)||!r||typeof r.error!=`string`||r.error.length>500||typeof r.busy!=`boolean`||r.available!==void 0&&typeof r.available!=`boolean`)return!1}for(let e of n.declaration.controls){if(typeof t.visible[e.id]!=`boolean`)return!1;if(e.type===`button`){let n=t.actions[e.id];if(!n||typeof n.available!=`boolean`||typeof n.busy!=`boolean`)return!1}else if(ze(e,t.values[e.id]))return!1}}return!0}catch{return!1}}function Xn(){return{runtimeAvailable:!1,status:`missing-runtime`,scopes:[],scopeErrors:[],loading:!0,notice:``,error:``,storageError:``,resetting:!1}}var Zn=class{frame;origin;api;surface;epoch=``;sequence=-1;state=Xn();listeners=new Set;pending=new Map;saved;storageReady=!1;restored=new Set;preparing=new Set;persisted=new Map;cachedScopes=new Map;retryState;resetForIdentity=!1;fromFrameUrl=!1;requests=new AbortController;poll;deadline;saveQueue=Promise.resolve();editQueue=Promise.resolve();stopped=!0;constructor(e,t,n,r=`canvas`){this.frame=e,this.origin=t,this.api=n,this.surface=r}getSnapshot=()=>this.state;getControlValues=()=>{let e=structuredClone(this.saved?.scopes??{}),t=new Map(this.cachedScopes);for(let e of this.state.scopes)t.set(e.declaration.scope,e);for(let[n,r]of t)e[n]=Xe(r);return e};subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});publish(e){this.state={...this.state,...e},this.state.hasResettableValues=Object.values(this.getControlValues()).some(e=>Object.keys(e).length>0);for(let e of[...this.listeners])e()}hasBindingError(e,t){return this.state.scopes.some(n=>(!e||n.declaration.scope===e)&&Object.entries(n.snapshot.bindings??{}).some(([e,n])=>(!t||e===t)&&!!n.error))}checkSaved(e){let t=e,n=/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;if(!t||typeof t!=`object`||typeof t.identity!=`string`||!t.identity||t.identity.length>128||!t.scopes||typeof t.scopes!=`object`||Array.isArray(t.scopes)||t.storageError!==void 0&&(typeof t.storageError!=`string`||t.storageError.length>1e3)||t.notice!==void 0&&(typeof t.notice!=`string`||t.notice.length>1e3)||new Blob([JSON.stringify(t)]).size>27e4)throw Error(`Invalid controls storage response.`);for(let[e,r]of Object.entries(t.scopes)){if(!n.test(e)||!r||typeof r!=`object`||Array.isArray(r))throw Error(`Invalid controls storage scope.`);for(let[e,t]of Object.entries(r))if(!n.test(e)||!(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))throw Error(`Invalid saved control value.`)}}start=e=>{this.fromFrameUrl=e?.type===`load`&&this.sequence>=0;let t=[...this.pending.values()].some(e=>e.action);this.stop(),this.requests=new AbortController,this.stopped=!1,this.epoch=crypto.randomUUID(),this.sequence=-1,this.saved=void 0,this.storageReady=!1,this.restored.clear(),this.preparing.clear(),this.persisted.clear(),this.editQueue=Promise.resolve(),this.cachedScopes.clear(),this.retryState=void 0,this.resetForIdentity=!1,this.state=Xn(),t&&(this.state.notice=`The preview reconnected during an action. Its outcome is unknown; it was not replayed.`),this.publish({});let n=this.epoch;window.addEventListener(`message`,this.receive),this.frame.addEventListener(`load`,this.start);let r=()=>{this.storageReady&&(this.surface===`canvas`&&this.frame.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:n},this.origin),this.send(`hello`).catch(()=>{}))};r(),this.poll=setInterval(()=>{this.state.status===`missing-runtime`&&r()},1e3),this.deadline=setTimeout(()=>{this.state.loading&&this.publish({loading:!1,error:this.surface===`build`?`Build Controls did not connect. Reload the preview or check its definitions.`:K.controlsLocalConnectionFailed})},6e3),this.api().then(e=>{if(!(this.epoch!==n||this.stopped)){if(this.checkSaved(e),this.saved=e,this.retryState?.identity===e.identity)for(let[e,t]of this.retryState.scopes)this.restored.add(`${e}:${t.fingerprint}`),this.cachedScopes.set(e,t);else this.retryState?.identity&&(this.resetForIdentity=!0,this.publish({notice:`The checkout identity changed. Controls will use this branch's saved values or defaults.`}));this.retryState=void 0,this.storageReady=!0,this.publish({storageError:e.storageError||``,notice:e.notice||this.state.notice}),this.prepare(this.state),r()}}).catch(e=>{this.epoch!==n||this.stopped||(this.storageReady=!0,this.publish({storageError:this.surface===`build`?e instanceof Error?e.message:`Control settings could not be read from the URL.`:K.controlsLocalStorageFailed}),this.prepare(this.state),r())})};retry=()=>{let e={identity:this.saved?.identity,scopes:new Map(this.cachedScopes)};this.start(),this.retryState=e};stop=()=>{this.stopped=!0,this.requests.abort(),clearInterval(this.poll),clearTimeout(this.deadline),window.removeEventListener(`message`,this.receive),this.frame.removeEventListener(`load`,this.start);for(let e of this.pending.values())clearTimeout(e.timer),e.reject(Error(`The preview navigated. The command outcome is unknown; it will not be replayed.`));this.pending.clear()};receive=e=>{if(this.stopped||e.source!==this.frame.contentWindow||e.origin!==this.origin||!qn(e.data))return;let t=e.data;if(t.epoch!==this.epoch||!Yn(t.state)||!Number.isSafeInteger(t.sequence)||(t.sequence??-1)<0||t.type!==`snapshot`&&t.type!==`reply`)return;let n=this.pending.get(t.requestId);if(t.type!==`reply`||n){if((t.sequence??-1)>this.sequence){if(t.type===`snapshot`&&t.controlQuery!==void 0&&this.saved){let e=Ee(t.controlQuery),n=this.saved.identity,r=this.epoch;this.stop();let i=new AbortController;this.requests=i,this.publish({loading:!0}),this.api({method:`POST`,signal:i.signal,body:JSON.stringify({identity:n,replace:!0,scopes:e.scopes})}).then(()=>{this.epoch!==r||i.signal.aborted||(this.start(),e.notice&&this.publish({notice:e.notice}))}).catch(e=>{this.epoch!==r||i.signal.aborted||this.publish({loading:!1,storageError:e instanceof Error?e.message:`Controls history could not be restored.`})});return}if(t.controlQuery!==void 0&&this.saved){let e=this.epoch,n=this.requests,r=Ee(t.controlQuery);this.saved.scopes=r.scopes,this.restored.clear(),this.persisted.clear(),this.cachedScopes.clear(),this.publish({notice:r.notice,loading:!0}),this.api({method:`POST`,signal:n.signal,body:JSON.stringify({identity:this.saved.identity,replace:!0,scopes:r.scopes})}).catch(t=>{this.epoch!==e||this.stopped||n.signal.aborted||this.publish({storageError:t instanceof Error?t.message:`Controls history could not be restored.`})})}this.sequence=t.sequence;let e=t.state.status;this.publish({...t.state,scopeErrors:t.state.scopeErrors??[],reconnectRequired:t.state.reconnectRequired===!0,status:e,error:t.state.error||(this.state.status===`missing-runtime`&&t.state.status!==`missing-runtime`?``:this.state.error),loading:!this.storageReady||this.state.resetting||this.preparing.size>0||this.state.loading&&e===`missing-runtime`}),this.prepare(this.state)}n&&(this.pending.delete(t.requestId),clearTimeout(n.timer),t.error?n.reject(Error(t.error)):n.resolve(this.state))}};send(e,t){let n=crypto.randomUUID(),r={protocol:Kn,version:1,epoch:this.epoch,requestId:n,type:e,...t?{command:t}:{},...e===`hello`?{controlQuery:Te(this.saved?.scopes??{}),fromFrameUrl:this.fromFrameUrl}:{}};return qn(r)?new Promise((i,a)=>{let o=setTimeout(()=>{this.pending.delete(n),a(Error(`The command timed out. Its outcome is unknown; it will not be retried automatically.`))},e===`hello`?1200:3e4);this.pending.set(n,{resolve:i,reject:a,timer:o,action:t?.operation===`action`}),this.frame.contentWindow?.postMessage(r,this.origin)}):Promise.reject(Error(`The controls command is invalid or exceeds the size limit.`))}async prepare(e){if(!this.saved&&!this.state.storageError||this.state.resetting||e.reconnectRequired)return;let t=this.epoch;if(this.resetForIdentity&&(e.status===`ready`||e.status===`no-controls`)){this.resetForIdentity=!1,this.publish({loading:!0,resetting:!0});try{await this.send(`command`,{operation:`reset-all`,contexts:e.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch{this.epoch===t&&this.publish({error:`The checkout changed, but runtime defaults could not be restored. Reload the preview before saving.`,storageError:`Saving is paused until the new checkout's runtime reconnects.`,loading:!1});return}finally{this.epoch===t&&this.publish({resetting:!1})}return this.epoch!==t||this.stopped?void 0:this.prepare(this.state)}for(let n of e.scopes){let e=n.declaration.scope,r=`${e}:${n.fingerprint}`;if(!this.preparing.has(r)){if(!this.restored.has(r)){this.preparing.add(r),this.publish({loading:!0});try{let i=this.saved?.scopes&&Object.hasOwn(this.saved.scopes,e)?this.saved.scopes[e]:{},a=Object.fromEntries(n.declaration.controls.filter(e=>e.type!==`button`).map(e=>[e.id,structuredClone(e.default)])),o=!1;for(let[e,t]of Object.entries(i)){let r=n.declaration.controls.find(t=>t.id===e);!r||ze(r,t)?o=!0:a[e]=t}if(Object.keys(a).length&&await this.send(`command`,{operation:`restore`,scope:e,fingerprint:n.fingerprint,revision:this.state.scopes.find(e=>e.fingerprint===n.fingerprint)?.snapshot.revision,values:a}),this.stopped||this.epoch!==t)return;this.restored.add(r),o&&this.publish({notice:this.surface===`build`?`Some URL control settings no longer match this page. Defaults were used.`:`Some saved controls no longer match this declaration and were discarded.`})}catch(n){if(this.epoch!==t||this.stopped)return;this.hasBindingError(e)||this.publish({error:n instanceof Error?n.message:`Saved controls could not be restored.`}),this.restored.add(r)}finally{this.epoch===t&&this.preparing.delete(r)}}if(this.epoch===t&&!this.stopped){let t=this.state.scopes.find(t=>t.declaration.scope===e);t&&(this.cachedScopes.set(e,t),this.persist(t))}}}this.epoch===t&&!this.stopped&&this.state.status!==`missing-runtime`&&this.publish({loading:this.preparing.size>0})}persist(e){if(!this.saved||this.state.storageError)return;let t=Xe(e),n=JSON.stringify(t);if(this.persisted.get(e.declaration.scope)===n)return;this.persisted.set(e.declaration.scope,n);let r=this.saved.identity,i=this.epoch,a=this.requests.signal;this.saveQueue=this.saveQueue.catch(()=>{}).then(async()=>{if(!(this.epoch!==i||this.stopped))try{if(await this.api({method:`POST`,signal:a,body:JSON.stringify({identity:r,scope:e.declaration.scope,values:t})}),this.epoch===i&&!this.stopped){let t=await this.api();if(this.checkSaved(t),this.epoch!==i||this.stopped)return;this.saved=t,await this.send(`command`,{operation:`url`,scope:e.declaration.scope,query:Te(t.scopes)})}}catch(e){this.epoch===i&&!this.stopped&&this.publish({storageError:this.surface===`build`&&e instanceof Error?`${e.message} Changes remain in memory and are not in the URL.`:`Controls could not be saved. Changes remain in memory; use Retry to reconnect storage.`})}})}async command(e,t,n,r){if(this.state.loading||this.state.resetting||this.stopped)return;let i=this.epoch,a=this.state.scopes.find(e=>e.declaration.scope===t);if(!a){this.publish({error:`This controls scope is no longer active.`});return}let o=()=>this.applyCommand(e,t,a.fingerprint,i,n,r);if(e!==`update`)return o();let s=this.editQueue.catch(()=>{}).then(o);return this.editQueue=s.then(()=>{}),s}async applyCommand(e,t,n,r,i,a){if(this.epoch!==r||this.stopped||this.state.resetting)return;let o=this.state.scopes.find(e=>e.declaration.scope===t);if(!o||o.fingerprint!==n)this.publish({error:`The controls scope or declaration changed. The command was not applied.`});else{this.publish({error:``});try{if(this.state.reconnectRequired)throw Error(`Reconnect controls before sending more commands.`);if(e===`update`||e===`action`){let t=o.declaration.controls.find(e=>e.id===i);if(!t||!o.snapshot.visible[t.id])throw Error(`This control is unknown or hidden.`);if(e===`update`){let e=ze(t,a);if(e)throw Error(`Control "${t.id}": ${e}`)}else if(t.type!==`button`||!o.snapshot.actions[t.id]?.available||o.snapshot.actions[t.id]?.busy)throw Error(`This action is unavailable or busy.`)}let n=await this.send(`command`,{operation:e,scope:t,fingerprint:o.fingerprint,revision:o.snapshot.revision,...i?{id:i}:{},...e===`update`?{value:a}:{}});if(e===`update`&&i)return{value:n.scopes.find(e=>e.declaration.scope===t)?.snapshot.values[i]}}catch(e){!this.stopped&&this.epoch===r&&!this.hasBindingError(t,i)&&this.publish({error:e instanceof Error?e.message:`Controls command failed.`})}}}async resetAll(){if(this.state.resetting||this.stopped)return;let e=this.epoch;this.publish({resetting:!0});try{let t=``;await this.editQueue.catch(()=>{});let n=this.state.runtimeAvailable&&(this.state.status===`ready`||this.state.status===`no-controls`);if(n)try{await this.send(`command`,{operation:`reset-all`,contexts:this.state.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch(e){t=e instanceof Error?e.message:`Some app defaults could not be restored.`}if(this.epoch!==e||this.stopped)return;if(!this.saved){let e=await this.api();this.checkSaved(e),this.saved=e}await this.saveQueue.catch(()=>{}),await this.api({method:`POST`,signal:this.requests.signal,body:JSON.stringify({identity:this.saved.identity,reset:!0})}),this.saved.scopes={},await this.send(`command`,{operation:`url`,query:``}),this.cachedScopes.clear(),this.persisted.clear(),this.publish({storageError:``,error:this.hasBindingError()?``:t,notice:n?``:`Saved controls were cleared. Runtime defaults could not be restored until the preview reconnects.`})}catch(t){this.epoch===e&&this.publish({storageError:t instanceof Error?t.message:`Reset could not be saved.`})}finally{this.epoch===e&&this.publish({resetting:!1,loading:!1})}}};function Qn(e,t=()=>window.location.href,n=e=>{window.history.replaceState(window.history.state,``,e),window.dispatchEvent(new Event(Ce))}){return r=>Promise.resolve().then(()=>{r?.signal?.throwIfAborted();let i=Ee(new URL(t()).search);if(!r)return{identity:e,...i};if(r.method!==`POST`||typeof r.body!=`string`)throw Error(`Invalid URL controls request.`);let a=JSON.parse(r.body);if(!a||typeof a!=`object`||!(`identity`in a)||a.identity!==e)throw Error(`The controls URL identity changed.`);let o=i.scopes;if(`reset`in a&&a.reset===!0)o={};else if(`replace`in a&&a.replace===!0&&`scopes`in a){if(!a.scopes||typeof a.scopes!=`object`||Array.isArray(a.scopes))throw Error(`Invalid controls history settings.`);let e={};for(let[t,n]of Object.entries(a.scopes)){if(!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(t)||!Se(n))throw Error(`Invalid controls history settings.`);e[t]=n}o=Ee(Te(e)).scopes}else{if(!(`scope`in a)||typeof a.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(a.scope)||!(`values`in a)||!Se(a.values))throw Error(`Invalid URL control settings.`);o={...o,[a.scope]:a.values}}let s=De(t(),Te(o));s!==t()&&n(s)})}function $n({frameRef:e,prototypeUrl:t,previewUrl:n,address:r,replaceAddress:i}){let[a,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(null),l=(0,V.useRef)({address:r,replaceAddress:i});return(0,V.useLayoutEffect)(()=>{l.current={address:r,replaceAddress:i}},[r,i]),(0,V.useEffect)(()=>{if(!e.current)return;let r=new Zn(e.current,new URL(n??t).origin,Qn(`prototype:${new URL(t).origin}`,()=>l.current.address,e=>{l.current.address=e,l.current.replaceAddress(e)}));o(r);let i=r.subscribe(()=>c(r.getSnapshot()));return r.start(),()=>{i(),r.stop()}},[t,n,e]),{connection:a,state:s}}function er({token:e,status:t,onStatusChange:n,onSelectHub:r}){let[i,a]=(0,V.useState)(!1),[o,s]=(0,V.useState)(!1),[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(null),m=(0,V.useRef)(!1),h=(0,V.useRef)(!1),g=t?.state===`connected`||t?.state===`undiscovered`,_=t?.state===`disconnected`||t?.state===`pairing`||t?.state===`unconfigured`,v=g?null:t?.pairing||(f?.repository===t?.repository&&f?.hubOrigin===t?.hubOrigin?f?.pairing:null),y=v?.verificationUrl;(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{g?(a(!1),p(null),l(``)):_&&t?.repository&&!m.current&&(m.current=!0,a(!0))},0);return()=>window.clearTimeout(e)},[g,_,t?.repository]),(0,V.useEffect)(()=>{if(!y||u)return;let t=!1,r=!1;async function i(){if(!r){r=!0;try{let r=await $(`/api/hub/poll`,e,{method:`POST`,body:`{}`});if(t)return;r.status!==`pending`&&(p(null),r.status!==`approved`&&l(K.connectionApprovalExpired),await n())}catch(e){t||(l(e instanceof Error?e.message:String(e)),d(!0))}finally{r=!1}}}let a=window.setInterval(()=>void i(),3e3);return()=>{t=!0,window.clearInterval(a)}},[y,u,e,n,t?.repository,t?.hubOrigin]);async function b(i){if(m.current=!0,!h.current){if(!t?.repository)l(K.connectionRepositoryRequired);else if(!t.hubOrigin&&!i)l(K.connectionHubRequired);else{h.current=!0,s(!0),l(``),d(!1);try{!t.hubOrigin&&i&&await r(i);let a=await $(`/api/hub/connect`,e,{method:`POST`,body:`{}`});p({repository:t.repository,hubOrigin:new URL(a.verificationUrl).origin,pairing:a}),a.browserError&&l(K.connectionBrowserFailed(a.browserError)),await n()}catch(e){l(e instanceof Error?e.message:String(e))}finally{h.current=!1,s(!1)}}}}function x(){a(!0),t?.hubOrigin&&b()}return{open:i,close:()=>a(!1),show:()=>a(!0),showAndConnect:x,connect:b,connecting:o,error:c,pairing:v}}function tr({token:e,onStatus:t,onError:n}){let[r,i]=(0,V.useState)(null),a=(0,V.useRef)(0),o=(0,V.useRef)(0),s=(0,V.useRef)(!1),c=(0,V.useCallback)(async(r,c=!1)=>{if(s.current||c&&o.current>0)return;o.current+=1;let l=++a.current;try{let o=r===`open`||r===`interaction`,c=await $(o?r===`open`?`/api/hub/open`:`/api/hub/activity`:`/api/hub/status`,e,o?{method:`POST`,body:`{}`}:{});if(l!==a.current||s.current)return;i(c);let u=c.prototype?.startPageImportError||c.localStartPageError;u&&n(u),t(c)}catch(e){if(l!==a.current||s.current)return;let t=e instanceof Error?e.message:String(e);i(e=>({state:`unavailable`,repository:e?.repository,branch:e?.branch,hubOrigin:e?.hubOrigin,message:K.hubStatusUnavailable(t)})),n(t)}finally{--o.current}},[e,t,n]),l=(0,V.useCallback)(async t=>{s.current=!0,a.current+=1,i(null);try{await $(`/api/hub/origin`,e,{method:`POST`,body:JSON.stringify({origin:t})})}finally{s.current=!1,await c()}},[e,c]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void c(`open`),0),t=window.setInterval(()=>void c(void 0,!0),15e3);function n(){c(`interaction`)}return window.addEventListener(`focus`,n),()=>{a.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]);async function u(){let t=await $(`/api/hub/discovery`,e,{method:`POST`,body:`{}`});if(t.discovery?.state!==`valid`||!t.discovery.origin)throw Error(t.discovery?.message||K.resetHubUnavailable);return await c(),t.discovery.origin}return{status:r,refresh:c,select:l,reset:u}}function nr({prototypeUrl:e,previewUrl:t,shellRef:n,cancelClick:r}){let[{key:i,ref:a},o]=(0,V.useState)(()=>({key:0,ref:(0,V.createRef)()})),[s,c]=(0,V.useState)({input:e,url:e}),[l,u]=(0,V.useState)({input:e,entries:[e],index:0}),[d,f]=(0,V.useState)(()=>window.matchMedia?.(`(prefers-color-scheme: dark)`)?.matches?`dark`:`light`),[p,m]=(0,V.useState)(null),h=(0,V.useRef)(null),g=l.input===e?l:{input:e,entries:[e],index:0},_=g.entries[g.index],v=(0,V.useCallback)(()=>r.current?.(),[r]),y=(0,V.useCallback)(t=>{if(new URL(t).origin!==new URL(e).origin)throw Error(K.startPageOrigin);u(e=>{let n=[...e.entries];return n[e.index]=t,{...e,entries:n}})},[e]),b=(0,V.useCallback)(t=>{if(h.current===e)return;h.current=e;let n=new URL(e),r=t.state===`connected`&&(t.prototype?.startPageSet??t.prototype?.startPage!==void 0)?t.prototype?.startPage:t.localStartPage;if(n.pathname!==`/`||n.search||n.hash||!r)return;let i=new URL(r,n);if(i.origin!==n.origin)throw Error(K.startPageOrigin);c({input:e,url:i.href}),u({input:e,entries:[i.href],index:0})},[e]);function x(){v(),m(null),c({input:e,url:_}),o(e=>({key:e.key+1,ref:(0,V.createRef)()}))}function S(t){t===_?x():(u(n=>{let r=n.input===e?n:g;return{...r,entries:[...r.entries.slice(0,r.index+1),t],index:r.index+1}}),c({input:e,url:t}))}function C(t){let n=g.entries[t];n&&(u({...g,index:t}),c({input:e,url:n}))}let w=(0,V.useCallback)((t,n=!1)=>{m(t);let r=new URL(e);r.pathname=t.pathname,r.search=t.search,r.hash=t.hash,u(t=>{let i=t.input===e?t:{input:e,entries:[e],index:0},a=new URL(i.entries[i.index]),o=[...a.searchParams].filter(([e])=>e.startsWith(`rc.`));for(let e of[r,a])for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);if(a.pathname===r.pathname&&a.searchParams.toString()===r.searchParams.toString()&&a.hash===r.hash)return i;for(let[e,t]of o)r.searchParams.append(e,t);let s=r.href;if(n){let e=[...i.entries];return e[i.index]=s,{...i,entries:e}}return{...i,entries:[...i.entries.slice(0,i.index+1),s],index:i.index+1}})},[e]);(0,V.useEffect)(()=>{let e=a.current;if(!e)return;function t(){v(),m(null)}return e.addEventListener(`load`,t),()=>{v(),e.removeEventListener(`load`,t)}},[v,a]),(0,V.useEffect)(()=>{let r=a.current;if(!r)return;let i=new URL(t??e).origin,o=crypto.randomUUID();function s(){let e=n.current?.closest(`.canvas-base`);e&&r?.contentWindow?.postMessage({type:`replica:canvas:theme`,nonce:o,accent:window.getComputedStyle(e).getPropertyValue(`--hub-accent`).trim()},i)}function c(e){e.source===r?.contentWindow&&e.origin===i&&e.data?.type===`replica:canvas:ready`&&s()}return r.addEventListener(`load`,s),window.addEventListener(`message`,c),s(),()=>{r.removeEventListener(`load`,s),window.removeEventListener(`message`,c)}},[d,e,t,a,n]);let T=new URL(s.input===e?s.url:e);if(t){let e=new URL(t);T.protocol=e.protocol,T.host=e.host}return{frameRef:a,frameKey:i,source:T.href,navigation:g,address:_,replaceAddress:y,appearance:d,setAppearance:f,liveRoute:p,initialize:b,reportRoute:w,reload:x,navigate:S,travel:C}}function rr(e){let[t,n]=(0,V.useState)(null),[r,i]=(0,V.useState)(``),a=(0,V.useRef)(null),o=(0,V.useRef)(0),s=(0,V.useRef)(0),c=(0,V.useCallback)(async(t,r=!1)=>{if(r&&s.current>0)return;s.current+=1;let c=++o.current;try{let r=await $(t?`/api/refresh`:`/api/state`,e,t?{method:`POST`,body:`{}`}:{});if(c!==o.current)return;a.current=r,n(r),i(``)}catch(e){if(c!==o.current)return;n(t=>t&&{...t,stats:{...t.stats,remoteBranch:{state:`unknown`,repository:t.stats.repository||null,branch:t.stats.branch||null,commitSha:t.stats.commitSha||null,error:ir(e)}}}),i(ir(e))}finally{--s.current}},[e]);return(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void c(!0),0),t=window.setInterval(()=>{let e=a.current?.publishStatus?.state,t=a.current?.publishRequest,n=e===`requested`||e===`in_progress`||t?.state===`requested`||!!t?.requestedAt&&(e===`not_published`||e===`unavailable`);c(n,!0)},15e3);function n(){c(!0)}return window.addEventListener(`focus`,n),()=>{o.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]),{state:t,error:r,setError:i,refresh:c}}function ir(e){return e instanceof Error?e.message:String(e)}function ar({token:e,enabled:t,repository:n,branch:r,commitSha:i,publicationRevision:a}){let o=`${n}/${r}/${i}/${a}`,[s,c]=(0,V.useState)(null),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(null),m=(0,V.useRef)(0),h=t&&s?.identity===o?s:null,g=(0,V.useCallback)(async()=>{if(!t)return;let i=++m.current;u(!0);try{if(await p.current,i!==m.current)return;let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});if(i!==m.current)return;if(t.target.repository!==n||t.target.branch!==r)throw Error(q.preferenceTargetChanged);if(typeof t.remember!=`boolean`)throw Error(q.invalidPreference);c({identity:o,preparation:t,error:``})}catch(e){i===m.current&&c({identity:o,preparation:null,error:e instanceof Error?e.message:String(e)})}finally{i===m.current&&u(!1)}},[t,e,n,r,o]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void g(),0);return()=>{m.current+=1,window.clearTimeout(e)}},[g]);async function _(n){if(!t||!h?.preparation||l||p.current)return;f(!0);let r=m.current,i=h.preparation,a=(async()=>{try{if((await $(`/api/publish/preference`,e,{method:`POST`,body:JSON.stringify({target:i.target,remember:n})})).remember!==n)throw Error(q.invalidPreference);r===m.current&&c({identity:o,preparation:{...i,remember:n},error:``})}catch(e){r===m.current&&c({identity:o,preparation:i,error:e instanceof Error?e.message:String(e)})}})();p.current=a;try{await a}finally{p.current=null,f(!1)}}return{remember:h?.preparation?.remember??null,loading:l||!h,saving:d,error:h?.error||``,save:_,retry:g}}function or(e,t,n){let r=n?.included,i=n?.error,a=n?.revision,o=(0,V.useMemo)(()=>{if(r!==void 0)return{identity:e,revision:a,included:r,error:i??``,pending:!1};let t=!1,n=``;if(e)try{let n=localStorage.getItem(`replica:share-controls:v1:${e}`);if(n!==null&&n!==`true`&&n!==`false`)throw Error(`Invalid saved share preference.`);t=n===`true`}catch{n=`The share preference could not be read. Control settings are off by default.`}return{identity:e,revision:a,included:t,error:n,pending:!1}},[e,a,r,i]),[s,c]=(0,V.useState)(o),l=s.identity===e&&s.revision===a?s:o,u=``,d=``;if(l.included)try{u=Te(t)}catch(e){d=e instanceof Error?e.message:`Control settings could not be shared.`}return{included:l.included,query:u,error:d||l.error,blocked:!!d,...n?{pending:l.pending}:{},onChange:t=>{if(n){c({identity:e,revision:a,included:t,error:``,pending:!0});function r(n){c(r=>r.identity===e&&r.revision===a&&r.included===t?{...r,error:n,pending:!1}:r)}n.onChange(t).then(()=>r(``),e=>r(e instanceof Error?e.message:`This preference could not be saved. It will only apply while this page is open.`));return}let r=``;if(e)try{localStorage.setItem(`replica:share-controls:v1:${e}`,String(t))}catch{r=`This preference could not be saved. It will only apply while this page is open.`}c({identity:e,revision:a,included:t,error:r,pending:!1})}}}function sr({token:e,state:t,hubStatus:n}){let[r,i]=(0,V.useState)(null),a=!!(r&&(r.stale||r.repository!==void 0&&r.repository!==t?.stats.repository||r.branch!==void 0&&r.branch!==t?.stats.branch||n?.hubOrigin!==void 0&&r.hubOrigin!==void 0&&r.hubOrigin!==n.hubOrigin||r.token!==e));(0,V.useEffect)(()=>{if(!r||r.stale)return;let e=r.repository??t?.stats.repository,o=r.branch??t?.stats.branch,s=r.hubOrigin??n?.hubOrigin;if(!a&&e===r.repository&&o===r.branch&&s===r.hubOrigin)return;let c=window.setTimeout(()=>{i(t=>t&&{...t,repository:e,branch:o,hubOrigin:s,stale:a,connecting:!a&&t.connecting})},0);return()=>window.clearTimeout(c)},[r,a,t?.stats.repository,t?.stats.branch,n?.hubOrigin]);function o(){i({repository:t?.stats.repository,branch:t?.stats.branch,hubOrigin:n?.hubOrigin,token:e,connecting:!1,stale:!1})}function s(e){i(t=>t&&{...t,connecting:e})}return{intent:r,targetChanged:a,begin:o,close:()=>i(null),setConnecting:s}}var cr={open:!1,context:null,links:[],loading:!1,busy:!1,stale:!0,error:``,notice:``,created:null};function lr({token:e,hubStatus:t,prototypeState:n}){let[r,i]=(0,V.useState)(cr),a=(0,V.useRef)(r);a.current=r;let o=(0,V.useRef)(0),s=(0,V.useRef)(!1),c=(0,V.useRef)(!1),l=(0,V.useRef)(!1),u=(0,V.useRef)(!1),d=(0,V.useRef)(null),f=`${t?.hubOrigin}/${t?.repository}/${t?.branch}/${t?.state}`,p=(0,V.useRef)(f);p.current=f;let m=(0,V.useCallback)(()=>{!u.current||s.current||c.current||l.current||!d.current||(u.current=!1,d.current())},[]);(0,V.useLayoutEffect)(()=>{o.current+=1,i(e=>e.open?{...cr,open:!0,error:J.stale}:cr)},[f,e]),(0,V.useEffect)(()=>()=>{o.current+=1,u.current=!1},[]),(0,V.useEffect)(()=>{let e=t?.prototype;e&&e.canManageShareLinks!==!0&&a.current.context?.prototype.canManageShareLinks===!0&&(o.current+=1,i(t=>t.open&&t.context?.prototype.id===e.id?{...cr,open:!0,stale:!1,context:{...t.context,prototype:{...t.context.prototype,canManageShareLinks:e.canManageShareLinks}}}:t))},[t?.prototype]),(0,V.useEffect)(()=>{t?.prototype?.publicSharingEnabled===!1&&(o.current+=1,i(e=>e.open?{...cr,open:!0,sharingDisabled:!0,error:J.disabled,context:e.context?{...e.context,prototype:{...e.context.prototype,publicSharingEnabled:!1}}:null}:cr))},[t?.prototype?.publicSharingEnabled]);let h=(0,V.useCallback)((t,n)=>$(`/api/hub/share-links/${t}`,e,{method:`POST`,body:JSON.stringify(n)}),[e]),g=(0,V.useCallback)(e=>{e instanceof Error&&`code`in e&&(e.code===`public_sharing_disabled`||e.code===`public_sharing_changed`||e.code===`creator_access_changed`)&&(o.current+=1,i(t=>({...t,busy:!1,loading:!1,stale:!0,sharingDisabled:e.code===`public_sharing_disabled`,links:[],created:null,authorization:void 0})))},[]),_=(0,V.useCallback)(async(e=a.current.context)=>{if(!e||!e.prototype.canManageShareLinks||e.prototype.publicSharingEnabled===!1||c.current)return;c.current=!0;let t=o.current,n=p.current;i(e=>({...e,loading:!0,stale:!0,error:``}));try{let r=new Map,a=new Set,s=null;do{let i=await h(`list`,{target:e.target,...s?{cursor:s}:{}});if(t!==o.current||n!==p.current)return;for(let e of i.shareLinks)r.set(e.id,e);if(s=i.nextCursor,s){if(a.has(s))throw Error(J.paginationFailed);a.add(s)}}while(s);i(e=>({...e,links:[...r.values()],created:e.created?r.get(e.created.id)??null:null,loading:u.current,stale:u.current,sharingDisabled:!1}))}catch(e){t===o.current&&n===p.current&&(i(t=>({...t,loading:!1,stale:!0,error:e instanceof Error?e.message:J.failed})),g(e))}finally{c.current=!1,m()}},[h,m,g]),v=(0,V.useCallback)(async()=>{if(s.current||l.current||c.current){u.current=!0,i(e=>({...e,open:!0,stale:!0,loading:!0}));return}l.current=!0;let e=++o.current,r=p.current;i({...cr,open:!0,loading:!0});let a=t?.repository===n?.stats.repository&&t?.branch===n?.stats.branch,d=``;if(!t||[`disconnected`,`pairing`,`unconfigured`].includes(t.state)?d=J.disconnected:[`unavailable`,`denied`].includes(t.state)?d=J.unavailable:(t.state!==`connected`||!a)&&(d=J.branch),d)i({...cr,open:!0,error:d}),l.current=!1;else try{let t=await h(`context`,{});if(e!==o.current||r!==p.current)return;i(e=>({...e,context:t,loading:!1,stale:t.prototype.canManageShareLinks===!0})),await _(t)}catch(t){e===o.current&&r===p.current&&i(e=>({...e,loading:!1,error:t instanceof Error?t.message:J.failed}))}finally{l.current=!1,m()}},[t,n,_,h,m]);d.current=v;let y=(0,V.useCallback)(async(e,t)=>{let n=a.current;if(s.current||l.current||c.current||u.current||n.stale||!n.context||n.context.prototype.canManageShareLinks!==!0||n.sharingDisabled||n.context.prototype.publicSharingEnabled===!1)return!1;s.current=!0;let r=o.current;i(e=>({...e,busy:!0,error:``,notice:``}));try{let a=await h(e,{target:n.context.target,...t});return r===o.current&&(i(n=>({...n,notice:e===`delete`?J.deleted:``,authorization:void 0,created:`id`in a?a:e===`delete`&&`id`in t&&n.created?.id===t.id?null:n.created,links:e===`delete`&&`id`in t?n.links.filter(e=>e.id!==t.id):n.links})),await _(n.context),!0)}catch(e){if(r!==o.current)return!1;let t=e instanceof Error&&`code`in e&&e.code===`fresh_authorization_required`&&`authorization`in e&&e.authorization&&typeof e.authorization==`object`&&`url`in e.authorization&&typeof e.authorization.url==`string`&&`expiresAt`in e.authorization&&typeof e.authorization.expiresAt==`string`?{url:e.authorization.url,expiresAt:e.authorization.expiresAt}:void 0,n=e instanceof Error&&(!(`statusCode`in e)||`code`in e&&e.code===`share_delivery_unknown`);return i(r=>({...r,stale:!0,authorization:t,error:n?J.unknown:e instanceof Error?e.message:J.failed})),g(e),!1}finally{s.current=!1,r===o.current&&i(e=>({...e,busy:!1})),m()}},[_,h,m,g]),b=(0,V.useCallback)(async e=>{let t=a.current;if(!t.context||l.current||c.current||u.current)throw Error(J.stale);let n=o.current,r=await h(`controls-preference`,{target:t.context.target,included:e});if(n!==o.current)throw Error(J.stale);if(r.included!==e)throw Error(`The share preference could not be saved.`)},[h]),x=(0,V.useCallback)(async(e,t)=>{let n=a.current;if(!n.context||n.stale||l.current||c.current||u.current)return;let r=o.current;try{await h(`open`,{target:n.context.target,id:e,...t?{controlsQuery:t}:{}})}catch(e){r===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:J.failed})),g(e))}},[h,g]),S=(0,V.useCallback)(async()=>{let e=a.current;if(!e.context||!e.authorization||e.busy)return;let t=o.current;try{await h(`authorize`,{target:e.context.target}),t===o.current&&i(e=>({...e,notice:J.authorizationRetry}))}catch(e){t===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:J.failed})),g(e))}},[h,g]);return(0,V.useEffect)(()=>{if(!r.open||!r.context)return;function e(){s.current||_()}let t=window.setInterval(e,3e4);return window.addEventListener(`focus`,e),()=>{window.clearInterval(t),window.removeEventListener(`focus`,e)}},[r.open,r.context,_]),{state:r,open:v,close:()=>{u.current=!1,i(e=>({...e,open:!1}))},refresh:()=>r.context&&!r.sharingDisabled&&r.context.prototype.publicSharingEnabled!==!1?_():v(),create:(e,t)=>y(`create`,{label:e,expiration:t,buildNumber:r.context?.prototype.build?.number}),remove:e=>y(`delete`,{id:e}),openLink:x,setControlPreference:b,authorize:S}}function ur({config:e}){let t=(0,V.useRef)(null),n=(0,V.useRef)(null),r=(0,V.useRef)(null),i=(0,V.useRef)(null),a=(0,V.useRef)(null),o=(0,V.useRef)(null),s=(0,V.useRef)(null),c=(0,V.useRef)(null),l=(0,V.useRef)(null),u=(0,V.useRef)(null),[d,f]=(0,V.useState)(!1),[p,m]=(0,V.useState)({position:null,collapsed:!1,collapsedGroups:{}}),[h,g]=(0,V.useState)(!1),[_,v]=(0,V.useState)(!1),y=(0,V.useCallback)(()=>{g(!1),o.current?.focus()},[]),{frameRef:b,frameKey:x,source:S,navigation:C,address:w,replaceAddress:T,appearance:E,setAppearance:D,liveRoute:O,initialize:k,reportRoute:A,reload:j,navigate:M,travel:ee}=nr({prototypeUrl:e.prototypeUrl,previewUrl:e.previewUrl,shellRef:t,cancelClick:u}),N=$n({...e,frameRef:b,address:w,replaceAddress:T}),P=N.state;Hn({...e,frameRef:b,addressRef:r,appearance:E,navigation:C,liveRoute:O,cancelClick:u,reload:j,controlsConnection:N.connection});let{state:F,error:I,setError:L,refresh:R}=rr(e.token),z=tr({token:e.token,onStatus:k,onError:L}),te=er({token:e.token,status:z.status,onStatusChange:z.refresh,onSelectHub:z.select}),B=lr({token:e.token,hubStatus:z.status,prototypeState:F}),ne=sr({token:e.token,state:F,hubStatus:z.status}),re=ar({token:e.token,enabled:h&&z.status?.state===`connected`&&z.status.prototype?.registered===!0&&!!z.status.prototype.build&&z.status.repository===F?.stats.repository&&z.status.branch===F?.stats.branch,repository:F?.stats.repository,branch:F?.stats.branch,commitSha:F?.stats.commitSha,publicationRevision:F?.publishRequest?.requestedAt}),ie=Gn({token:e.token,state:F,hubStatus:z.status,error:I,setError:L,refresh:R,refreshHub:z.refresh,preferenceSaving:re.saving}),ae=In(F,z.status,ie.publication),oe=B.state.context,se=or(oe?`${oe.hubOrigin}:${oe.prototype.repositoryId}:${oe.prototype.id}`:void 0,N.connection?.getControlValues()??{},{included:oe?.controlSettingsIncluded??!1,error:oe?.controlSettingsError,revision:oe?.target,onChange:B.setControlPreference});(0,V.useLayoutEffect)(()=>{document.body.classList.remove(`renderer-loading`);let e=t.current,r=n.current;if(!e||!r)return;function i(){let t=r?.getBoundingClientRect().height;t&&e?.style.setProperty(`--canvas-toolbar-height`,`${t}px`)}let a=new ResizeObserver(i);return a.observe(r),i(),()=>a.disconnect()},[]);function ce(){te.close(),ae.kind===`ready`?B.open():ne.begin()}return(0,U.jsxs)(H.ThemeProvider,{colorMode:E,className:`canvas-base`,children:[(0,U.jsxs)(`main`,{ref:t,className:`canvas-shell${B.state.open?` canvas-shell--inactive`:``}`,inert:B.state.open,"aria-hidden":B.state.open?!0:void 0,children:[(0,U.jsx)(Ne,{address:w,addressRef:r,canGoBack:C.index>0,canGoForward:C.indexee(C.index-1),onForward:()=>ee(C.index+1),onNavigate:M,onOpenTab:async()=>{await $(`/api/prototype/open`,e.token,{method:`POST`,body:JSON.stringify({url:w})})},onReload:j}),(0,U.jsx)(Rn,{toolbarRef:n,config:e,state:ie.presentedState,prototypeName:z.status?.state===`connected`&&z.status.prototype?.name||void 0,publishing:ie.busy,publication:ie.publication,publishButtonRef:i,hubButtonRef:o,titleButtonRef:c,onBuildDetails:()=>v(!0),controlsButtonRef:l,controlsOpen:d,onControls:()=>f(!d),onPublish:()=>void ie.publish(),onShare:ce,shareButtonRef:a,hubOpen:h,onHub:()=>{g(!h),z.refresh(`interaction`)}}),(0,U.jsx)(`iframe`,{ref:b,className:`prototype-frame`,title:K.prototypeFrameTitle(e.name),src:S,style:{colorScheme:E,backgroundColor:`var(--hub-canvas-default)`}},x),(0,U.jsx)(Fn,{config:e,frameRef:b,onRouteChange:A,status:z.status,onStatusChange:z.refresh,onSelectHub:z.select,onConnect:te.showAndConnect,onDisconnected:te.show,connectionButtonRef:s,connecting:te.connecting,publication:ie.publication,publicationBusy:ie.busy,dirty:F?.stats.workingTree===`changed`,onPublish:()=>void ie.publish(),onRetryPublication:()=>void ie.retry(),publishPreference:re,open:h,onClose:y}),d&&N.connection&&P?(0,U.jsx)($e,{state:P,connection:N.connection,layout:p,onLayoutChange:m,diagnosisTarget:w,onDiagnose:()=>$(`/api/controls/diagnose`,e.token,{method:`POST`,body:JSON.stringify({status:P.status,runtimeAvailable:P.runtimeAvailable,reconnectRequired:P.reconnectRequired===!0,hasError:!!P.error||Bn(P,P.loading,w).controls.some(e=>e.visible&&!!e.error),hasStorageError:!!P.storageError,previewUrl:w})})}):null]}),(0,U.jsx)(`div`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:I||ie.notice}),(0,U.jsx)(Me,{hub:z,connection:te,publication:ie,sharing:B,shareIntent:ne,controlSettings:se,readiness:ae,state:F,hubOpen:h,buildDetailsOpen:_,onCloseBuildDetails:()=>v(!1),shareButtonRef:a,hubButtonRef:o,connectionButtonRef:s,publishButtonRef:i,titleButtonRef:c})]})}var dr=document.querySelector(`#root`);if(!dr)throw Error(`Replica prototype renderer root is missing.`);(0,se.createRoot)(dr).render((0,U.jsx)(ur,{config:window.__REPLICA_CANVAS__}));
\ No newline at end of file
diff --git a/.github/extensions/replica-prototype/capture-review-revision/index.mjs b/.github/extensions/replica-prototype/capture-review-revision/index.mjs
new file mode 100644
index 00000000..b1c03826
--- /dev/null
+++ b/.github/extensions/replica-prototype/capture-review-revision/index.mjs
@@ -0,0 +1,92 @@
+import { mkdtemp, rm } from "node:fs/promises"
+import os from "node:os"
+import path from "node:path"
+
+import { runCommand } from "../run-command/index.mjs"
+
+export async function captureReviewRevision(context) {
+ const directory = await mkdtemp(path.join(os.tmpdir(), "replica-review-"))
+ const env = { ...process.env, GIT_INDEX_FILE: path.join(directory, "index") }
+ const config = ["-c", "core.fsmonitor=false", "-c", "core.hooksPath=/dev/null"]
+ async function git(args, optional = false) {
+ const result = await runCommand("git", [...config, ...args], context.repositoryPath, { env })
+ if (!result.ok && !(optional && result.exitCode === 1))
+ throw new Error(`Could not capture the local review revision: ${result.error}`)
+ return result
+ }
+ try {
+ // Snapshotting must not execute repository-defined clean filters or filter processes.
+ const filters = await git(
+ ["config", "--name-only", "--get-regexp", "^filter\\..*\\.(clean|process|required)$"],
+ true,
+ )
+ for (const key of filters.stdout.trim().split("\n").filter(Boolean)) {
+ config.push("-c", `${key}=${key.endsWith(".required") ? "false" : ""}`)
+ }
+ const head = (await git(["rev-parse", "HEAD"])).stdout.trim()
+ const branch = (await git(["branch", "--show-current"])).stdout.trim()
+ const headTree = (await git(["rev-parse", "HEAD^{tree}"])).stdout.trim()
+ if (!/^[0-9a-f]{40}$/.test(head) || !branch)
+ throw new Error("Open a committed, named branch before commenting.")
+ await git(["read-tree", head])
+ const files = (
+ await git(["ls-files", "-z", "--cached", "--others", "--exclude-standard"])
+ ).stdout
+ .split("\0")
+ .filter(Boolean)
+ for (let offset = 0; offset < files.length; offset += 100) {
+ const attributes = (
+ await git([
+ "--literal-pathspecs",
+ "check-attr",
+ "-z",
+ "filter",
+ "--",
+ ...files.slice(offset, offset + 100),
+ ])
+ ).stdout.split("\0")
+ for (let index = 2; index < attributes.length; index += 3) {
+ if (!["unspecified", "unset"].includes(attributes[index]))
+ throw new Error("Local review revisions do not support Git clean filters.")
+ }
+ }
+ const submodules = await git([
+ "diff",
+ "--no-ext-diff",
+ "--no-textconv",
+ "--ignore-submodules=none",
+ "--name-only",
+ "-z",
+ "--diff-filter=M",
+ head,
+ "--",
+ ])
+ const changedPaths = new Set(submodules.stdout.split("\0"))
+ const entries = (await git(["ls-files", "--stage", "-z"])).stdout
+ if (
+ entries
+ .split("\0")
+ .some(
+ (entry) =>
+ entry.startsWith("160000 ") && changedPaths.has(entry.slice(entry.indexOf("\t") + 1)),
+ )
+ )
+ throw new Error("Commit or discard submodule changes before commenting on this preview.")
+ await git(["add", "--all", "--", "."])
+ const treeSha = (await git(["write-tree"])).stdout.trim()
+ const currentHead = (await git(["rev-parse", "HEAD"])).stdout.trim()
+ const currentBranch = (await git(["branch", "--show-current"])).stdout.trim()
+ const remaining = await git(
+ ["diff", "--no-ext-diff", "--no-textconv", "--quiet", "--ignore-submodules=none"],
+ true,
+ )
+ const untracked = (await git(["ls-files", "--others", "--exclude-standard"])).stdout
+ if (currentHead !== head || currentBranch !== branch || !remaining.ok || untracked)
+ throw new Error("The checkout changed while capturing this review revision. Try again.")
+ if (!/^[0-9a-f]{40}$/.test(treeSha))
+ throw new Error("Could not verify the local review source tree.")
+ return { treeSha, commitSha: head, clean: treeSha === headTree }
+ } finally {
+ await rm(directory, { recursive: true, force: true })
+ }
+}
diff --git a/.github/extensions/replica-prototype/capture-review-revision/index.test.mjs b/.github/extensions/replica-prototype/capture-review-revision/index.test.mjs
new file mode 100644
index 00000000..80d7b71d
--- /dev/null
+++ b/.github/extensions/replica-prototype/capture-review-revision/index.test.mjs
@@ -0,0 +1,142 @@
+import assert from "node:assert/strict"
+import { execFileSync } from "node:child_process"
+import { randomUUID } from "node:crypto"
+import { mkdir, readFile, rm, writeFile } from "node:fs/promises"
+import path from "node:path"
+import { describe, it } from "node:test"
+
+import { captureReviewRevision } from "./index.mjs"
+
+async function withRepository(run) {
+ const workspace = path.join(process.cwd(), "storage/replica-extension-tests", randomUUID())
+ const repositoryPath = path.join(workspace, "repository")
+ await mkdir(repositoryPath, { recursive: true })
+ function git(...args) {
+ return execFileSync("git", args, {
+ cwd: repositoryPath,
+ encoding: "utf8",
+ stdio: "pipe",
+ }).trim()
+ }
+ try {
+ git("init", "-q", "-b", "prototype")
+ git("config", "user.name", "Replica")
+ git("config", "user.email", "replica@example.com")
+ git("config", "commit.gpgsign", "false")
+ await writeFile(path.join(repositoryPath, "tracked.txt"), "original\n")
+ await writeFile(path.join(repositoryPath, ".gitignore"), "ignored.txt\n")
+ git("add", ".")
+ git("commit", "-qm", "Fixture")
+ await run({ repositoryPath }, git, workspace)
+ } finally {
+ await rm(workspace, { recursive: true, force: true })
+ }
+}
+
+describe("captureReviewRevision()", () => {
+ it("returns the actual HEAD tree and commit for a clean checkout and excludes ignored files", async () => {
+ await withRepository(async (context, git) => {
+ await writeFile(path.join(context.repositoryPath, "ignored.txt"), "local secret\n")
+
+ const revision = await captureReviewRevision(context)
+
+ assert.deepEqual(revision, {
+ treeSha: git("rev-parse", "HEAD^{tree}"),
+ commitSha: git("rev-parse", "HEAD"),
+ clean: true,
+ })
+ await writeFile(path.join(context.repositoryPath, "ignored.txt"), "changed secret\n")
+ assert.deepEqual(await captureReviewRevision(context), revision)
+ })
+ })
+
+ it("captures working-tree contents rather than staged contents without changing the real index", async () => {
+ await withRepository(async (context, git) => {
+ const tracked = path.join(context.repositoryPath, "tracked.txt")
+ await writeFile(tracked, "staged\n")
+ git("add", "tracked.txt")
+ const indexPath = path.join(context.repositoryPath, ".git/index")
+ const stagedTree = git("write-tree")
+ const index = await readFile(indexPath)
+ const stagedRevision = await captureReviewRevision(context)
+ assert.equal(stagedRevision.treeSha, stagedTree)
+ assert.equal(stagedRevision.clean, false)
+ assert.deepEqual(await readFile(indexPath), index)
+ await writeFile(tracked, "unstaged after staging\n")
+
+ const revision = await captureReviewRevision(context)
+
+ assert.equal(revision.clean, false)
+ assert.equal(revision.commitSha, git("rev-parse", "HEAD"))
+ assert.notEqual(revision.treeSha, stagedTree)
+ assert.notEqual(revision.treeSha, git("rev-parse", "HEAD^{tree}"))
+ assert.equal(git("show", `${revision.treeSha}:tracked.txt`), "unstaged after staging")
+ assert.deepEqual(await readFile(indexPath), index)
+ assert.equal(git("write-tree"), stagedTree)
+ assert.deepEqual(await captureReviewRevision(context), revision)
+ })
+ })
+
+ it("includes nonignored untracked files even when Git status hides them", async () => {
+ await withRepository(async (context, git) => {
+ git("config", "status.showUntrackedFiles", "no")
+ const originalTree = git("rev-parse", "HEAD^{tree}")
+ await writeFile(path.join(context.repositoryPath, "new file.txt"), "new contents\n")
+
+ const revision = await captureReviewRevision(context)
+
+ assert.equal(revision.clean, false)
+ assert.notEqual(revision.treeSha, originalTree)
+ assert.equal(git("show", `${revision.treeSha}:new file.txt`), "new contents")
+ assert.equal(git("diff", "--cached"), "")
+ await rm(path.join(context.repositoryPath, "new file.txt"))
+ assert.equal((await captureReviewRevision(context)).treeSha, originalTree)
+ })
+ })
+
+ it("records tracked deletions without staging them", async () => {
+ await withRepository(async (context, git) => {
+ await rm(path.join(context.repositoryPath, "tracked.txt"))
+
+ const revision = await captureReviewRevision(context)
+
+ assert.equal(revision.clean, false)
+ assert.notEqual(revision.treeSha, git("rev-parse", "HEAD^{tree}"))
+ assert.equal(git("ls-tree", "--name-only", revision.treeSha, "tracked.txt"), "")
+ assert.equal(git("diff", "--cached"), "")
+ })
+ })
+
+ it("rejects dirty submodules instead of claiming their unchanged gitlink identifies the preview", async () => {
+ await withRepository(async (context, git, workspace) => {
+ const source = path.join(workspace, "submodule-source")
+ await mkdir(source)
+ execFileSync("git", ["init", "-q", source], { stdio: "pipe" })
+ await writeFile(path.join(source, "component.txt"), "original\n")
+ execFileSync("git", ["-C", source, "add", "."], { stdio: "pipe" })
+ execFileSync(
+ "git",
+ [
+ "-C",
+ source,
+ "-c",
+ "user.name=Replica",
+ "-c",
+ "user.email=replica@example.com",
+ "-c",
+ "commit.gpgsign=false",
+ "commit",
+ "-qm",
+ "Submodule fixture",
+ ],
+ { stdio: "pipe" },
+ )
+ git("-c", "protocol.file.allow=always", "submodule", "add", source, "component")
+ git("commit", "-qm", "Add submodule")
+ assert.equal((await captureReviewRevision(context)).clean, true)
+ await writeFile(path.join(context.repositoryPath, "component/component.txt"), "dirty\n")
+
+ await assert.rejects(() => captureReviewRevision(context), /submodule/i)
+ })
+ })
+})
diff --git a/.github/extensions/replica-prototype/hub-client/authorization.test.mjs b/.github/extensions/replica-prototype/create-hub-client/authorization.test.mjs
similarity index 100%
rename from .github/extensions/replica-prototype/hub-client/authorization.test.mjs
rename to .github/extensions/replica-prototype/create-hub-client/authorization.test.mjs
diff --git a/.github/extensions/replica-prototype/hub-client/automatic-registration.test.mjs b/.github/extensions/replica-prototype/create-hub-client/automatic-registration.test.mjs
similarity index 100%
rename from .github/extensions/replica-prototype/hub-client/automatic-registration.test.mjs
rename to .github/extensions/replica-prototype/create-hub-client/automatic-registration.test.mjs
diff --git a/.github/extensions/replica-prototype/hub-client/fresh-authorization.test.mjs b/.github/extensions/replica-prototype/create-hub-client/fresh-authorization.test.mjs
similarity index 100%
rename from .github/extensions/replica-prototype/hub-client/fresh-authorization.test.mjs
rename to .github/extensions/replica-prototype/create-hub-client/fresh-authorization.test.mjs
diff --git a/.github/extensions/replica-prototype/hub-client/index.mjs b/.github/extensions/replica-prototype/create-hub-client/index.mjs
similarity index 96%
rename from .github/extensions/replica-prototype/hub-client/index.mjs
rename to .github/extensions/replica-prototype/create-hub-client/index.mjs
index 91401397..4e894e7e 100644
--- a/.github/extensions/replica-prototype/hub-client/index.mjs
+++ b/.github/extensions/replica-prototype/create-hub-client/index.mjs
@@ -5,41 +5,7 @@ import path from "node:path"
import { readCanvasRepository } from "../read-canvas-repository/index.mjs"
import { runCommand } from "../run-command/index.mjs"
import { createPrivateStore } from "../private-store/index.mjs"
-
-export class InvalidHubOrigin extends Error {}
-
-function parseHubUrl(value, name) {
- let origin
- try {
- origin = new URL(value)
- } catch {
- throw new InvalidHubOrigin(`${name} must be an HTTP or HTTPS origin without credentials.`)
- }
- if (!["http:", "https:"].includes(origin.protocol) || origin.username || origin.password) {
- throw new InvalidHubOrigin(`${name} must be an HTTP or HTTPS origin without credentials.`)
- }
- if (
- origin.protocol === "http:" &&
- origin.hostname !== "localhost" &&
- origin.hostname !== "127.0.0.1" &&
- !origin.hostname.endsWith(".localhost")
- ) {
- throw new InvalidHubOrigin("Remote Replica Hub connections require HTTPS.")
- }
- return origin
-}
-
-export function normalizeHubOrigin(value, name = "REPLICA_HUB_ORIGIN") {
- const origin = parseHubUrl(value, name)
- if (origin.pathname !== "/" || origin.search || origin.hash) {
- throw new InvalidHubOrigin(`${name} must be an HTTP or HTTPS origin without credentials.`)
- }
- return origin.origin
-}
-
-export function normalizeSelectedHubOrigin(value) {
- return parseHubUrl(value, "Hub URL").origin
-}
+import { normalizeHubOrigin } from "../normalize-hub-origin/index.mjs"
function registrationReason(value) {
if (value == null) return undefined
@@ -299,6 +265,10 @@ export function createHubClient(context, options = {}) {
return {
origin: origin.origin,
checkout,
+ async connectionKey(repository) {
+ const credential = await credentialFor(repository)
+ return credential ? connectionIdentity(credential) : null
+ },
async status() {
const target = await checkout()
if (!target.repository) {
@@ -340,7 +310,9 @@ export function createHubClient(context, options = {}) {
return {
state: "undiscovered",
repositoryAuthorized: true,
+ reviewConnectionId: connectionIdentity(credential),
canPublish: connection.canPublish,
+ viewerLogin: connection.viewerLogin,
repository: target.repository,
commitSha: target.commitSha,
message: "Connected to this repository. Open a named branch for Builds and reviews.",
@@ -367,7 +339,9 @@ export function createHubClient(context, options = {}) {
return {
state: "undiscovered",
repositoryAuthorized: true,
+ reviewConnectionId: connectionIdentity(credential),
canPublish: connection.canPublish,
+ viewerLogin: connection.viewerLogin,
repository: target.repository,
branch: target.branch,
commitSha: target.commitSha,
@@ -418,6 +392,7 @@ export function createHubClient(context, options = {}) {
return {
state: "connected",
repositoryAuthorized: true,
+ reviewConnectionId: connectionIdentity(credential),
repository: target.repository,
branch: target.branch,
commitSha: target.commitSha,
diff --git a/.github/extensions/replica-prototype/hub-client/index.test.mjs b/.github/extensions/replica-prototype/create-hub-client/index.test.mjs
similarity index 98%
rename from .github/extensions/replica-prototype/hub-client/index.test.mjs
rename to .github/extensions/replica-prototype/create-hub-client/index.test.mjs
index 643b7157..cb134b69 100644
--- a/.github/extensions/replica-prototype/hub-client/index.test.mjs
+++ b/.github/extensions/replica-prototype/create-hub-client/index.test.mjs
@@ -7,12 +7,11 @@ import path from "node:path"
import { describe, it } from "node:test"
import { createCanvasContext, currentCanvasContext } from "../create-canvas-context/index.mjs"
-import {
- createHubClient,
- InvalidHubOrigin,
- normalizeHubOrigin,
- normalizeSelectedHubOrigin,
-} from "./index.mjs"
+import { InvalidHubOrigin } from "../invalid-hub-origin/index.mjs"
+import { normalizeHubOrigin } from "../normalize-hub-origin/index.mjs"
+import { normalizeSelectedHubOrigin } from "../normalize-selected-hub-origin/index.mjs"
+
+import { createHubClient } from "./index.mjs"
describe("normalizeSelectedHubOrigin()", () => {
it("converts manually selected Hub URLs to origins and preserves ports", () => {
diff --git a/.github/extensions/replica-prototype/hub-client/rate-limits.test.mjs b/.github/extensions/replica-prototype/create-hub-client/rate-limits.test.mjs
similarity index 100%
rename from .github/extensions/replica-prototype/hub-client/rate-limits.test.mjs
rename to .github/extensions/replica-prototype/create-hub-client/rate-limits.test.mjs
diff --git a/.github/extensions/replica-prototype/hub-client/renewal.test.mjs b/.github/extensions/replica-prototype/create-hub-client/renewal.test.mjs
similarity index 100%
rename from .github/extensions/replica-prototype/hub-client/renewal.test.mjs
rename to .github/extensions/replica-prototype/create-hub-client/renewal.test.mjs
diff --git a/.github/extensions/replica-prototype/hub-connection/index.mjs b/.github/extensions/replica-prototype/create-hub-connection/index.mjs
similarity index 91%
rename from .github/extensions/replica-prototype/hub-connection/index.mjs
rename to .github/extensions/replica-prototype/create-hub-connection/index.mjs
index ce4133b7..2308a5b8 100644
--- a/.github/extensions/replica-prototype/hub-connection/index.mjs
+++ b/.github/extensions/replica-prototype/create-hub-connection/index.mjs
@@ -1,9 +1,7 @@
-import {
- createHubClient,
- InvalidHubOrigin,
- normalizeSelectedHubOrigin,
-} from "../hub-client/index.mjs"
-import { createHubOriginStore } from "../hub-origin-store/index.mjs"
+import { createHubClient } from "../create-hub-client/index.mjs"
+import { InvalidHubOrigin } from "../invalid-hub-origin/index.mjs"
+import { normalizeSelectedHubOrigin } from "../normalize-selected-hub-origin/index.mjs"
+import { createHubOriginStore } from "../create-hub-origin-store/index.mjs"
import { discoverHub } from "../discover-hub/index.mjs"
import { readCanvasRepository } from "../read-canvas-repository/index.mjs"
diff --git a/.github/extensions/replica-prototype/hub-origin-store/index.mjs b/.github/extensions/replica-prototype/create-hub-origin-store/index.mjs
similarity index 95%
rename from .github/extensions/replica-prototype/hub-origin-store/index.mjs
rename to .github/extensions/replica-prototype/create-hub-origin-store/index.mjs
index 88b3c3a6..a4fced73 100644
--- a/.github/extensions/replica-prototype/hub-origin-store/index.mjs
+++ b/.github/extensions/replica-prototype/create-hub-origin-store/index.mjs
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto"
import os from "node:os"
import path from "node:path"
-import { normalizeHubOrigin } from "../hub-client/index.mjs"
+import { normalizeHubOrigin } from "../normalize-hub-origin/index.mjs"
import { createPrivateStore } from "../private-store/index.mjs"
export function createHubOriginStore(options = {}) {
diff --git a/.github/extensions/replica-prototype/hub-origin-store/index.test.mjs b/.github/extensions/replica-prototype/create-hub-origin-store/index.test.mjs
similarity index 95%
rename from .github/extensions/replica-prototype/hub-origin-store/index.test.mjs
rename to .github/extensions/replica-prototype/create-hub-origin-store/index.test.mjs
index 3ec18b36..f84e070f 100644
--- a/.github/extensions/replica-prototype/hub-origin-store/index.test.mjs
+++ b/.github/extensions/replica-prototype/create-hub-origin-store/index.test.mjs
@@ -4,7 +4,7 @@ import { readdir, readFile, rm, writeFile } from "node:fs/promises"
import path from "node:path"
import { describe, it } from "node:test"
-import { InvalidHubOrigin } from "../hub-client/index.mjs"
+import { InvalidHubOrigin } from "../invalid-hub-origin/index.mjs"
import { createHubOriginStore } from "./index.mjs"
describe("createHubOriginStore()", () => {
diff --git a/.github/extensions/replica-prototype/recall-learnings/index.mjs b/.github/extensions/replica-prototype/create-learnings-hook/index.mjs
similarity index 98%
rename from .github/extensions/replica-prototype/recall-learnings/index.mjs
rename to .github/extensions/replica-prototype/create-learnings-hook/index.mjs
index 1d9fd6ef..c3e6b81f 100644
--- a/.github/extensions/replica-prototype/recall-learnings/index.mjs
+++ b/.github/extensions/replica-prototype/create-learnings-hook/index.mjs
@@ -1,7 +1,7 @@
import path from "node:path"
-import { createHubClient } from "../hub-client/index.mjs"
-import { createHubOriginStore } from "../hub-origin-store/index.mjs"
+import { createHubClient } from "../create-hub-client/index.mjs"
+import { createHubOriginStore } from "../create-hub-origin-store/index.mjs"
import { readCanvasRepository } from "../read-canvas-repository/index.mjs"
const TIMEOUT_MS = 3_000
diff --git a/.github/extensions/replica-prototype/recall-learnings/index.test.mjs b/.github/extensions/replica-prototype/create-learnings-hook/index.test.mjs
similarity index 100%
rename from .github/extensions/replica-prototype/recall-learnings/index.test.mjs
rename to .github/extensions/replica-prototype/create-learnings-hook/index.test.mjs
diff --git a/.github/extensions/replica-prototype/create-local-review-comments/index.mjs b/.github/extensions/replica-prototype/create-local-review-comments/index.mjs
new file mode 100644
index 00000000..d237c0f5
--- /dev/null
+++ b/.github/extensions/replica-prototype/create-local-review-comments/index.mjs
@@ -0,0 +1,219 @@
+import { createHash, randomBytes } from "node:crypto"
+import os from "node:os"
+import path from "node:path"
+import { isDeepStrictEqual } from "node:util"
+
+import { createPrivateStore } from "../private-store/index.mjs"
+import { runCommand } from "../run-command/index.mjs"
+
+export function createLocalReviewComments(context, options = {}) {
+ const store = createPrivateStore(
+ options.directory || path.join(os.homedir(), ".config", "replica", "canvas", "local-comments"),
+ )
+ function filename(scope) {
+ if (!scope.hubOrigin || !scope.repository || !scope.branch || !scope.viewerLogin)
+ throw new Error("Connect to a named branch before saving local comments.")
+ return `${createHash("sha256")
+ .update(
+ JSON.stringify([
+ context.repositoryPath,
+ scope.hubOrigin,
+ scope.repository,
+ scope.branch,
+ scope.viewerLogin,
+ ]),
+ )
+ .digest("hex")}.json`
+ }
+ function validateBody(body) {
+ if (typeof body !== "string" || !body.trim() || Buffer.byteLength(body) > 10_000)
+ throw Object.assign(new Error("Comments must contain between 1 and 10000 bytes."), {
+ statusCode: 422,
+ })
+ return body.trim()
+ }
+ async function entries(scope) {
+ return (await store.read(filename(scope))) || []
+ }
+ async function mutate(scope, action) {
+ const file = filename(scope)
+ return store.lock(file, async () => {
+ const drafts = await entries(scope)
+ const result = await action(drafts)
+ await store.write(file, drafts)
+ return result
+ })
+ }
+ function editable(drafts, id, discarding = false) {
+ const draft = drafts.find((entry) => entry.comment.id === Number(id))
+ if (!draft)
+ throw Object.assign(new Error("Local comment not found."), {
+ statusCode: 404,
+ })
+ if (draft.sendingAt && !discarding)
+ throw new Error("Check Hub before changing this comment: its upload could not be confirmed.")
+ return draft
+ }
+ return {
+ async list(scope) {
+ return (await entries(scope)).map((entry) => ({
+ ...entry.comment,
+ viewerCanEdit: !entry.sendingAt,
+ }))
+ },
+ async create(scope, revision, attributes) {
+ const body = validateBody(attributes.body)
+ if (
+ !Number.isSafeInteger(revision.id) ||
+ revision.id < 1 ||
+ !/^[0-9a-f]{40}$/.test(revision.treeSha) ||
+ !attributes.anchor ||
+ !["element", "area"].includes(attributes.anchor.kind)
+ )
+ throw Object.assign(new Error("Select a valid local preview target."), {
+ statusCode: 422,
+ })
+ return mutate(scope, (drafts) => {
+ const now = new Date().toISOString()
+ const comment = {
+ id: 2 ** 48 + randomBytes(6).readUIntBE(0, 6),
+ kind: "root",
+ body,
+ anchor: attributes.anchor,
+ buildNumber: null,
+ buildPath: null,
+ draftRevisionId: revision.id,
+ createdAt: now,
+ updatedAt: now,
+ editedAt: null,
+ deletedAt: null,
+ author: { login: scope.viewerLogin, name: null, avatarUrl: null },
+ viewerCanEdit: true,
+ viewerCanDelete: true,
+ reactions: [],
+ resolvedAt: null,
+ resolvedBy: null,
+ activityVersion: 1,
+ viewerLastSeenActivityVersion: 1,
+ }
+ drafts.push({
+ treeSha: revision.treeSha,
+ prototypeId: revision.prototypeId ?? null,
+ comment,
+ })
+ return comment
+ })
+ },
+ async update(scope, id, body) {
+ const text = validateBody(body)
+ return mutate(scope, (drafts) => {
+ const draft = editable(drafts, id)
+ const now = new Date().toISOString()
+ draft.comment = {
+ ...draft.comment,
+ body: text,
+ editedAt: now,
+ updatedAt: now,
+ }
+ return draft.comment
+ })
+ },
+ async remove(scope, id) {
+ return mutate(scope, (drafts) => {
+ const draft = editable(drafts, id, true)
+ drafts.splice(drafts.indexOf(draft), 1)
+ return {
+ ...draft.comment,
+ body: null,
+ deletedAt: new Date().toISOString(),
+ }
+ })
+ },
+ async sync(scope, build, hub) {
+ if (!(await entries(scope)).length) return
+ if (!/^[0-9a-f]{40}$/.test(build.commitSha))
+ throw new Error("Hub returned an invalid Build commit.")
+ if (!Number.isFinite(Date.parse(build.publishedAt)))
+ throw new Error("Hub did not return the Build publication time.")
+ const tree = await runCommand(
+ "git",
+ ["rev-parse", `${build.commitSha}^{tree}`],
+ context.repositoryPath,
+ )
+ if (!tree.ok) throw new Error("Fetch the published Build commit to sync local comments.")
+ const file = filename(scope)
+ await store.lock(file, async () => {
+ const drafts = await entries(scope)
+ const base = `/api/canvas/repositories/${build.repositoryId}/prototypes/${build.prototypeId}/review_comments`
+ for (const draft of [...drafts]) {
+ if (draft.prototypeId !== null && draft.prototypeId !== build.prototypeId) continue
+ if (draft.treeSha !== tree.stdout.trim()) continue
+ if (Date.parse(build.publishedAt) < Date.parse(draft.comment.createdAt)) continue
+ if (draft.sendingAt) {
+ const remote = []
+ let cursor
+ do {
+ const page = await hub.request(
+ `${base}${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ""}`,
+ {
+ expectedTarget: scope,
+ connectionScope: { identity: scope.connectionId },
+ },
+ )
+ remote.push(...page.comments)
+ cursor = page.hasMore ? page.nextCursor : null
+ } while (cursor)
+ const saved = remote.some(
+ (comment) =>
+ comment.kind === "root" &&
+ comment.buildNumber === draft.sendingBuildNumber &&
+ comment.author.login === scope.viewerLogin &&
+ comment.body === draft.comment.body &&
+ isDeepStrictEqual(comment.anchor, draft.comment.anchor) &&
+ Date.parse(comment.createdAt) >= Date.parse(draft.sendingAt) - 1000,
+ )
+ if (!saved)
+ throw new Error(
+ "A local comment upload could not be confirmed. Check the published review, then discard the local copy before saving it again if needed.",
+ )
+ } else {
+ draft.sendingAt = new Date().toISOString()
+ draft.sendingBuildNumber = build.number
+ await store.write(file, drafts)
+ try {
+ const result = await hub.request(base, {
+ method: "POST",
+ interactive: true,
+ expectedTarget: scope,
+ connectionScope: { identity: scope.connectionId },
+ body: {
+ review_comment: {
+ build_number: build.number,
+ body: draft.comment.body,
+ anchor: draft.comment.anchor,
+ },
+ },
+ })
+ if (
+ !result.comments?.some(
+ (comment) => comment.kind === "root" && comment.buildNumber === build.number,
+ )
+ )
+ throw new Error("Hub did not confirm the saved comment.")
+ } catch (error) {
+ // An HTTP rejection confirms no save; transport failures require reconciliation.
+ if (error.statusCode >= 400 && error.statusCode < 500) {
+ delete draft.sendingAt
+ delete draft.sendingBuildNumber
+ await store.write(file, drafts)
+ }
+ throw error
+ }
+ }
+ drafts.splice(drafts.indexOf(draft), 1)
+ await store.write(file, drafts)
+ }
+ })
+ },
+ }
+}
diff --git a/.github/extensions/replica-prototype/create-local-review-comments/index.test.mjs b/.github/extensions/replica-prototype/create-local-review-comments/index.test.mjs
new file mode 100644
index 00000000..592e28d9
--- /dev/null
+++ b/.github/extensions/replica-prototype/create-local-review-comments/index.test.mjs
@@ -0,0 +1,307 @@
+import assert from "node:assert/strict"
+import { execFileSync } from "node:child_process"
+import { writeFile } from "node:fs/promises"
+import path from "node:path"
+import { describe, it } from "node:test"
+
+import { createLocalReviewComments } from "./index.mjs"
+import { withContext } from "../test-support/with-context/index.mjs"
+
+function git(context, ...args) {
+ return execFileSync("git", args, {
+ cwd: context.repositoryPath,
+ encoding: "utf8",
+ }).trim()
+}
+
+function revision(context) {
+ const treeSha = git(context, "rev-parse", "HEAD^{tree}")
+ return { id: Number.parseInt(treeSha.slice(0, 12), 16), treeSha }
+}
+
+function localComments(context) {
+ return createLocalReviewComments(context, {
+ directory: path.join(context.repositoryPath, ".git", "local-review-comments"),
+ })
+}
+
+function build(context) {
+ return {
+ repositoryId: 5,
+ prototypeId: 4,
+ number: 7,
+ commitSha: git(context, "rev-parse", "HEAD"),
+ publishedAt: "2099-01-01T00:00:00Z",
+ }
+}
+
+function fixture(context) {
+ return {
+ scope: {
+ hubOrigin: "https://hub.example.com",
+ repository: "github/replica",
+ branch: "prototype",
+ viewerLogin: "octocat",
+ },
+ comments: localComments(context),
+ captured: revision(context),
+ }
+}
+
+describe("createLocalReviewComments()", () => {
+ it("persists local edits and deletion across instances", async () => {
+ await withContext(async (context) => {
+ const { scope, captured } = fixture(context)
+ const anchor = { schemaVersion: 1, kind: "element", selector: "#save" }
+ const created = await localComments(context).create(scope, captured, {
+ body: "Keep this selection",
+ anchor,
+ })
+ assert.deepEqual(await localComments(context).list(scope), [created])
+ const updated = await localComments(context).update(scope, created.id, "Revised feedback")
+ assert.equal(updated.body, "Revised feedback")
+ assert.deepEqual(await localComments(context).list(scope), [updated])
+ await localComments(context).remove(scope, created.id)
+ assert.deepEqual(await localComments(context).list(scope), [])
+ })
+ })
+
+ it("isolates comments by Hub, repository, branch and reviewer", async () => {
+ await withContext(async (context) => {
+ const { comments, captured, scope } = fixture(context)
+ const original = await comments.create(scope, captured, {
+ body: "Original reviewer",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ })
+ for (const changed of [
+ { hubOrigin: "https://another-hub.example.com" },
+ { repository: "github/another" },
+ { branch: "another-branch" },
+ { viewerLogin: "mona" },
+ ]) {
+ const isolated = { ...scope, ...changed }
+ assert.deepEqual(await comments.list(isolated), [])
+ }
+ assert.deepEqual(await localComments(context).list(scope), [original])
+ })
+ })
+
+ it("uploads only matching source to an imported Build even when its commit differs", async () => {
+ await withContext(async (context) => {
+ const { comments, captured, scope } = fixture(context)
+ const originalCommit = git(context, "rev-parse", "HEAD")
+ const anchor = {
+ schemaVersion: 1,
+ kind: "element",
+ selector: "#original",
+ }
+ await comments.create(scope, captured, {
+ body: "Matching source",
+ anchor,
+ })
+ await writeFile(path.join(context.repositoryPath, "new.txt"), "Different source")
+ git(context, "add", "new.txt")
+ const otherTree = git(context, "write-tree")
+ const other = {
+ id: Number.parseInt(otherTree.slice(0, 12), 16),
+ treeSha: otherTree,
+ }
+ const retained = await comments.create(scope, other, {
+ body: "Not in this Build",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ })
+ git(context, "reset", "--quiet")
+ git(
+ context,
+ "-c",
+ "user.name=Test",
+ "-c",
+ "user.email=test@example.com",
+ "-c",
+ "commit.gpgsign=false",
+ "commit",
+ "--allow-empty",
+ "-qm",
+ "Same source, different commit",
+ )
+ const imported = build(context)
+ assert.notEqual(imported.commitSha, originalCommit)
+ const requests = []
+ await comments.sync(scope, imported, {
+ async request(route, options) {
+ requests.push({ route, options })
+ return {
+ comments: [{ id: 900, kind: "root", buildNumber: imported.number }],
+ }
+ },
+ })
+ assert.equal(requests.length, 1)
+ assert.deepEqual(requests[0].options.body.review_comment, {
+ body: "Matching source",
+ anchor,
+ build_number: imported.number,
+ })
+ assert.deepEqual(await localComments(context).list(scope), [retained])
+ await comments.sync(scope, imported, {
+ async request() {
+ assert.fail("A synchronized comment must not be uploaded twice.")
+ },
+ })
+ await assert.rejects(
+ comments.sync(
+ scope,
+ { ...imported, commitSha: "f".repeat(40) },
+ {
+ async request() {
+ assert.fail("An unknown Build must not receive local feedback.")
+ },
+ },
+ ),
+ /Fetch the published Build commit/,
+ )
+ assert.deepEqual(await localComments(context).list(scope), [retained])
+ })
+ })
+
+ it("does not attach new feedback to an older Build with the same source tree", async () => {
+ await withContext(async (context) => {
+ const { comments, captured, scope } = fixture(context)
+ const imported = build(context)
+ const draft = await comments.create(scope, captured, {
+ body: "Feedback captured after the old Build",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ })
+ await comments.sync(
+ scope,
+ {
+ ...imported,
+ publishedAt: new Date(Date.parse(draft.createdAt) - 1).toISOString(),
+ },
+ {
+ async request() {
+ assert.fail("A Build published before the feedback must not claim it.")
+ },
+ },
+ )
+ assert.deepEqual(await localComments(context).list(scope), [draft])
+ })
+ })
+
+ it("retains rejected uploads for a later retry and propagates the Hub error", async () => {
+ await withContext(async (context) => {
+ const { comments, captured, scope } = fixture(context)
+ const draft = await comments.create(scope, captured, {
+ body: "Retry this feedback",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ })
+ const failure = Object.assign(new Error("Hub denied the request"), {
+ statusCode: 403,
+ })
+ await assert.rejects(
+ comments.sync(scope, build(context), {
+ async request() {
+ throw failure
+ },
+ }),
+ (error) => error === failure,
+ )
+ assert.deepEqual(await localComments(context).list(scope), [draft])
+ let retries = 0
+ await localComments(context).sync(scope, build(context), {
+ async request() {
+ retries += 1
+ return { comments: [{ id: 901, kind: "root", buildNumber: 7 }] }
+ },
+ })
+ assert.equal(retries, 1)
+ assert.deepEqual(await localComments(context).list(scope), [])
+ })
+ })
+
+ it("keeps previous Prototype feedback separate even when a new history has the same source", async () => {
+ await withContext(async (context) => {
+ const { comments, captured, scope } = fixture(context)
+ const previous = await comments.create(
+ scope,
+ { ...captured, prototypeId: 4 },
+ {
+ body: "Feedback for the previous history",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ },
+ )
+ await comments.create(
+ scope,
+ { ...captured, prototypeId: 9 },
+ {
+ body: "Feedback for the current history",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ },
+ )
+ const imported = { ...build(context), prototypeId: 9 }
+ let uploads = 0
+ await localComments(context).sync(scope, imported, {
+ async request(route, options) {
+ uploads += 1
+ assert.equal(route, "/api/canvas/repositories/5/prototypes/9/review_comments")
+ assert.equal(options.body.review_comment.body, "Feedback for the current history")
+ return {
+ comments: [{ id: 904, kind: "root", buildNumber: imported.number }],
+ }
+ },
+ })
+ assert.equal(uploads, 1)
+ assert.deepEqual(await localComments(context).list(scope), [previous])
+ })
+ })
+
+ it("reconciles an ambiguous upload to its original Build after a newer Build arrives", async () => {
+ await withContext(async (context) => {
+ const { comments, captured, scope } = fixture(context)
+ const draft = await comments.create(scope, captured, {
+ body: "Response was lost",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ })
+ const imported = build(context)
+ const failure = new Error("Connection lost after sending")
+ await assert.rejects(
+ comments.sync(scope, imported, {
+ async request() {
+ throw failure
+ },
+ }),
+ (error) => error === failure,
+ )
+ const pending = [{ ...draft, viewerCanEdit: false }]
+ assert.deepEqual(await localComments(context).list(scope), pending)
+ const newerBuild = { ...imported, number: imported.number + 1 }
+ await assert.rejects(
+ localComments(context).sync(scope, newerBuild, {
+ async request(route, options) {
+ assert.notEqual(options.method, "POST", "An uncertain save must never be replayed.")
+ return { comments: [], hasMore: false, nextCursor: null }
+ },
+ }),
+ /could not be confirmed/,
+ )
+ assert.deepEqual(await localComments(context).list(scope), pending)
+ await localComments(context).sync(scope, newerBuild, {
+ async request(route, options) {
+ assert.notEqual(options.method, "POST", "Reconciliation must not create another root.")
+ return {
+ comments: [
+ {
+ ...draft,
+ id: 902,
+ buildNumber: imported.number,
+ createdAt: new Date().toISOString(),
+ },
+ ],
+ hasMore: false,
+ nextCursor: null,
+ }
+ },
+ })
+ assert.deepEqual(await localComments(context).list(scope), [])
+ })
+ })
+})
diff --git a/.github/extensions/replica-prototype/discover-hub/index.mjs b/.github/extensions/replica-prototype/discover-hub/index.mjs
index 0abecbc8..a19bf2a8 100644
--- a/.github/extensions/replica-prototype/discover-hub/index.mjs
+++ b/.github/extensions/replica-prototype/discover-hub/index.mjs
@@ -4,7 +4,7 @@ import os from "node:os"
import path from "node:path"
import { promisify } from "node:util"
-import { normalizeHubOrigin } from "../hub-client/index.mjs"
+import { normalizeHubOrigin } from "../normalize-hub-origin/index.mjs"
import { createPrivateStore } from "../private-store/index.mjs"
import { readCanvasRepository } from "../read-canvas-repository/index.mjs"
diff --git a/.github/extensions/replica-prototype/discover-hub/index.test.mjs b/.github/extensions/replica-prototype/discover-hub/index.test.mjs
index 2bdf04de..335f2ae8 100644
--- a/.github/extensions/replica-prototype/discover-hub/index.test.mjs
+++ b/.github/extensions/replica-prototype/discover-hub/index.test.mjs
@@ -8,7 +8,7 @@ import { describe, it } from "node:test"
import { discoverHub } from "./index.mjs"
import { startCanvasServer } from "../start-canvas-server/index.mjs"
import { createCanvasContext } from "../create-canvas-context/index.mjs"
-import { createHubOriginStore } from "../hub-origin-store/index.mjs"
+import { createHubOriginStore } from "../create-hub-origin-store/index.mjs"
import { createPrivateStore } from "../private-store/index.mjs"
import { runCommand } from "../run-command/index.mjs"
diff --git a/.github/extensions/replica-prototype/invalid-hub-origin/index.mjs b/.github/extensions/replica-prototype/invalid-hub-origin/index.mjs
new file mode 100644
index 00000000..03d9115a
--- /dev/null
+++ b/.github/extensions/replica-prototype/invalid-hub-origin/index.mjs
@@ -0,0 +1 @@
+export class InvalidHubOrigin extends Error {}
diff --git a/.github/extensions/replica-prototype/normalize-hub-origin/index.mjs b/.github/extensions/replica-prototype/normalize-hub-origin/index.mjs
new file mode 100644
index 00000000..301eb105
--- /dev/null
+++ b/.github/extensions/replica-prototype/normalize-hub-origin/index.mjs
@@ -0,0 +1,10 @@
+import { InvalidHubOrigin } from "../invalid-hub-origin/index.mjs"
+import { parseHubUrl } from "../parse-hub-url/index.mjs"
+
+export function normalizeHubOrigin(value, name = "REPLICA_HUB_ORIGIN") {
+ const origin = parseHubUrl(value, name)
+ if (origin.pathname !== "/" || origin.search || origin.hash) {
+ throw new InvalidHubOrigin(`${name} must be an HTTP or HTTPS origin without credentials.`)
+ }
+ return origin.origin
+}
diff --git a/.github/extensions/replica-prototype/normalize-selected-hub-origin/index.mjs b/.github/extensions/replica-prototype/normalize-selected-hub-origin/index.mjs
new file mode 100644
index 00000000..019f0170
--- /dev/null
+++ b/.github/extensions/replica-prototype/normalize-selected-hub-origin/index.mjs
@@ -0,0 +1,5 @@
+import { parseHubUrl } from "../parse-hub-url/index.mjs"
+
+export function normalizeSelectedHubOrigin(value) {
+ return parseHubUrl(value, "Hub URL").origin
+}
diff --git a/.github/extensions/replica-prototype/parse-hub-url/index.mjs b/.github/extensions/replica-prototype/parse-hub-url/index.mjs
new file mode 100644
index 00000000..73c18841
--- /dev/null
+++ b/.github/extensions/replica-prototype/parse-hub-url/index.mjs
@@ -0,0 +1,22 @@
+import { InvalidHubOrigin } from "../invalid-hub-origin/index.mjs"
+
+export function parseHubUrl(value, name) {
+ let origin
+ try {
+ origin = new URL(value)
+ } catch {
+ throw new InvalidHubOrigin(`${name} must be an HTTP or HTTPS origin without credentials.`)
+ }
+ if (!["http:", "https:"].includes(origin.protocol) || origin.username || origin.password) {
+ throw new InvalidHubOrigin(`${name} must be an HTTP or HTTPS origin without credentials.`)
+ }
+ if (
+ origin.protocol === "http:" &&
+ origin.hostname !== "localhost" &&
+ origin.hostname !== "127.0.0.1" &&
+ !origin.hostname.endsWith(".localhost")
+ ) {
+ throw new InvalidHubOrigin("Remote Replica Hub connections require HTTPS.")
+ }
+ return origin
+}
diff --git a/.github/extensions/replica-prototype/register-prototype-canvas/index.mjs b/.github/extensions/replica-prototype/register-prototype-canvas/index.mjs
index d05860e8..552fb911 100644
--- a/.github/extensions/replica-prototype/register-prototype-canvas/index.mjs
+++ b/.github/extensions/replica-prototype/register-prototype-canvas/index.mjs
@@ -13,17 +13,17 @@ import {
PUBLISH_RESULT_OUTCOMES,
reportPublishResult,
} from "../report-publish-result/index.mjs"
-import { normalizeHubOrigin } from "../hub-client/index.mjs"
+import { normalizeHubOrigin } from "../normalize-hub-origin/index.mjs"
import { startCanvasServer } from "../start-canvas-server/index.mjs"
import { agentCommands, MAX_RELOAD_ADDRESS_LENGTH } from "../agent-commands/index.mjs"
import { startMissingPrototypeServer } from "../start-missing-prototype-server/index.mjs"
import { commentActions } from "../comment-actions/index.mjs"
-import { createHubConnection } from "../hub-connection/index.mjs"
+import { createHubConnection } from "../create-hub-connection/index.mjs"
import { createCommentStore } from "../comment-store/index.mjs"
import { reviewAction } from "../review-action/index.mjs"
import { projectValidation, validateControls } from "../validate-controls/index.mjs"
import { projectControlsStatus } from "../controls-status/index.mjs"
-import { createLearningsHook } from "../recall-learnings/index.mjs"
+import { createLearningsHook } from "../create-learnings-hook/index.mjs"
const HUB_STATES = new Set([
"connected",
diff --git a/.github/extensions/replica-prototype/register-prototype-canvas/index.test.mjs b/.github/extensions/replica-prototype/register-prototype-canvas/index.test.mjs
index b32c9406..69c58b41 100644
--- a/.github/extensions/replica-prototype/register-prototype-canvas/index.test.mjs
+++ b/.github/extensions/replica-prototype/register-prototype-canvas/index.test.mjs
@@ -12,7 +12,7 @@ import { readState } from "../read-state/index.mjs"
import { requestPublish } from "../request-publish/index.mjs"
import { writeState } from "../write-state/index.mjs"
import { createPrivateStore } from "../private-store/index.mjs"
-import { createHubOriginStore } from "../hub-origin-store/index.mjs"
+import { createHubOriginStore } from "../create-hub-origin-store/index.mjs"
import { rankForRecall, renderRecall } from "../../../../packages/learning/src/recall.mjs"
import {
metadataUpdateAcknowledgement,
diff --git a/.github/extensions/replica-prototype/start-canvas-server/index.mjs b/.github/extensions/replica-prototype/start-canvas-server/index.mjs
index eb826d71..5115c432 100644
--- a/.github/extensions/replica-prototype/start-canvas-server/index.mjs
+++ b/.github/extensions/replica-prototype/start-canvas-server/index.mjs
@@ -1,4 +1,4 @@
-import { randomBytes } from "node:crypto"
+import { createHash, randomBytes } from "node:crypto"
import { readFile } from "node:fs/promises"
import { createServer } from "node:http"
@@ -6,8 +6,8 @@ import { MAX_RELOAD_ADDRESS_LENGTH } from "../agent-commands/index.mjs"
import { projectControlsStatus } from "../controls-status/index.mjs"
import { currentCanvasContext } from "../create-canvas-context/index.mjs"
import { getPrototypeState } from "../get-prototype-state/index.mjs"
-import { createHubConnection } from "../hub-connection/index.mjs"
-import { InvalidHubOrigin } from "../hub-client/index.mjs"
+import { createHubConnection } from "../create-hub-connection/index.mjs"
+import { InvalidHubOrigin } from "../invalid-hub-origin/index.mjs"
import { openBrowser } from "../open-browser/index.mjs"
import { readCanvasRepository } from "../read-canvas-repository/index.mjs"
import { readPrototypeStartPage } from "../read-prototype-start-page/index.mjs"
@@ -23,6 +23,8 @@ import { reviewAction } from "../review-action/index.mjs"
import { createCommentStore } from "../comment-store/index.mjs"
import { createShareLinks } from "../share-links/index.mjs"
import { startPreviewProxy } from "../start-preview-proxy/index.mjs"
+import { captureReviewRevision } from "../capture-review-revision/index.mjs"
+import { createLocalReviewComments } from "../create-local-review-comments/index.mjs"
const ASSET_PATHS = new Map([
[
@@ -58,6 +60,21 @@ export async function startCanvasServer(initialContext, session, options = {}) {
const source = await readFile(new URL("../assets/canvas-bridge.js", import.meta.url), "utf8")
const hubConnection = createHubConnection(() => context, options.hubOptions)
const { hubClient, refreshDiscovery, selectHubOrigin, discoveries } = hubConnection
+ const localComments = createLocalReviewComments(initialContext, {
+ directory: options.localCommentsDirectory,
+ })
+ async function localScope(hub, status) {
+ const connectionId = await hub.connectionKey(status.repository)
+ if (!connectionId || connectionId !== status.reviewConnectionId)
+ throw httpError(409, "The Hub connection changed. Refresh before using local comments.")
+ return {
+ hubOrigin: hub.origin,
+ repository: status.repository,
+ branch: status.branch,
+ viewerLogin: status.prototype?.viewerLogin || status.viewerLogin,
+ connectionId,
+ }
+ }
async function updateMetadata({ name, description, startPage }, expectedTarget) {
const hub = await hubClient()
if (!hub) throw httpError(409, "Enter a Hub URL before connecting.")
@@ -159,13 +176,77 @@ export async function startCanvasServer(initialContext, session, options = {}) {
const hub = await hubClient()
const { repository } = await readCanvasRepository(context)
const discovery = discoveries.get(repository)
- const status = hub
+ let status = hub
? await hub.status()
: {
state: "unconfigured",
repository,
message: "Enter a Hub URL to connect.",
}
+ if (
+ hub &&
+ status.repositoryAuthorized &&
+ status.branch &&
+ status.registrationReason !== "branch_not_reviewable"
+ ) {
+ try {
+ const connectionId = await hub.connectionKey(status.repository)
+ if (!connectionId) throw httpError(401, "Connect to Hub before commenting.")
+ const snapshot = await captureReviewRevision(context)
+ if (snapshot.commitSha !== status.commitSha)
+ throw httpError(
+ 409,
+ "The checkout changed while preparing local comments. Refresh again.",
+ )
+ const scope = await localScope(hub, status)
+ if (scope.connectionId !== connectionId)
+ throw httpError(409, "The Hub connection changed while preparing local comments.")
+ if (!scope.viewerLogin) throw new Error("Hub did not identify the connected reviewer.")
+ if (status.prototype?.build) {
+ try {
+ await localComments.sync(
+ scope,
+ {
+ ...status.prototype.build,
+ repositoryId: status.prototype.repositoryId,
+ prototypeId: status.prototype.id,
+ },
+ hub,
+ )
+ } catch (error) {
+ status = {
+ ...status,
+ localCommentsError: `Local comments not synced: ${error.message}`,
+ }
+ }
+ }
+ const published =
+ snapshot.clean && status.prototype?.build?.commitSha === snapshot.commitSha
+ status = {
+ ...status,
+ reviewRevision: {
+ ...snapshot,
+ id: published
+ ? null
+ : Number.parseInt(
+ createHash("sha256").update(snapshot.treeSha).digest("hex").slice(0, 12),
+ 16,
+ ) + 1,
+ prototypeId: status.prototype?.id ?? null,
+ repository: status.repository,
+ branch: status.branch,
+ buildNumber: published ? status.prototype.build.number : null,
+ hubOrigin: hub.origin,
+ connectionId,
+ },
+ }
+ } catch (error) {
+ status = {
+ ...status,
+ reviewError: `Local comments unavailable: ${error.message}`,
+ }
+ }
+ }
const ownsStartPage =
status.state === "connected" &&
(status.prototype?.startPageSet ?? status.prototype?.startPage !== undefined)
@@ -207,18 +288,24 @@ export async function startCanvasServer(initialContext, session, options = {}) {
options.agentCommands,
shareLinks,
publishPreferences,
+ localComments,
+ localScope,
)
} catch (error) {
- sendJson(response, error?.statusCode || 500, {
- error: error instanceof Error ? error.message : String(error),
- ...(request.url?.startsWith("/api/hub/share-links")
- ? {
- code: error.code,
- deliveryPhase: error.deliveryPhase,
- authorization: error.authorization,
- }
- : {}),
- })
+ sendJson(
+ response,
+ error?.statusCode || (error?.code === "stale_comment_target" ? 409 : 500),
+ {
+ error: error instanceof Error ? error.message : String(error),
+ ...(request.url?.startsWith("/api/hub/share-links")
+ ? {
+ code: error.code,
+ deliveryPhase: error.deliveryPhase,
+ authorization: error.authorization,
+ }
+ : {}),
+ },
+ )
}
})
@@ -312,6 +399,8 @@ async function routeRequest(
agentCommands,
shareLinks,
publishPreferences,
+ localComments,
+ localScope,
) {
const requestUrl = new URL(request.url || "/", "http://127.0.0.1")
@@ -496,13 +585,25 @@ async function routeRequest(
return
}
if (requestUrl.pathname === "/api/hub/comments" && request.method === "GET") {
- const base = await reviewPath(hub)
+ const status = await hub.status()
+ if (!status.repositoryAuthorized) throw httpError(403, "Connect to Hub before commenting.")
+ const scope = await localScope(hub, status)
const cursor = requestUrl.searchParams.get("cursor")
- sendJson(
- response,
- 200,
- await hub.request(`${base}${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ""}`),
- )
+ const page = status.prototype
+ ? await hub.request(
+ `${await reviewPath(hub)}${cursor ? `?cursor=${encodeURIComponent(cursor)}` : ""}`,
+ )
+ : { comments: [], hasMore: false, nextCursor: null }
+ const revision = requestUrl.searchParams.get("local_revision_id")
+ const drafts = cursor
+ ? []
+ : (await localComments.list(scope)).filter(
+ (comment) => !revision || comment.draftRevisionId === Number(revision),
+ )
+ sendJson(response, 200, {
+ ...page,
+ comments: [...page.comments, ...drafts],
+ })
return
}
if (requestUrl.pathname === "/api/hub/mention-candidates" && request.method === "GET") {
@@ -518,14 +619,52 @@ async function routeRequest(
return
}
if (requestUrl.pathname === "/api/hub/comments" && request.method === "POST") {
- const base = await reviewPath(hub)
+ const body = await readJson(request, 32_768)
+ const expected = body.review_revision
+ const status = await hub.status()
+ if (
+ !expected ||
+ expected.hubOrigin !== hub.origin ||
+ typeof expected.connectionId !== "string" ||
+ !expected.connectionId ||
+ !status.repositoryAuthorized ||
+ (status.prototype?.id ?? null) !== expected.prototypeId ||
+ status.repository !== expected.repository ||
+ status.branch !== expected.branch ||
+ expected.connectionId !== (await hub.connectionKey(status.repository))
+ )
+ throw httpError(
+ 409,
+ "The Hub review target changed. Select a target again before commenting.",
+ )
+ const attributes = {
+ body: body.review_comment?.body,
+ anchor: body.review_comment?.anchor,
+ }
+ if (expected.id === null) {
+ if (!Number.isSafeInteger(expected.buildNumber) || expected.buildNumber < 1)
+ throw httpError(400, "Select a valid published Build before commenting.")
+ attributes.build_number = expected.buildNumber
+ } else {
+ if (!Number.isSafeInteger(expected.id) || expected.id < 1)
+ throw httpError(400, "Select a valid local revision before commenting.")
+ const scope = await localScope(hub, status)
+ if (scope.connectionId !== expected.connectionId)
+ throw httpError(409, "The Hub connection changed. Select a target again.")
+ const comment = await localComments.create(scope, expected, attributes)
+ sendJson(response, 201, { comments: [comment] })
+ return
+ }
+ const base = `/api/canvas/repositories/${status.prototype.repositoryId}/prototypes/${status.prototype.id}/review_comments`
sendJson(
response,
201,
await hub.request(base, {
method: "POST",
interactive: true,
- body: await readJson(request),
+ expectedTarget: status,
+ connectionScope: { identity: expected.connectionId },
+ body: { review_comment: attributes },
}),
)
return
@@ -580,6 +719,22 @@ async function routeRequest(
operation === "reactions"
? await readJson(request)
: undefined
+ const status = await hub.status()
+ if (!status.repositoryAuthorized) throw httpError(403, "Connect to Hub before commenting.")
+ const scope = await localScope(hub, status)
+ if ((await localComments.list(scope)).some((comment) => comment.id === Number(id))) {
+ if (operation === "read" && method === "POST") {
+ sendJson(response, 200, {})
+ return
+ }
+ if (operation) throw httpError(409, "Publish this comment before starting a conversation.")
+ const comment =
+ method === "PATCH"
+ ? await localComments.update(scope, id, body?.review_comment?.body)
+ : await localComments.remove(scope, id)
+ sendJson(response, 200, { comments: [comment] })
+ return
+ }
const suffix = operation ? `/${operation}${content ? `/${content}` : ""}` : ""
sendJson(
response,
diff --git a/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs b/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs
index c638382e..0fb1507b 100644
--- a/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs
+++ b/.github/extensions/replica-prototype/start-canvas-server/index.test.mjs
@@ -777,6 +777,10 @@ esac
const calls = []
const publishPrompts = []
const prototypes = new Map()
+ let currentPrototypeId = 4
+ let currentBuildNumber = 2
+ let currentBuildCommit = "1".padStart(40, "0")
+ let accessToken = "rp_secret"
let canRegister = true
let registrationError = false
let registrationPending
@@ -802,20 +806,32 @@ esac
const branch = new URL(request.url, "http://localhost").searchParams.get("branch")
if (branch === "prototype/second") {
response.writeHead(404, { "Content-Type": "application/json" })
- response.end(JSON.stringify({ error: "Hub has not discovered this branch." }))
+ response.end(
+ JSON.stringify({
+ error: "Hub has not discovered this branch.",
+ registrationReason: "remote_branch_missing",
+ }),
+ )
return
}
result = {
- id: 4,
+ id: currentPrototypeId,
repositoryId: 5,
repository: "github/replica",
viewerLogin: "octocat",
branch,
registered: prototypes.has(branch),
+ canEdit: true,
canRegister,
canManageShareLinks: true,
published: sharingPublished,
- build: sharingPublished ? { number: 2 } : null,
+ build: sharingPublished
+ ? {
+ number: currentBuildNumber,
+ commitSha: currentBuildCommit,
+ publishedAt: "2099-01-01T00:00:00Z",
+ }
+ : null,
name: prototypes.get(branch)?.name ?? null,
description: null,
startPage: null,
@@ -838,13 +854,13 @@ esac
result = {
deviceCode: "device",
userCode: "ABCD",
- verificationUrl: `${process.env.REPLICA_HUB_ORIGIN}/canvas/pair/ABCD`,
+ verificationUrl: `http://${request.headers.host}/canvas/pair/ABCD`,
}
} else if (request.url === "/api/canvas/pairings/token" && request.method === "POST") {
result = {
status: "approved",
repository: "github/replica",
- accessToken: "rp_secret",
+ accessToken,
expiresAt: new Date(Date.now() + 60_000).toISOString(),
}
} else if (request.url === "/api/canvas/connection") {
@@ -914,7 +930,24 @@ esac
nextCursor: null,
}
} else if (request.url?.includes("/review_comments")) {
- result = { comments: [], hasMore: false, nextCursor: null }
+ const attributes = body ? JSON.parse(body).review_comment : null
+ result = {
+ comments:
+ request.method === "POST" && request.url.endsWith("/review_comments")
+ ? [
+ {
+ id: 9,
+ kind: "root",
+ body: attributes.body,
+ anchor: attributes.anchor,
+ author: { login: "octocat" },
+ buildNumber: attributes.build_number,
+ },
+ ]
+ : [],
+ hasMore: false,
+ nextCursor: null,
+ }
} else {
result = { name: "Updated" }
}
@@ -927,10 +960,15 @@ esac
await writeFile(
path.join(workspace, "git"),
`#!/bin/sh
+while [ "$1" = "-c" ]; do shift 2; done
case "$1:$2" in
remote:get-url) echo https://github.com/\${TEST_REPOSITORY:-github/replica}.git ;;
branch:--show-current) echo "\${TEST_BRANCH:-prototype/first}" ;;
rev-parse:HEAD) printf '%040d\\n' "\${TEST_HEAD:-1}" ;;
+ rev-parse:HEAD^{tree}) printf '%040d\\n' "\${TEST_HEAD_TREE:-2}" ;;
+ rev-parse:*^{tree}) printf '%040d\\n' "\${TEST_HEAD_TREE:-2}" ;;
+ write-tree:) printf '%040d\\n' "\${TEST_TREE:-2}" ;;
+ config:*) exit 1 ;;
esac
`,
{ mode: 0o755 },
@@ -945,27 +983,33 @@ esac
sessionWorkspacePath: workspace,
repositoryPath: workspace,
})
- canvas = await startCanvasServer(
- context,
- {
- send(message) {
- publishPrompts.push({
- prompt: message.prompt,
- registrations: calls.filter(
- ({ path, method }) => path === "/api/canvas/prototype" && method === "PATCH",
- ).length,
- })
- return "message"
+ function startCanvas() {
+ return startCanvasServer(
+ context,
+ {
+ send(message) {
+ publishPrompts.push({
+ prompt: message.prompt,
+ registrations: calls.filter(
+ ({ path, method }) => path === "/api/canvas/prototype" && method === "PATCH",
+ ).length,
+ })
+ return "message"
+ },
},
- },
- {
- hubOptions: { directory: path.join(workspace, "credentials") },
- openBrowser: async (url) => {
- browserUrls.push(url)
- return browserUnavailable ? { ok: false, error: "No browser available." } : { ok: true }
+ {
+ localCommentsDirectory: path.join(workspace, "local-comments"),
+ hubOptions: { directory: path.join(workspace, "credentials") },
+ openBrowser: async (url) => {
+ browserUrls.push(url)
+ return browserUnavailable
+ ? { ok: false, error: "No browser available." }
+ : { ok: true }
+ },
},
- },
- )
+ )
+ }
+ canvas = await startCanvas()
const page = await (await fetch(canvas.url)).text()
let token = JSON.parse(page.match(/window\.__REPLICA_CANVAS__ = ([^;]+);/)[1]).token
assert.equal((await fetch(new URL("/api/hub/status", canvas.url))).status, 403)
@@ -1179,17 +1223,88 @@ esac
(await send("/api/hub/mention-candidates?repositoryId=5&prototypeId=99")).status,
409,
)
+ const previousRevision = (await send("/api/hub/status")).body.reviewRevision
+ const beforeChangedRevision = calls.filter(
+ ({ path, method }) => path.endsWith("/review_comments") && method === "POST",
+ ).length
+ process.env.TEST_TREE = "3"
+ const posted = await send("/api/hub/comments", "POST", {
+ review_revision: previousRevision,
+ review_comment: {
+ body: "New thread",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ },
+ })
+ assert.equal(posted.status, 201)
+ const localRoots = (await send("/api/hub/comments")).body.comments
+ assert.equal(localRoots.length, 1)
+ assert.equal(localRoots[0].body, "New thread")
+ assert.equal(localRoots[0].draftRevisionId, previousRevision.id)
+ assert.equal(localRoots[0].buildNumber, null)
+ await canvas.close()
+ canvas = await startCanvas()
+ const reloadedPage = await (await fetch(canvas.url)).text()
+ token = JSON.parse(reloadedPage.match(/window\.__REPLICA_CANVAS__ = ([^;]+);/)[1]).token
+ assert.deepEqual((await send("/api/hub/comments")).body.comments, localRoots)
+ assert.equal(
+ calls.filter(({ path, method }) => path.endsWith("/review_comments") && method === "POST")
+ .length,
+ beforeChangedRevision,
+ )
+ delete process.env.TEST_TREE
+ sharingPublished = true
+ const selectedBuild = (await send("/api/hub/status")).body.reviewRevision
+ assert.equal(selectedBuild.id, null)
+ assert.equal(selectedBuild.buildNumber, 2)
+ assert.equal((await send("/api/hub/comments")).body.comments.length, 0)
+ process.env.TEST_TREE = "3"
+ process.env.TEST_HEAD = "2"
+ process.env.TEST_HEAD_TREE = "3"
+ currentBuildNumber = 3
+ currentBuildCommit = "2".padStart(40, "0")
assert.equal(
(
await send("/api/hub/comments", "POST", {
+ review_revision: selectedBuild,
+ review_comment: { body: "Keep the selected Build", anchor: { schemaVersion: 1 } },
+ })
+ ).status,
+ 201,
+ )
+ assert.equal(JSON.parse(calls.at(-1).body).review_comment.build_number, 2)
+ sharingPublished = false
+ currentBuildNumber = 2
+ currentBuildCommit = "1".padStart(40, "0")
+ delete process.env.TEST_HEAD
+ delete process.env.TEST_HEAD_TREE
+ delete process.env.TEST_TREE
+ assert.equal(
+ (
+ await send("/api/hub/comments", "POST", {
+ review_revision: { ...previousRevision, hubOrigin: "https://another-hub.example.com" },
+ review_comment: { body: "Wrong Hub", anchor: { schemaVersion: 1 } },
+ })
+ ).status,
+ 409,
+ )
+ currentPrototypeId = 9
+ assert.equal(
+ (
+ await send("/api/hub/comments", "POST", {
+ review_revision: previousRevision,
review_comment: {
- build_number: 2,
- body: "New thread",
+ body: "Stale Hub target",
anchor: { schemaVersion: 1 },
},
})
).status,
- 201,
+ 409,
+ )
+ currentPrototypeId = 4
+ assert.equal(
+ calls.filter(({ path, method }) => path.endsWith("/review_comments") && method === "POST")
+ .length,
+ beforeChangedRevision + 2,
)
assert.equal(
(
@@ -1324,6 +1439,27 @@ esac
const unpublishedRepositoryPage = await canvas.reviewAction("list_repository_comments", {})
assert.equal(unpublishedRepositoryPage.scanComplete, true)
assert.equal(unpublishedRepositoryPage.target.branch, "prototype/second")
+ const draftOnly = (await send("/api/hub/status")).body
+ assert.equal(draftOnly.state, "undiscovered")
+ assert.equal(draftOnly.prototype, undefined)
+ const beforeUnpublishedSave = calls.length
+ assert.equal(
+ (
+ await send("/api/hub/comments", "POST", {
+ review_revision: draftOnly.reviewRevision,
+ review_comment: {
+ body: "Review before Hub discovers the branch",
+ anchor: { schemaVersion: 1, kind: "element", selector: "#save" },
+ },
+ })
+ ).status,
+ 201,
+ )
+ assert.equal((await send("/api/hub/comments")).body.comments[0].buildNumber, null)
+ assert.ok(
+ calls.slice(beforeUnpublishedSave).every(({ method }) => method === "GET"),
+ "Saving unpublished feedback must not create any Hub records.",
+ )
assert.equal((await send("/api/publish", "POST", {})).status, 202)
assert.equal(publishData(publishPrompts.at(-1).prompt).branch, "prototype/second")
assert.equal(publishPrompts.at(-1).registrations, previousRegistrations)
@@ -1370,6 +1506,38 @@ esac
)
const originalHub = process.env.REPLICA_HUB_ORIGIN
+ const otherHub = `http://localhost:${hub.address().port}`
+ assert.equal((await send("/api/hub/origin", "POST", { origin: otherHub })).status, 200)
+ await send("/api/hub/pair", "POST", {})
+ await send("/api/hub/poll", "POST", {})
+ const otherHubStatus = (await send("/api/hub/status")).body
+ assert.equal(otherHubStatus.state, "connected")
+ const selectedConnection = otherHubStatus.reviewRevision
+ await send("/api/hub/disconnect", "POST", {})
+ accessToken = "rp_reconnected"
+ await send("/api/hub/pair", "POST", {})
+ await send("/api/hub/poll", "POST", {})
+ const reconnectedStatus = (await send("/api/hub/status")).body
+ assert.equal(reconnectedStatus.state, "connected")
+ assert.notEqual(
+ reconnectedStatus.reviewRevision.connectionId,
+ selectedConnection.connectionId,
+ )
+ const beforeReconnectedSave = calls.filter(
+ ({ path, method }) => path.endsWith("/review_comments") && method === "POST",
+ ).length
+ const reconnectedSave = await send("/api/hub/comments", "POST", {
+ review_revision: selectedConnection,
+ review_comment: { body: "Old connection", anchor: { schemaVersion: 1 } },
+ })
+ assert.equal(reconnectedSave.status, 409, JSON.stringify(reconnectedSave.body))
+ assert.equal(
+ calls.filter(({ path, method }) => path.endsWith("/review_comments") && method === "POST")
+ .length,
+ beforeReconnectedSave,
+ )
+ assert.equal((await send("/api/hub/origin", "POST", { origin: originalHub })).status, 200)
+ await send("/api/hub/status")
const invalid = await send("/api/hub/origin", "POST", {
origin: "http://hub.example.com",
})
@@ -1413,7 +1581,10 @@ esac
canvas = await startCanvasServer(
context,
{ send() {} },
- { hubOptions: { directory: path.join(workspace, "credentials") } },
+ {
+ hubOptions: { directory: path.join(workspace, "credentials") },
+ localCommentsDirectory: path.join(workspace, "local-comments"),
+ },
)
const reopenedPage = await (await fetch(canvas.url)).text()
token = JSON.parse(reopenedPage.match(/window\.__REPLICA_CANVAS__ = ([^;]+);/)[1]).token
@@ -1430,6 +1601,8 @@ esac
delete process.env.TEST_BRANCH
delete process.env.TEST_REPOSITORY
delete process.env.TEST_HEAD
+ delete process.env.TEST_HEAD_TREE
+ delete process.env.TEST_TREE
if (originalOrigin === undefined) delete process.env.REPLICA_HUB_ORIGIN
else process.env.REPLICA_HUB_ORIGIN = originalOrigin
await new Promise((resolve, reject) =>
diff --git a/hub/.storybook/preview-fixtures/build-controls/controls.js b/hub/.storybook/preview-fixtures/build-controls/controls.js
index 8bcdccd3..75f132d4 100644
--- a/hub/.storybook/preview-fixtures/build-controls/controls.js
+++ b/hub/.storybook/preview-fixtures/build-controls/controls.js
@@ -1,4 +1,4 @@
(function(){var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=((n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n)))(o((e=>{var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),n=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),i=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=r();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t}));e.validateShape=P;var a={type:`object`,additionalProperties:!1,required:[`version`,`scope`,`controls`],properties:{$schema:{type:`string`},version:{const:1},scope:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},role:{enum:[`shared`,`page`]},container:{$ref:`#/$defs/selector`},panel:{type:`object`,additionalProperties:!1,required:[`width`],properties:{width:{type:`integer`,minimum:160,maximum:4096}}},groups:{type:`array`,maxItems:100,items:{type:`object`,additionalProperties:!1,required:[`id`,`label`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},when:{$ref:`#/$defs/condition`}}}},controls:{type:`array`,maxItems:500,items:{oneOf:[{$ref:`#/$defs/boolean`},{$ref:`#/$defs/number`},{$ref:`#/$defs/slider`},{$ref:`#/$defs/choice`},{$ref:`#/$defs/checkboxGroup`},{$ref:`#/$defs/text`},{$ref:`#/$defs/color`},{$ref:`#/$defs/button`}]}}}},o=Object.prototype.hasOwnProperty,s=n().default,c=RegExp(`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`,`u`),l={type:[`string`,`number`,`boolean`]},u=i().default,d={validate:f};function f(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0,s=o,p=!1,m=null,h=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.equals===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`equals`},message:`must have required property 'equals'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`equals`){let e={instancePath:t,schemaPath:`#/oneOf/0/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.equals!==void 0){let n=e.equals;if(typeof n!=`string`&&!(typeof n==`number`&&isFinite(n))&&typeof n!=`boolean`){let e={instancePath:t+`/equals`,schemaPath:`#/$defs/scalar/type`,keyword:`type`,params:{type:l.type},message:`must be string,number,boolean`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=h===o;g&&(p=!0,m=0);let _=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.in===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`in`},message:`must have required property 'in'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`in`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.in!==void 0){let n=e.in;if(Array.isArray(n)){if(n.length>20){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/maxItems`,keyword:`maxItems`,params:{limit:20},message:`must NOT have more than 20 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r1){outer0:for(;r--;)for(i=r;i--;)if(u(n[r],n[i])){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[e]:a.push(e),o++;break outer0}}}else{let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=_===o;if(g&&p)p=!1,m=[m,1];else{g&&(p=!0,m=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.includes===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`includes`},message:`must have required property 'includes'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`includes`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.includes!==void 0&&typeof e.includes!=`string`){let e={instancePath:t+`/includes`,schemaPath:`#/oneOf/2/properties/includes/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=n===o;if(g&&p)p=!1,m=[m,2];else{g&&(p=!0,m=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.all===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`all`},message:`must have required property 'all'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`all`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.all!==void 0){let n=e.all;if(Array.isArray(n)){if(n.length>10){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r10){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=d===o;f&&(l=!0,u=0);let v=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.selector===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`selector`},message:`must have required property 'selector'`};a===null?a=[e]:a.push(e),o++}if(e.property===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`property`},message:`must have required property 'property'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`selector`&&n!==`property`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`style`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/1/properties/type/const`,keyword:`const`,params:{allowedValue:`style`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.selector!==void 0){let n=e.selector;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.property!==void 0){let n=e.property;if(typeof n==`string`){if(s(n)>100){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/maxLength`,keyword:`maxLength`,params:{limit:100},message:`must NOT have more than 100 characters`};a===null?a=[e]:a.push(e),o++}if(!m.test(n)){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/pattern`,keyword:`pattern`,params:{pattern:`^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$`},message:`must match pattern "^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=v===o;if(f&&l)l=!1,u=[u,1];else{f&&(l=!0,u=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.key===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`key`},message:`must have required property 'key'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`key`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`query`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/2/properties/type/const`,keyword:`const`,params:{allowedValue:`query`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.key!==void 0){let n=e.key;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/2/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[2].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,2];else{f&&(l=!0,u=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`hash`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/3/properties/type/const`,keyword:`const`,params:{allowedValue:`hash`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/3/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[3].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/3/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,3];else{f&&(l=!0,u=3);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.object===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`object`},message:`must have required property 'object'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`object`&&n!==`read`&&n!==`write`&&n!==`action`&&n!==`subscribe`&&n!==`pollMs`){let e={instancePath:t,schemaPath:`#/oneOf/4/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`api`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/4/properties/type/const`,keyword:`const`,params:{allowedValue:`api`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.object!==void 0){let n=e.object;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(!h.test(n)){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$`},message:`must match pattern "^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.read!==void 0){let n=e.read;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.write!==void 0){let n=e.write;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.action!==void 0){let n=e.action;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.subscribe!==void 0){let n=e.subscribe;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.pollMs!==void 0){let n=e.pollMs;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),o++}if(typeof n==`number`&&isFinite(n)){if(n>6e4||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:6e4},message:`must be <= 60000`};a===null?a=[e]:a.push(e),o++}if(n<100||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:100},message:`must be >= 100`};a===null?a=[e]:a.push(e),o++}}}}else{let e={instancePath:t,schemaPath:`#/oneOf/4/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;f&&l?(l=!1,u=[u,4]):f&&(l=!0,u=4)}}}if(l)o=c,a!==null&&(c?a.length=c:a=null);else{let e={instancePath:t,schemaPath:`#/oneOf`,keyword:`oneOf`,params:{passingSchemas:u},message:`must match exactly one schema in oneOf`};a===null?a=[e]:a.push(e),o++}return _.errors=a,o===0}function v(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return v.errors=a,o===0}var y={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`number`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function b(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return b.errors=a,l===0}var x={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`slider`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function S(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return S.errors=a,l===0}var C={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`options`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`select`,`radio`,`segmented`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},options:{$ref:`#/$defs/options`},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function w(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return w.errors=a,o===0}function T(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return T.errors=a,o===0}var E={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`text`,`textarea`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},minLength:{type:`integer`,minimum:0},maxLength:{type:`integer`,minimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function D(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return D.errors=a,l===0}var O=RegExp(`^#[0-9a-fA-F]{6}$`,`u`);function k(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return k.errors=a,o===0}function A(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return A.errors=a,o===0}function j(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let l=null,u=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.version===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`version`},message:`must have required property 'version'`};l===null?l=[e]:l.push(e),u++}if(e.scope===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`scope`},message:`must have required property 'scope'`};l===null?l=[e]:l.push(e),u++}if(e.controls===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`controls`},message:`must have required property 'controls'`};l===null?l=[e]:l.push(e),u++}for(let n in e)if(!o.call(a.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};l===null?l=[e]:l.push(e),u++}if(e.$schema!==void 0&&typeof e.$schema!=`string`){let e={instancePath:t+`/$schema`,schemaPath:`#/properties/%24schema/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}if(e.version!==void 0&&e.version!==1){let e={instancePath:t+`/version`,schemaPath:`#/properties/version/const`,keyword:`const`,params:{allowedValue:1},message:`must be equal to constant`};l===null?l=[e]:l.push(e),u++}if(e.scope!==void 0){let n=e.scope;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return L.errors=a,o===0}e.number=R;function R(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return R.errors=a,l===0}e.slider=z;function z(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return z.errors=a,l===0}e.choice=B;function B(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return B.errors=a,o===0}e.checkboxGroup=V;function V(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return V.errors=a,o===0}e.text=H;function H(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return H.errors=a,l===0}e.color=U;function U(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return U.errors=a,o===0}e.button=W;function W(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return W.errors=a,o===0}}))(),1);function l(e){if(e&&typeof e==`object`){for(let t of Object.values(e))l(t);Object.freeze(e)}return e}function u(e){return Array.isArray(e)?`[${e.map(u).join(`,`)}]`:e&&typeof e==`object`?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${u(e[t])}`).join(`,`)}}`:JSON.stringify(e)}function d(e,t){if(!e)return!0;if(e.all)return e.all.every(e=>d(e,t));if(e.any)return e.any.some(e=>d(e,t));let n=t[e.control];return`equals`in e?n===e.equals:`in`in e?e.in.includes(n):Array.isArray(n)&&n.includes(e.includes)}var{validateDocumentShape:f,validateDeclaration:p}=c.default,m={boolean:`boolean`,number:`number`,slider:`slider`,select:`choice`,radio:`choice`,segmented:`choice`,checkboxGroup:`checkboxGroup`,text:`text`,textarea:`text`,color:`color`,button:`button`};function h(e){let t=[...p.errors].filter(e=>!/^\/controls\/\d+(?:\/|$)/.test(e.instancePath)).map(e=>({...e}));return Array.isArray(e?.controls)&&e.controls.forEach((e,n)=>{let r=Object.hasOwn(m,e?.type)?m[e.type]:void 0,i=r&&c.default[r];i?i(e)||t.push(...i.errors.map(e=>({...e,instancePath:`/controls/${n}${e.instancePath}`}))):t.push({instancePath:`/controls/${n}/type`,message:`must name a supported control type`})}),t.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params}))}var g=class extends Error{constructor(e){super(`Invalid controls.replica.json:\n${e.map(e=>` ${e.path||`/`}: ${e.message}`).join(`
`)}`),this.name=`ControlsValidationError`,this.issues=e}};function _(e,t){switch(e.type){case`boolean`:return typeof t==`boolean`?null:`must be a boolean`;case`number`:case`slider`:{if(typeof t!=`number`||!Number.isFinite(t))return`must be a finite number`;if(e.min!==void 0&&t= min`;if(e.max!==void 0&&t>e.max)return`must be <= max`;let n=(t-e.min)/(e.step??1);return!Number.isFinite(n)||Math.abs(n-Math.round(n))>1e-8?`must align with step (anchored at min)`:null}case`select`:case`radio`:case`segmented`:return e.options.includes(t)?null:`must be a declared option`;case`checkboxGroup`:return Array.isArray(t)&&new Set(t).size===t.length&&t.every(t=>e.options.includes(t))?null:`must be unique declared options`;case`text`:case`textarea`:return typeof t==`string`?e.minLength!==void 0&&[...t].lengthe.maxLength?`longer than maxLength`:null:`must be a string`;case`color`:return typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?null:`must be a six-digit hex color`;default:return`button controls have no value`}}function v(e){return e?e.control?[e.control]:(e.all??e.any).flatMap(v):[]}function y(e){let t=new Map((e.groups??[]).map(e=>[e.id,e])),n=new Map(e.controls.map(e=>[e.id,e])),r=new Set,i=new Set,a=[];function o(e){if(r.has(e))return;if(i.has(e))throw new g([{path:`/controls/${e}/when`,message:`conditional dependency cycle (including groups)`}]);i.add(e);let s=n.get(e);for(let e of[...v(s.when),...v(t.get(s.group)?.when)])o(e);i.delete(e),r.add(e),a.push(e)}for(let e of n.keys())o(e);return a}function b(e){let t=new Set;function n(e,r=0){if(r>24)throw new g([{path:`/`,message:`document nesting exceeds 24`}]);if(typeof e==`number`&&!Number.isFinite(e))throw new g([{path:`/`,message:`numbers must be finite`}]);if(![`string`,`number`,`boolean`,`object`].includes(typeof e))throw new g([{path:`/`,message:`must contain only JSON values`}]);if(e&&typeof e==`object`){if(!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new g([{path:`/`,message:`must contain only JSON objects`}]);if(t.has(e))throw new g([{path:`/`,message:`must be an acyclic JSON document`}]);t.add(e);for(let t of Object.values(e))n(t,r+1);t.delete(e)}}n(e)}function x(e){b(e);let t=e&&typeof e==`object`&&Object.hasOwn(e,`sets`)?e.sets:[e];if(!e||typeof e!=`object`||!Object.hasOwn(e,`sets`))return C(e),S(e),e;if(!f(e))throw new g(f.errors.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params})));let n=new Set;return t.forEach((e,t)=>{try{C(e),S(e)}catch(e){throw e instanceof g?new g(e.issues.map(e=>({...e,path:`/sets/${t}${e.path}`}))):e}if(n.has(e.scope))throw new g([{path:`/sets/${t}/scope`,message:`duplicate scope ${e.scope}`}]);n.add(e.scope)}),e}function S(e){let t=[];for(let[n,r]of e.controls.entries()){let e=r.binding,i=`/controls/${n}/binding`;e?((r.type===`button`&&![`button`,`api`].includes(e.type)||r.type!==`button`&&e.type===`button`)&&t.push({path:i,message:`binding does not match the control type`}),e.type===`query`&&(e.key===`rc`||e.key.startsWith(`rc.`))&&t.push({path:i,message:`rc and rc.* are reserved for control settings`}),e.type===`api`&&(([`window`,`globalThis`,`self`,`parent`,`top`,`document`,`location`,`history`,`navigator`].includes(e.object.split(`.`)[0])||[e.read,e.write,e.action,e.subscribe].some(e=>[`eval`,`Function`].includes(e)))&&t.push({path:i,message:`API bindings must name an app-owned object and ordinary methods`}),e.object.split(`.`).some(e=>[`constructor`,`prototype`,`__proto__`].includes(e))&&t.push({path:i,message:`API object must name the app's own exposed object`}),r.type===`button`?(!e.action||e.read||e.write||e.subscribe||e.pollMs)&&t.push({path:i,message:`API buttons require only object and action`}):(!e.read||!e.write||e.action||!!e.subscribe==!!e.pollMs)&&t.push({path:i,message:`API values require read, write, and either subscribe or pollMs`}))):t.push({path:i,message:`each control requires a binding`})}if(t.length)throw new g(t)}function C(e){if(b(e),!p(e))throw new g(h(e));let t=[];function n(e,n){t.push({path:e,message:n})}let r=new Set,i=new Map((e.groups??[]).map(e=>[e.id,e])),a=new Map(e.controls.map(e=>[e.id,e]));for(let[t,i]of[[`groups`,e.groups??[]],[`controls`,e.controls]])i.forEach((e,i)=>{r.has(e.id)&&n(`/${t}/${i}/id`,`duplicate ID ${e.id}`),r.add(e.id)});function o(e,t,r=0){if(!e)return;if(r>4){n(t,`conditions support at most five levels`);return}if(e.all||e.any){let n=e.all?`all`:`any`;e[n].forEach((e,i)=>o(e,`${t}/${n}/${i}`,r+1));return}let i=a.get(e.control);if(!i||i.type===`button`)n(t,`condition must reference a value control`);else if(`includes`in e)(i.type!==`checkboxGroup`||!i.options.includes(e.includes))&&n(t,`includes requires a declared checkboxGroup option`);else if(i.type===`checkboxGroup`)n(t,`checkboxGroup conditions must use includes`);else for(let r of`in`in e?e.in:[e.equals]){let e=_(i,r);e&&n(t,`invalid condition for ${i.id}: ${e}`)}}if(e.controls.forEach((e,t)=>{let r=`/controls/${t}`;if(e.group&&!i.has(e.group)&&n(`${r}/group`,`unknown group`),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&n(r,`min must not exceed max`),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&n(r,`minLength must not exceed maxLength`),e.type===`segmented`&&e.options.length>3&&n(`${r}/options`,`segmented supports at most three options`),e.type!==`button`){let t=_(e,e.default);t&&n(`${r}/default`,t)}o(e.when,`${r}/when`)}),(e.groups??[]).forEach((e,t)=>o(e.when,`/groups/${t}/when`)),t.length)throw new g(t);return y(e),e}var w=Symbol.for(`replica.controls.injected.runtime`),T=new WeakMap;function E(){let e=globalThis[w];if(e&&e.version!==2)throw Error(`Replica controls runtime version mismatch; reload the page`);if(!e){let e=new Map,t=new Set,n=Object.freeze({version:2,create:e=>D(e),list:()=>Object.freeze([...e.values()].map(e=>e.controller)),subscribe(e){return t.add(e),()=>t.delete(e)}});T.set(n,{scopes:e,notify:()=>{for(let e of[...t])e()}}),globalThis[w]=n}return globalThis[w]}function D(e){C(e);let t=l(structuredClone(e)),n=u(t),r=E(),i=r.list().find(e=>e.declaration.scope===t.scope);if(i){if(u(i.declaration)!==n)throw Error(`Conflicting controls declaration for scope "${t.scope}"; reload after schema changes`);return i}let a=T.get(r);if(!a)return r.create(e);let o=new Map(t.controls.map(e=>[e.id,e])),s=new Map((t.groups??[]).map(e=>[e.id,e])),c=y(t),f=new Set,p=new Map,m=new Set,h={},g=0,v=!1,b=!1,x;function S(e){for(let t of[...p.values()].reverse()){let n=t();if(Object.hasOwn(n,e)&&typeof n[e]==`function`)return n}}function w(e){let n={};for(let t of c){let r=o.get(t);n[t]=d(r.when,e)&&d(s.get(r.group)?.when,e),!n[t]&&r.type!==`button`&&(e[t]=structuredClone(r.default))}return l({values:e,visible:n,groups:Object.fromEntries([...s].map(([t,n])=>[t,d(n.when,e)])),actions:Object.fromEntries(t.controls.filter(e=>e.type===`button`).map(e=>[e.id,{available:!!S(e.id)&&!h[e.id]?.error,busy:m.has(e.id)}])),...Object.keys(h).length?{bindings:structuredClone(h)}:{}})}function D(){return Object.fromEntries(t.controls.filter(e=>e.type!==`button`).map(e=>[e.id,structuredClone(e.default)]))}x=l({...w(D()),revision:g});function O(e){let t=w(e),n={values:x.values,visible:x.visible,groups:x.groups,actions:x.actions,...x.bindings?{bindings:x.bindings}:{}};if(u(t)!==u(n)&&(x=l({...t,revision:++g}),b=!0,!v)){v=!0;try{for(;b;){b=!1;for(let e of[...f])e();a.notify()}}finally{v=!1}}}function k(e){let t=o.get(e);if(!t)throw Error(`Unknown control "${e}"`);if(!x.visible[e])throw Error(`Control "${e}" is hidden`);return t}let A=Object.freeze({declaration:t,getSnapshot:()=>x,subscribe(e){return f.add(e),()=>f.delete(e)},update(e,t){let n=_(k(e),t);if(n)throw Error(`Control "${e}": ${n}`);O({...x.values,[e]:structuredClone(t)})},restore(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Controls restore requires an object`);let t={...x.values};for(let[n,r]of Object.entries(e)){let e=o.get(n);if(!e)throw Error(`Unknown control "${n}"`);let i=_(e,r);if(i)throw Error(`Control "${n}": ${i}`);t[n]=structuredClone(r)}O(t)},refreshActions(){O({...x.values})},bindingStatus(e,t,n=!1,r=!t){if(!o.has(e))throw Error(`Unknown control "${e}"`);h[e]={error:t.slice(0,500),busy:n,available:r},O({...x.values})},reset(e){if(e===void 0)return O(D());let t=k(e);if(t.type===`button`)throw Error(`Buttons cannot be reset`);O({...x.values,[e]:structuredClone(t.default)})},async action(e){if(k(e).type!==`button`)throw Error(`Control "${e}" is not a button`);let t=S(e);if(!t)throw Error(`No mounted action handler for "${e}"`);if(m.has(e))throw Error(`Action "${e}" is busy`);m.add(e),O({...x.values});try{return await t[e]()}finally{m.delete(e),O({...x.values})}},mount(e=()=>({})){let t=Symbol();p.set(t,e);try{O({...x.values}),a.notify()}catch(e){throw p.delete(t),O({...x.values}),a.notify(),e}let n=!0;return()=>{n&&(n=!1,p.delete(t),O({...x.values}),a.notify())}},get mountedCount(){return p.size}});return a.scopes.set(t.scope,Object.freeze({canonical:n,controller:A})),a.notify(),A}function O(e,t=!1){if(!(e instanceof HTMLElement)||!e.isConnected)return`The binding target is missing or stale.`;let n=e.getBoundingClientRect();for(let t=e;t;t=t.parentElement){let e=window.getComputedStyle(t);if(t.hasAttribute(`hidden`)||t.hasAttribute(`inert`)||t.getAttribute(`aria-hidden`)===`true`||t.getAttribute(`aria-disabled`)===`true`||e.visibility===`hidden`||e.visibility===`collapse`||e.display===`none`||Number(e.opacity||1)===0)return`The binding target is hidden or disabled.`}if(e.hasAttribute(`data-replica-canvas-bridge`)||e.matches(`:disabled`)||!n.width||!n.height)return`The binding target is hidden or disabled.`;if(!t)return``;let r=document.elementFromPoint(n.left+n.width/2,n.top+n.height/2);if(!r||r!==e&&!e.contains(r))return`The binding target is blocked by another element.`;let i=e.closest(`button, input, select, textarea, [role="button"], [role="link"], a`),a=e.closest(`form`)||(e instanceof HTMLButtonElement||e instanceof HTMLInputElement?e.form:null);if(i!==e||a)return`The binding target is not a safe standalone control.`;let o=e.closest(`a`);if(o){let e=o.getAttribute(`href`),t;try{t=new URL(e||``,window.location.href)}catch{return`The binding target has an invalid link URL.`}if(!e||![`http:`,`https:`].includes(t.protocol)||t.origin!==window.location.origin||t.username||t.password||o.hasAttribute(`download`)||o.hasAttribute(`target`)&&o.getAttribute(`target`)!==`_self`)return`The binding target leaves the prototype or downloads a file.`}return``}function k(e,t){return JSON.stringify(e)===JSON.stringify(t)}function A(){let e=new URL(window.location.href);for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);return e.href}function j(e){let t=document.querySelectorAll(e);if(t.length!==1)throw Error(t.length?`The binding target is ambiguous.`:`The binding target is missing.`);return t[0]}function M(e){let t=window;for(let n of e.split(`.`)){if(!t||!Object.hasOwn(t,n))throw Error(`The app API "${e}" is unavailable.`);t=t[n]}if(!t||typeof t!=`object`&&typeof t!=`function`)throw Error(`The app API "${e}" is not an object.`);if([window,window.document,window.location,window.history,window.navigator].includes(t))throw Error(`API bindings must use an app-owned object, not a browser API.`);return t}function N(e){let t=e.binding;if(t.type===`api`){let e=M(t.object);for(let n of[t.read,t.write,t.action,t.subscribe].filter(Boolean))if(!Object.hasOwn(e,n)||typeof e[n]!=`function`)throw Error(`The app API method "${n}" is unavailable.`);return e}if(t.type===`query`||t.type===`hash`)return window;let n=j(t.selector),r=O(n,t.type===`button`);if(r)throw Error(r);if(t.type===`field`){if(!(n instanceof HTMLInputElement||n instanceof HTMLSelectElement||n instanceof HTMLTextAreaElement)||n instanceof HTMLInputElement&&[`button`,`submit`,`reset`,`image`,`file`,`password`,`hidden`].includes(n.type))throw Error(`The binding requires a supported native form field.`);if(e.type===`boolean`&&!(n instanceof HTMLInputElement&&n.type===`checkbox`))throw Error(`A boolean field binding requires a checkbox.`);if(e.type===`checkboxGroup`&&!(n instanceof HTMLSelectElement&&n.multiple))throw Error(`A checkboxGroup field binding requires a multiple select.`);if(n.readOnly)throw Error(`The binding target is read-only.`)}if(t.type===`style`&&e.type===`checkboxGroup`)throw Error(`Style bindings require a scalar control.`);return n}function P(e,t){if(e.type===`boolean`)return t===`true`||t!==`false`&&t;if(e.type===`number`||e.type===`slider`)return t.trim()===``?NaN:Number(t);if(e.type===`checkboxGroup`)return JSON.parse(t);if(e.type===`color`&&/^rgb\(/.test(t)){let e=t.match(/\d+/g);if(e?.length===3)return`#${e.map(e=>Number(e).toString(16).padStart(2,`0`)).join(``)}`}return t}function F(e){return Array.isArray(e)?JSON.stringify(e):String(e)}function I(e,t){let n=e.binding;if(n.type===`api`)return t[n.read]();if(n.type===`field`)return e.type===`boolean`?t.checked:e.type===`checkboxGroup`?[...t.selectedOptions].map(e=>e.value):P(e,t.value);if(n.type===`style`)return P(e,window.getComputedStyle(t).getPropertyValue(n.property).trim());let r=new URL(window.location.href),i=n.type===`query`?r.searchParams.get(n.key):decodeURIComponent(r.hash.slice(1));return i===null?structuredClone(e.default):P(e,i)}function L(e){let t=typeof e==`string`?e:e?.message;return Error(typeof t==`string`&&t?t:`The app binding failed without an error message.`)}async function R(e,t=5e3){let n;try{return await Promise.race([Promise.resolve().then(e),new Promise((e,r)=>{n=window.setTimeout(()=>r(Error(`The app API timed out. Its outcome is unknown.`)),t)})])}catch(e){throw L(e)}finally{window.clearTimeout(n)}}function z(e,t,n){let r=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLSelectElement?HTMLSelectElement.prototype:HTMLTextAreaElement.prototype;Object.getOwnPropertyDescriptor(r,t).set.call(e,n)}async function B(e,t,n){let r=e.binding;if(r.type===`api`){await R(()=>t[r.write](structuredClone(n)));return}if(r.type===`field`){if(t instanceof HTMLSelectElement)for(let e of Array.isArray(n)?n:[F(n)]){let n=[...t.options].filter(t=>t.value===e);if(n.length!==1||n[0].disabled||n[0].closest(`optgroup[disabled], [hidden], [inert]`))throw Error(`The native option is missing, ambiguous, hidden or disabled.`)}if(e.type===`checkboxGroup`)for(let e of t.options)e.selected=n.includes(e.value);else e.type===`boolean`?t.checked!==n&&t.click():z(t,`value`,F(n));t.dispatchEvent(new Event(`input`,{bubbles:!0})),t.dispatchEvent(new Event(`change`,{bubbles:!0}));return}if(r.type===`style`){t.style.setProperty(r.property,F(n));return}let i=new URL(window.location.href);if(r.type===`query`?i.searchParams.set(r.key,F(n)):i.hash=`#${F(n).replace(/%/g,`%25`)}`,i.href===window.location.href)return;if(i.origin!==window.location.origin)throw Error(`URL bindings cannot leave the prototype.`);if(r.mode===`navigate`)return i;window.history.replaceState(window.history.state,``,i);let a=new Event(r.type===`hash`?`hashchange`:`popstate`);Object.defineProperty(a,"replicaControlsBinding",{value:!0}),window.dispatchEvent(a)}function V(e){x(e);let t=(e.sets??[e]).map(e=>({controller:D(e),release:void 0,records:new Map(e.controls.map(e=>[e.id,{control:e,object:void 0,cleanup:void 0,initialized:!1,lastRead:0,reading:!1}]))})),n=!1,r=0,i=Promise.resolve(),a=Promise.resolve(),o=!1,s=!1,c,l=new Set,u=``;function d(){let e=JSON.stringify(t.map(({controller:e})=>[e.declaration.scope,e.mountedCount,e.getSnapshot().revision]));if(e!==u){u=e;for(let e of l)e()}}let f=E().subscribe(()=>{!s&&!r&&d()});function p(e){if(!e.controller.declaration.container)return!0;let t=document.querySelectorAll(e.controller.declaration.container);if(t.length>1)throw Error(`The page container is ambiguous.`);return t.length===1&&!O(t[0])}function m(e,t){let n=t.cleanup;t.cleanup=void 0,t.object=void 0,t.initialized=!1;try{n?.()}catch(n){let r=Error(`API cleanup failed: ${L(n).message}`);return e.controller.bindingStatus(t.control.id,r.message),r}}function h(e){let n=e.binding;if(n.type===`query`||n.type===`hash`){let e=new Set;for(let r of t){let t;try{t=p(r)}catch{continue}if(t)for(let t of r.records.values()){let i=t.control.binding;i.type===n.type&&(n.type===`hash`||i.key===n.key)&&e.add(F(r.controller.getSnapshot().values[t.control.id]))}}if(e.size>1)throw Error(`This URL setting has conflicting active Controls bindings.`)}return N(e)}function g(e,t,r,i){let a=t.control.binding.type===`api`?new URL(A()).origin!==new URL(i).origin:A()!==i;if(n||!p(e)||a||h(t.control)!==r)throw Error(`The binding target or prototype route changed. The outcome is unknown.`)}async function v(e,t,n,r){let i=await R(()=>I(t.control,n));g(e,t,n,r);let a=_(t.control,i);if(a)throw Error(`The app value ${a}.`);return e.controller.restore({[t.control.id]:i}),t.lastRead=Date.now(),i}async function b(e,t,n){let{control:r}=t,i=e.controller.getSnapshot().values[r.id],a=A(),o;e.controller.bindingStatus(r.id,``,!0);try{o=h(r);let i=await B(r,o,n);if(i){let t=new URL(c?.href??window.location.href);return r.binding.type===`query`?t.searchParams.set(r.binding.key,i.searchParams.get(r.binding.key)):t.hash=i.hash,c=t,e.controller.restore({[r.id]:n}),e.controller.bindingStatus(r.id,``),n}await new Promise(e=>{let t=window.setTimeout(()=>{window.cancelAnimationFrame(n),e()},100),n=window.requestAnimationFrame(()=>{window.clearTimeout(t),e()})});let s=[`query`,`hash`].includes(r.binding.type),l=await v(e,t,o,s?A():a);if(!k(l,n))throw t.rejection=`The app rejected or adjusted this value. Its actual value is shown.`,t.rejectedValue=l,Error(`The app rejected or adjusted this value. Its actual value is shown.`);return t.rejection=``,e.controller.bindingStatus(r.id,``),l}catch(s){let c=L(s),l=!1;if(o)try{let n=await v(e,t,o,a);t.rejection=c.message,t.rejectedValue=n,l=!0}catch(e){c=Error(`${c.message} ${L(e).message}`)}throw!l&&k(e.controller.getSnapshot().values[r.id],n)&&e.controller.restore({[r.id]:i}),e.controller.bindingStatus(r.id,c.message,!1,l),c}}async function S(e,t){let{control:n}=t;if(!t.reading){t.reading=!0;try{let r=h(n);if(t.object!==r){let i=m(e,t);if(i)throw i;if(t.object=r,n.binding.type===`api`&&n.binding.subscribe){let e=r[n.binding.subscribe](()=>{t.lastRead=0,C()});if(typeof e!=`function`)throw Error(`The API notification method must return a cleanup function.`);t.cleanup=e}}if(n.type===`button`){e.controller.bindingStatus(n.id,t.rejection||``,!1,!0);return}if(!t.initialized)t.initialized=!0,await b(e,t,e.controller.getSnapshot().values[n.id]);else{let i=n.binding.type===`api`?n.binding.pollMs:250;if(t.lastRead===0||i&&Date.now()-t.lastRead>=i){if(!e.controller.getSnapshot().visible[n.id]&&!k(await R(()=>I(n,r)),n.default))await b(e,t,n.default);else{let n=await v(e,t,r,A());t.rejection&&!k(n,t.rejectedValue)&&(t.rejection=``)}e.controller.bindingStatus(n.id,t.rejection||``,!1,!0)}}}catch(t){e.controller.bindingStatus(n.id,L(t).message)}finally{t.reading=!1}}}function C(){return o||(o=!0,a=a.then(async()=>{if(!(n||r)){s=!0;try{await Promise.all(t.map(async e=>{let t,n=!1;try{t=p(e)}catch(r){t=!0,n=!0;for(let t of e.records.values())e.controller.bindingStatus(t.control.id,`Invalid page container: ${r.message}`)}if(t){if(!e.release){let t=Object.fromEntries([...e.records.values()].filter(e=>e.control.type===`button`).map(t=>[t.control.id,async()=>{let n=h(t.control),r=A();t.control.binding.type===`api`?await R(()=>n[t.control.binding.action](),3e4):n.click(),g(e,t,n,r)}]));e.release=e.controller.mount(()=>t)}n||await Promise.all([...e.records.values()].map(t=>S(e,t)))}else{e.release?.(),e.release=void 0;for(let t of e.records.values())m(e,t)}}))}finally{s=!1,d()}}}).finally(()=>{o=!1})),a}function w(e,t){let n=i.then(async()=>{await a,t?.(),c=void 0,r++;try{return await e()}catch(e){throw c=void 0,e}finally{r--,d()}});return i=n.catch(()=>{}),n}function T(e){let n=t.find(t=>t.controller===e);if(!n)throw Error(`Unknown controls set.`);return n}async function j(e,t,n){let r=T(e),i=e.getSnapshot();n?.(),e.restore(t);let a=[];for(let o of y(e.declaration)){n?.();let s=r.records.get(o);if(s.control.type===`button`)continue;let c=e.getSnapshot().values[o];if(Object.hasOwn(t,o)||!k(c,i.values[o])||[`query`,`hash`].includes(s.control.binding.type)&&s.control.binding.mode===`navigate`)try{await b(r,s,c)}catch(t){e.getSnapshot().bindings[o]?.available!==!0&&k(e.getSnapshot().values[o],c)&&e.restore({[o]:i.values[o]}),a.push(`${s.control.label}: ${t.message}`)}}if(n?.(),a.length)throw Error(a.join(`
`).slice(0,1e3))}let M=window.setInterval(()=>{C()},250);function P(e){for(let n of t)for(let t of n.records.values())if(t.control.binding.type!==`api`&&t.control.type!==`button`){if(e.type===`input`||e.type===`change`){if(e.target!==t.object)continue;try{let e=I(t.control,t.object),r=_(t.control,e);if(r)throw Error(`The app value ${r}.`);n.controller.restore({[t.control.id]:e})}catch(e){n.controller.bindingStatus(t.control.id,e.message)}}t.lastRead=0}C()}for(let e of[`input`,`change`,`popstate`,`hashchange`])window.addEventListener(e,P);return C(),{runtime:E(),pending:()=>r>0||s,subscribe(e){return l.add(e),()=>l.delete(e)},settled:()=>a,restore:(e,t,n)=>w(()=>j(e,t,n),n),update:(e,t,n,r)=>w(()=>{let i=e.declaration.controls.find(e=>e.id===t),a=i?_(i,n):`Unknown control.`;if(a)throw Error(a);if(!e.getSnapshot().visible[t])throw Error(`This control is hidden.`);return j(e,{[t]:n},r)},r),takeNavigation(){if(!c)return;let e=c;c=void 0;for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);for(let[t,n]of new URL(window.location.href).searchParams)(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.append(t,n);return e.href},navigate(){let e=this.takeNavigation();e&&window.location.assign(e)},reset:(e,n)=>w(async()=>{let r=e?[T(e)]:t,i=[];for(let e of r){let t=Object.fromEntries(e.controller.declaration.controls.filter(e=>e.type!==`button`).map(e=>[e.id,e.default]));if(!e.release)e.controller.reset();else try{await j(e.controller,t,n)}catch(e){i.push(e.message)}}if(i.length)throw Error(i.join(`
-`).slice(0,1e3))},n),dispose(){n=!0,f(),window.clearInterval(M);for(let e of[`input`,`change`,`popstate`,`hashchange`])window.removeEventListener(e,P);for(let e of t){e.release?.();for(let t of e.records.values())m(e,t)}}}}async function H(){let e=await fetch(`/controls.replica.json`,{credentials:`same-origin`,redirect:`error`});if(e.status===404||e.status===410)return;if(!e.ok)throw Error(`controls.replica.json returned HTTP ${e.status}.`);let t=``,n=e.body?.getReader();if(n){let e=new TextDecoder,r=0;for(;;){let{done:i,value:a}=await n.read();if(i)break;if(r+=a.byteLength,r>256e3)throw await n.cancel(),Error(`controls.replica.json exceeds the 256,000-byte limit.`);t+=e.decode(a,{stream:!0})}t+=e.decode()}else t=await e.text();if(new TextEncoder().encode(t).length>256e3)throw Error(`controls.replica.json exceeds the 256,000-byte limit.`);if(!(e.headers.get(`content-type`)?.startsWith(`text/html`)&&/^\s*<(?:!doctype html|html)/i.test(t)))return V(JSON.parse(t))}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var W=`replica:controls`;function G(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&U(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||U({[r.id]:r.value}))}catch{return!1}}function K(e){return C(e.declaration),JSON.parse(JSON.stringify({declaration:e.declaration,fingerprint:JSON.stringify(e.declaration),snapshot:e.getSnapshot()}))}var q=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function J(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!U(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!q.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function Y(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=q.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!U({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{J(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function X(e,t){let n=new URL(e,window.location.href),r=Y(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(J(r.scopes)))n.searchParams.set(e,t);return n.toString()}function Z(e,t,n){let r=window.history.pushState.bind(window.history),i=window.history.replaceState.bind(window.history),a=!1,o=document.readyState===`complete`||(performance.getEntriesByType?.(`navigation`)??[]).some(e=>`domContentLoadedEventStart`in e&&typeof e.domContentLoadedEventStart==`number`&&e.domContentLoadedEventStart>0),s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString();function c(){try{let e=J({...Y(s).scopes,...t()});return n(``),e}catch(e){return n(e instanceof Error?e.message:`Controls could not be saved in the URL.`),s}}function l(e){if(!a||!o)return new URL(String(e??window.location.href),window.location.href).toString();let t=new URL(X(String(e??window.location.href),c()));return t.searchParams.set(`rc`,`1`),t.toString()}function u(e,t,n){r(e,t,l(n))}function d(e,t,n){i(e,t,l(n))}window.history.pushState=u,window.history.replaceState=d;function f(t){`replicaControlsBinding`in t&&t.replicaControlsBinding===!0||(s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString(),e(s))}function p(e){if(!a||!o||e.defaultPrevented||!(e.target instanceof Element))return;let t=e.target.closest(`a[href]`);if(!(t instanceof HTMLAnchorElement)||t.hasAttribute(`download`)||t.target&&t.target!==`_self`)return;let n=new URL(t.href);n.origin===window.location.origin&&(t.href=l(n))}window.addEventListener(`popstate`,f),window.addEventListener(`click`,p,!0);function m(){if(!a||!o)return;s=c();let e=l(window.location.href);e!==window.location.href&&i(window.history.state,``,e)}function h(){o=!0,m()}return document.addEventListener(`DOMContentLoaded`,h,{once:!0}),{set(e){let t=Y(e);if(t.notice)throw Error(t.notice);s=J(t.scopes),a=!0,m()},refresh:m,current(){return new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString()},managed(){return new URLSearchParams(window.location.search).get(`rc`)===`1`},dispose(){window.history.pushState===u&&(window.history.pushState=r),window.history.replaceState===d&&(window.history.replaceState=i),window.removeEventListener(`popstate`,f),window.removeEventListener(`click`,p,!0),document.removeEventListener(`DOMContentLoaded`,h)}}}function ee(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}var te={mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function ne(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?te.controlsActionUnavailable:``)}}function re(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>ne(e,t)))}}function ie(e){let t=``,n,r,i=``,a=!1,o=new Set,s=!1,c=0,l,u,d=!1,f,p=new Set,m=new Set,h=``,g=Z(e=>{m.clear(),x(`snapshot`,`event`,void 0,e)},()=>Object.fromEntries((n?.list()??[]).filter(e=>m.has(e.declaration.scope)).map(e=>[e.declaration.scope,ee(K(e))])),e=>{h!==e&&(h=e,x(`snapshot`,`event`))});async function _(){try{if(u=await H(),a){u?.dispose();return}n=u?.runtime,r=u?.subscribe(S),await u?.settled();let e=u;e&&v()&&await new Promise(t=>{function n(){clearTimeout(i),a(),f=void 0,t()}function r(){v()||n()}let i=setTimeout(n,500),a=e.subscribe(r);f=n,r()})}catch(e){l={status:`invalid-config`,error:e instanceof Error?e.message.slice(0,1e3):`Controls definitions could not be read.`}}finally{d=!0}S()}function v(){return n?.list().some(e=>Object.values(e.getSnapshot().bindings??{}).some(e=>e.error))}function y(){let e=!!n;if(l)return{runtimeAvailable:e,scopes:[],...l};if(!n)return{runtimeAvailable:!1,status:d?`no-controls`:`missing-runtime`,scopes:[]};try{let e=n.list().filter(e=>e.mountedCount>0).map(K);return e.length>100?{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Too many active controls scopes.`}:{runtimeAvailable:!0,status:e.length?`ready`:`no-controls`,scopes:e}}catch{return{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`The Controls definitions are invalid.`}}}function b(){return{...y(),scopeErrors:[],reconnectRequired:s,...s?{error:`Reconnect controls before sending more commands.`}:{},...h?{error:`${h} Changes remain in memory and are not in the URL.`}:{}}}function x(n,r,i,o){if(a||!t)return;let s={protocol:W,version:1,type:n,epoch:t,requestId:r,sequence:++c,state:b(),...i?{error:i}:{},...o===void 0?{}:{controlQuery:o}};window.parent.postMessage(G(s)?s:{...s,state:{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Controls exceed the transport size limit.`},error:`Controls exceed the transport size limit.`},e)}function S(){for(let e of p)e();if(!d||u?.pending())return;g?.refresh();let e=JSON.stringify(b());e!==i&&(i=e,x(`snapshot`,`event`))}async function C(r){if(r.source===window.parent&&r.origin===e&&r.data&&typeof r.data==`object`&&`type`in r.data&&r.data.type===`replica:controls:status`&&`nonce`in r.data&&typeof r.data.nonce==`string`&&r.data.nonce.length<=100&&`timeoutMs`in r.data&&Number.isInteger(r.data.timeoutMs)&&typeof r.data.timeoutMs==`number`&&r.data.timeoutMs>=0&&r.data.timeoutMs<=1e4){let{nonce:t,timeoutMs:n}=r.data;function i(){return!d||u?.pending()===!0&&!b().scopes.some(({snapshot:e})=>[...Object.values(e.actions),...Object.values(e.bindings??{})].some(e=>e.busy))}i()&&n>0&&await new Promise(e=>{function t(){clearTimeout(o),p.delete(r),e()}function r(){(a||!i())&&t()}let o=setTimeout(t,n);p.add(r),r()}),a||window.parent.postMessage({type:`replica:controls:status-result`,nonce:t,value:re(b(),i(),window.location.href)},e);return}if(r.source!==window.parent||r.origin!==e||!G(r.data))return;let c=r.data;if(c.type===`hello`){t=c.epoch,o.clear(),s=!1,m.clear();let e=c.fromFrameUrl&&g?.managed();g?.set(e?g.current():c.controlQuery??``),d||await w,x(`reply`,c.requestId,void 0,e?g?.current():void 0);return}if(c.type!==`command`||c.epoch!==t||o.has(c.requestId))return;if(o.size>=2e3){s=!0,x(`reply`,c.requestId,`Reconnect controls before sending more commands.`);return}o.add(c.requestId);let l=c.command;function f(){if(a||t!==c.epoch)throw Error(`The preview reconnected. The command outcome is unknown.`)}try{if(l?.operation===`url`){g.set(l.query??``),l.scope&&n?.list().some(e=>e.declaration.scope===l.scope&&e.mountedCount>0)&&(m.add(l.scope),g.refresh()),x(`reply`,c.requestId);return}if(!l||!n||![`ready`,`no-controls`].includes(b().status))throw Error(`Controls runtime is unavailable.`);if(l.operation===`reset-all`){if(n.list().some(e=>Object.values(e.getSnapshot().actions).some(e=>e.busy)))throw Error(`Wait for pending actions before resetting controls.`);let e=n.list().filter(e=>e.mountedCount>0);if(!Array.isArray(l.contexts)||l.contexts.length!==e.length||e.some(e=>!l.contexts?.some(t=>t.scope===e.declaration.scope&&t.fingerprint===JSON.stringify(e.declaration)&&t.revision===e.getSnapshot().revision)))throw Error(`Controls changed. The stale reset was not applied.`);m.clear(),await u?.reset(void 0,f)}else{let e=n.list().find(e=>e.declaration.scope===l.scope&&e.mountedCount>0);if(!e)throw Error(`This controls scope is no longer active.`);if(l.fingerprint!==JSON.stringify(e.declaration)||l.revision!==e.getSnapshot().revision)throw Error(`Controls changed. The stale command was not applied.`);if(l.operation===`restore`){if(!U(l.values))throw Error(`Invalid saved controls.`);await u?.restore(e,l.values,f),m.add(e.declaration.scope),g?.refresh()}else if(l.operation===`reset`)m.add(e.declaration.scope),await u?.reset(e,f);else{let t=e.declaration.controls.find(e=>e.id===l.id);if(!t||!e.getSnapshot().visible[t.id])throw Error(`This control is unknown or hidden.`);if(m.add(e.declaration.scope),l.operation===`update`){let n={[t.id]:l.value};if(!U(n))throw Error(`Invalid control value.`);let r=n[t.id];if(r===void 0)throw Error(`Missing control value.`);await u?.update(e,t.id,r,f)}else if(l.operation===`action`)await e.action(t.id);else throw Error(`Unknown controls command.`)}S()}t===c.epoch&&(x(`reply`,c.requestId),u?.navigate())}catch(e){t===c.epoch&&x(`reply`,c.requestId,e instanceof Error?e.message.slice(0,300):`The controls command failed.`)}}let w=_();function T(e){C(e)}return window.addEventListener(`message`,T),()=>{a=!0,f?.();for(let e of p)e();r?.(),u?.dispose(),window.removeEventListener(`message`,T),g?.dispose()}}var Q={enabled:!0,title:`Build preview`,items:3};function $(){let e=document.querySelector(`h1`),t=document.querySelector(`p`),n=document.querySelector(`ul`);if(!e||!t||!n)throw Error(`Build controls story markup is missing.`);e.textContent=Q.title,t.hidden=!Q.enabled,n.replaceChildren(...Array.from({length:Q.items},(e,t)=>{let n=document.createElement(`li`);return n.textContent=`Item ${t+1}`,n}))}Object.assign(window,{buildPreview:{readEnabled:()=>Q.enabled,writeEnabled:e=>{Q.enabled=e,$()},readTitle:()=>Q.title,writeTitle:e=>{Q.title=e,$()},readItems:()=>Q.items,writeItems:e=>{Q.items=e,$()},add:()=>{Q.items=Math.min(8,Q.items+1),$()}}}),$(),ie(window.location.origin)})();
\ No newline at end of file
+`).slice(0,1e3))},n),dispose(){n=!0,f(),window.clearInterval(M);for(let e of[`input`,`change`,`popstate`,`hashchange`])window.removeEventListener(e,P);for(let e of t){e.release?.();for(let t of e.records.values())m(e,t)}}}}async function H(){let e=await fetch(`/controls.replica.json`,{credentials:`same-origin`,redirect:`error`});if(e.status===404||e.status===410)return;if(!e.ok)throw Error(`controls.replica.json returned HTTP ${e.status}.`);let t=``,n=e.body?.getReader();if(n){let e=new TextDecoder,r=0;for(;;){let{done:i,value:a}=await n.read();if(i)break;if(r+=a.byteLength,r>256e3)throw await n.cancel(),Error(`controls.replica.json exceeds the 256,000-byte limit.`);t+=e.decode(a,{stream:!0})}t+=e.decode()}else t=await e.text();if(new TextEncoder().encode(t).length>256e3)throw Error(`controls.replica.json exceeds the 256,000-byte limit.`);if(!(e.headers.get(`content-type`)?.startsWith(`text/html`)&&/^\s*<(?:!doctype html|html)/i.test(t)))return V(JSON.parse(t))}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var W=`replica:controls`;function G(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&U(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||U({[r.id]:r.value}))}catch{return!1}}function K(e){return C(e.declaration),JSON.parse(JSON.stringify({declaration:e.declaration,fingerprint:JSON.stringify(e.declaration),snapshot:e.getSnapshot()}))}var q=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function J(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!U(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!q.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function Y(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=q.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!U({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{J(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function X(e,t){let n=new URL(e,window.location.href),r=Y(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(J(r.scopes)))n.searchParams.set(e,t);return n.toString()}function Z(e,t,n){let r=window.history.pushState.bind(window.history),i=window.history.replaceState.bind(window.history),a=!1,o=document.readyState===`complete`||(performance.getEntriesByType?.(`navigation`)??[]).some(e=>`domContentLoadedEventStart`in e&&typeof e.domContentLoadedEventStart==`number`&&e.domContentLoadedEventStart>0),s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString();function c(){try{let e=J({...Y(s).scopes,...t()});return n(``),e}catch(e){return n(e instanceof Error?e.message:`Controls could not be saved in the URL.`),s}}function l(e){if(!a||!o)return new URL(String(e??window.location.href),window.location.href).toString();let t=new URL(X(String(e??window.location.href),c()));return t.searchParams.set(`rc`,`1`),t.toString()}function u(e,t,n){r(e,t,l(n))}function d(e,t,n){i(e,t,l(n))}window.history.pushState=u,window.history.replaceState=d;function f(t){`replicaControlsBinding`in t&&t.replicaControlsBinding===!0||(s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString(),e(s))}function p(e){if(!a||!o||e.defaultPrevented||!(e.target instanceof Element))return;let t=e.target.closest(`a[href]`);if(!(t instanceof HTMLAnchorElement)||t.hasAttribute(`download`)||t.target&&t.target!==`_self`)return;let n=new URL(t.href);n.origin===window.location.origin&&(t.href=l(n))}window.addEventListener(`popstate`,f),window.addEventListener(`click`,p,!0);function m(){if(!a||!o)return;s=c();let e=l(window.location.href);e!==window.location.href&&i(window.history.state,``,e)}function h(){o=!0,m()}return document.addEventListener(`DOMContentLoaded`,h,{once:!0}),{set(e){let t=Y(e);if(t.notice)throw Error(t.notice);s=J(t.scopes),a=!0,m()},refresh:m,current(){return new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString()},managed(){return new URLSearchParams(window.location.search).get(`rc`)===`1`},dispose(){window.history.pushState===u&&(window.history.pushState=r),window.history.replaceState===d&&(window.history.replaceState=i),window.removeEventListener(`popstate`,f),window.removeEventListener(`click`,p,!0),document.removeEventListener(`DOMContentLoaded`,h)}}}function ee(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}var te={localCommentsSaved:`Comments stay on this device until a Build with matching content is published and the canvas syncs them to Hub.`,commentPagesExceeded:`Too many review comment pages.`,commentPreparationFailed:`Hub could not prepare this comment.`,commentRefreshFailed:e=>`The comment was saved, but Hub could not be refreshed: ${e}`,commentLiveUpdatesPaused:`Live updates paused; checking every 30 seconds.`,mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function ne(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?te.controlsActionUnavailable:``)}}function re(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>ne(e,t)))}}function ie(e){let t=``,n,r,i=``,a=!1,o=new Set,s=!1,c=0,l,u,d=!1,f,p=new Set,m=new Set,h=``,g=Z(e=>{m.clear(),x(`snapshot`,`event`,void 0,e)},()=>Object.fromEntries((n?.list()??[]).filter(e=>m.has(e.declaration.scope)).map(e=>[e.declaration.scope,ee(K(e))])),e=>{h!==e&&(h=e,x(`snapshot`,`event`))});async function _(){try{if(u=await H(),a){u?.dispose();return}n=u?.runtime,r=u?.subscribe(S),await u?.settled();let e=u;e&&v()&&await new Promise(t=>{function n(){clearTimeout(i),a(),f=void 0,t()}function r(){v()||n()}let i=setTimeout(n,500),a=e.subscribe(r);f=n,r()})}catch(e){l={status:`invalid-config`,error:e instanceof Error?e.message.slice(0,1e3):`Controls definitions could not be read.`}}finally{d=!0}S()}function v(){return n?.list().some(e=>Object.values(e.getSnapshot().bindings??{}).some(e=>e.error))}function y(){let e=!!n;if(l)return{runtimeAvailable:e,scopes:[],...l};if(!n)return{runtimeAvailable:!1,status:d?`no-controls`:`missing-runtime`,scopes:[]};try{let e=n.list().filter(e=>e.mountedCount>0).map(K);return e.length>100?{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Too many active controls scopes.`}:{runtimeAvailable:!0,status:e.length?`ready`:`no-controls`,scopes:e}}catch{return{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`The Controls definitions are invalid.`}}}function b(){return{...y(),scopeErrors:[],reconnectRequired:s,...s?{error:`Reconnect controls before sending more commands.`}:{},...h?{error:`${h} Changes remain in memory and are not in the URL.`}:{}}}function x(n,r,i,o){if(a||!t)return;let s={protocol:W,version:1,type:n,epoch:t,requestId:r,sequence:++c,state:b(),...i?{error:i}:{},...o===void 0?{}:{controlQuery:o}};window.parent.postMessage(G(s)?s:{...s,state:{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Controls exceed the transport size limit.`},error:`Controls exceed the transport size limit.`},e)}function S(){for(let e of p)e();if(!d||u?.pending())return;g?.refresh();let e=JSON.stringify(b());e!==i&&(i=e,x(`snapshot`,`event`))}async function C(r){if(r.source===window.parent&&r.origin===e&&r.data&&typeof r.data==`object`&&`type`in r.data&&r.data.type===`replica:controls:status`&&`nonce`in r.data&&typeof r.data.nonce==`string`&&r.data.nonce.length<=100&&`timeoutMs`in r.data&&Number.isInteger(r.data.timeoutMs)&&typeof r.data.timeoutMs==`number`&&r.data.timeoutMs>=0&&r.data.timeoutMs<=1e4){let{nonce:t,timeoutMs:n}=r.data;function i(){return!d||u?.pending()===!0&&!b().scopes.some(({snapshot:e})=>[...Object.values(e.actions),...Object.values(e.bindings??{})].some(e=>e.busy))}i()&&n>0&&await new Promise(e=>{function t(){clearTimeout(o),p.delete(r),e()}function r(){(a||!i())&&t()}let o=setTimeout(t,n);p.add(r),r()}),a||window.parent.postMessage({type:`replica:controls:status-result`,nonce:t,value:re(b(),i(),window.location.href)},e);return}if(r.source!==window.parent||r.origin!==e||!G(r.data))return;let c=r.data;if(c.type===`hello`){t=c.epoch,o.clear(),s=!1,m.clear();let e=c.fromFrameUrl&&g?.managed();g?.set(e?g.current():c.controlQuery??``),d||await w,x(`reply`,c.requestId,void 0,e?g?.current():void 0);return}if(c.type!==`command`||c.epoch!==t||o.has(c.requestId))return;if(o.size>=2e3){s=!0,x(`reply`,c.requestId,`Reconnect controls before sending more commands.`);return}o.add(c.requestId);let l=c.command;function f(){if(a||t!==c.epoch)throw Error(`The preview reconnected. The command outcome is unknown.`)}try{if(l?.operation===`url`){g.set(l.query??``),l.scope&&n?.list().some(e=>e.declaration.scope===l.scope&&e.mountedCount>0)&&(m.add(l.scope),g.refresh()),x(`reply`,c.requestId);return}if(!l||!n||![`ready`,`no-controls`].includes(b().status))throw Error(`Controls runtime is unavailable.`);if(l.operation===`reset-all`){if(n.list().some(e=>Object.values(e.getSnapshot().actions).some(e=>e.busy)))throw Error(`Wait for pending actions before resetting controls.`);let e=n.list().filter(e=>e.mountedCount>0);if(!Array.isArray(l.contexts)||l.contexts.length!==e.length||e.some(e=>!l.contexts?.some(t=>t.scope===e.declaration.scope&&t.fingerprint===JSON.stringify(e.declaration)&&t.revision===e.getSnapshot().revision)))throw Error(`Controls changed. The stale reset was not applied.`);m.clear(),await u?.reset(void 0,f)}else{let e=n.list().find(e=>e.declaration.scope===l.scope&&e.mountedCount>0);if(!e)throw Error(`This controls scope is no longer active.`);if(l.fingerprint!==JSON.stringify(e.declaration)||l.revision!==e.getSnapshot().revision)throw Error(`Controls changed. The stale command was not applied.`);if(l.operation===`restore`){if(!U(l.values))throw Error(`Invalid saved controls.`);await u?.restore(e,l.values,f),m.add(e.declaration.scope),g?.refresh()}else if(l.operation===`reset`)m.add(e.declaration.scope),await u?.reset(e,f);else{let t=e.declaration.controls.find(e=>e.id===l.id);if(!t||!e.getSnapshot().visible[t.id])throw Error(`This control is unknown or hidden.`);if(m.add(e.declaration.scope),l.operation===`update`){let n={[t.id]:l.value};if(!U(n))throw Error(`Invalid control value.`);let r=n[t.id];if(r===void 0)throw Error(`Missing control value.`);await u?.update(e,t.id,r,f)}else if(l.operation===`action`)await e.action(t.id);else throw Error(`Unknown controls command.`)}S()}t===c.epoch&&(x(`reply`,c.requestId),u?.navigate())}catch(e){t===c.epoch&&x(`reply`,c.requestId,e instanceof Error?e.message.slice(0,300):`The controls command failed.`)}}let w=_();function T(e){C(e)}return window.addEventListener(`message`,T),()=>{a=!0,f?.();for(let e of p)e();r?.(),u?.dispose(),window.removeEventListener(`message`,T),g?.dispose()}}var Q={enabled:!0,title:`Build preview`,items:3};function $(){let e=document.querySelector(`h1`),t=document.querySelector(`p`),n=document.querySelector(`ul`);if(!e||!t||!n)throw Error(`Build controls story markup is missing.`);e.textContent=Q.title,t.hidden=!Q.enabled,n.replaceChildren(...Array.from({length:Q.items},(e,t)=>{let n=document.createElement(`li`);return n.textContent=`Item ${t+1}`,n}))}Object.assign(window,{buildPreview:{readEnabled:()=>Q.enabled,writeEnabled:e=>{Q.enabled=e,$()},readTitle:()=>Q.title,writeTitle:e=>{Q.title=e,$()},readItems:()=>Q.items,writeItems:e=>{Q.items=e,$()},add:()=>{Q.items=Math.min(8,Q.items+1),$()}}}),$(),ie(window.location.origin)})();
\ No newline at end of file
diff --git a/hub/app/javascript/application/prototype-canvas/index.tsx b/hub/app/javascript/application/prototype-canvas/index.tsx
index 94166f58..82224768 100644
--- a/hub/app/javascript/application/prototype-canvas/index.tsx
+++ b/hub/app/javascript/application/prototype-canvas/index.tsx
@@ -5,7 +5,7 @@ import { AppDialogs } from "@features/prototype-canvas-dialogs"
import { BrowserBar } from "@components/prototype-browser-bar"
import { ControlsPanel } from "@components/prototype-controls-panel"
import type { ControlsPanelLayout } from "@components/prototype-controls-panel/types"
-import { HubPanel } from "@features/prototype-canvas-hub-panel"
+import { PrototypeCanvasHubPanel } from "@features/prototype-canvas-hub-panel"
import { copy } from "@utils/prototype-canvas/en"
import { request } from "@utils/prototype-canvas-request"
import { resolveShareReadiness } from "@utils/resolve-prototype-share-readiness"
@@ -234,7 +234,7 @@ export function App({ config }: Props) {
}}
/>
- ()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=((n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n)))(o((e=>{var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),n=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),i=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=r();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t}));e.validateShape=P;var a={type:`object`,additionalProperties:!1,required:[`version`,`scope`,`controls`],properties:{$schema:{type:`string`},version:{const:1},scope:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},role:{enum:[`shared`,`page`]},container:{$ref:`#/$defs/selector`},panel:{type:`object`,additionalProperties:!1,required:[`width`],properties:{width:{type:`integer`,minimum:160,maximum:4096}}},groups:{type:`array`,maxItems:100,items:{type:`object`,additionalProperties:!1,required:[`id`,`label`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},when:{$ref:`#/$defs/condition`}}}},controls:{type:`array`,maxItems:500,items:{oneOf:[{$ref:`#/$defs/boolean`},{$ref:`#/$defs/number`},{$ref:`#/$defs/slider`},{$ref:`#/$defs/choice`},{$ref:`#/$defs/checkboxGroup`},{$ref:`#/$defs/text`},{$ref:`#/$defs/color`},{$ref:`#/$defs/button`}]}}}},o=Object.prototype.hasOwnProperty,s=n().default,c=RegExp(`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`,`u`),l={type:[`string`,`number`,`boolean`]},u=i().default,d={validate:f};function f(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0,s=o,p=!1,m=null,h=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.equals===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`equals`},message:`must have required property 'equals'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`equals`){let e={instancePath:t,schemaPath:`#/oneOf/0/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.equals!==void 0){let n=e.equals;if(typeof n!=`string`&&!(typeof n==`number`&&isFinite(n))&&typeof n!=`boolean`){let e={instancePath:t+`/equals`,schemaPath:`#/$defs/scalar/type`,keyword:`type`,params:{type:l.type},message:`must be string,number,boolean`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=h===o;g&&(p=!0,m=0);let _=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.in===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`in`},message:`must have required property 'in'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`in`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.in!==void 0){let n=e.in;if(Array.isArray(n)){if(n.length>20){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/maxItems`,keyword:`maxItems`,params:{limit:20},message:`must NOT have more than 20 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r1){outer0:for(;r--;)for(i=r;i--;)if(u(n[r],n[i])){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[e]:a.push(e),o++;break outer0}}}else{let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=_===o;if(g&&p)p=!1,m=[m,1];else{g&&(p=!0,m=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.includes===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`includes`},message:`must have required property 'includes'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`includes`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.includes!==void 0&&typeof e.includes!=`string`){let e={instancePath:t+`/includes`,schemaPath:`#/oneOf/2/properties/includes/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=n===o;if(g&&p)p=!1,m=[m,2];else{g&&(p=!0,m=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.all===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`all`},message:`must have required property 'all'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`all`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.all!==void 0){let n=e.all;if(Array.isArray(n)){if(n.length>10){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r10){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=d===o;f&&(l=!0,u=0);let v=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.selector===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`selector`},message:`must have required property 'selector'`};a===null?a=[e]:a.push(e),o++}if(e.property===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`property`},message:`must have required property 'property'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`selector`&&n!==`property`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`style`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/1/properties/type/const`,keyword:`const`,params:{allowedValue:`style`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.selector!==void 0){let n=e.selector;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.property!==void 0){let n=e.property;if(typeof n==`string`){if(s(n)>100){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/maxLength`,keyword:`maxLength`,params:{limit:100},message:`must NOT have more than 100 characters`};a===null?a=[e]:a.push(e),o++}if(!m.test(n)){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/pattern`,keyword:`pattern`,params:{pattern:`^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$`},message:`must match pattern "^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=v===o;if(f&&l)l=!1,u=[u,1];else{f&&(l=!0,u=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.key===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`key`},message:`must have required property 'key'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`key`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`query`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/2/properties/type/const`,keyword:`const`,params:{allowedValue:`query`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.key!==void 0){let n=e.key;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/2/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[2].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,2];else{f&&(l=!0,u=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`hash`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/3/properties/type/const`,keyword:`const`,params:{allowedValue:`hash`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/3/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[3].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/3/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,3];else{f&&(l=!0,u=3);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.object===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`object`},message:`must have required property 'object'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`object`&&n!==`read`&&n!==`write`&&n!==`action`&&n!==`subscribe`&&n!==`pollMs`){let e={instancePath:t,schemaPath:`#/oneOf/4/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`api`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/4/properties/type/const`,keyword:`const`,params:{allowedValue:`api`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.object!==void 0){let n=e.object;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(!h.test(n)){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$`},message:`must match pattern "^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.read!==void 0){let n=e.read;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.write!==void 0){let n=e.write;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.action!==void 0){let n=e.action;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.subscribe!==void 0){let n=e.subscribe;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.pollMs!==void 0){let n=e.pollMs;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),o++}if(typeof n==`number`&&isFinite(n)){if(n>6e4||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:6e4},message:`must be <= 60000`};a===null?a=[e]:a.push(e),o++}if(n<100||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:100},message:`must be >= 100`};a===null?a=[e]:a.push(e),o++}}}}else{let e={instancePath:t,schemaPath:`#/oneOf/4/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;f&&l?(l=!1,u=[u,4]):f&&(l=!0,u=4)}}}if(l)o=c,a!==null&&(c?a.length=c:a=null);else{let e={instancePath:t,schemaPath:`#/oneOf`,keyword:`oneOf`,params:{passingSchemas:u},message:`must match exactly one schema in oneOf`};a===null?a=[e]:a.push(e),o++}return _.errors=a,o===0}function v(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return v.errors=a,o===0}var y={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`number`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function b(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return b.errors=a,l===0}var x={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`slider`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function S(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return S.errors=a,l===0}var C={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`options`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`select`,`radio`,`segmented`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},options:{$ref:`#/$defs/options`},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function w(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return w.errors=a,o===0}function T(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return T.errors=a,o===0}var E={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`text`,`textarea`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},minLength:{type:`integer`,minimum:0},maxLength:{type:`integer`,minimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function D(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return D.errors=a,l===0}var O=RegExp(`^#[0-9a-fA-F]{6}$`,`u`);function k(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return k.errors=a,o===0}function A(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return A.errors=a,o===0}function j(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let l=null,u=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.version===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`version`},message:`must have required property 'version'`};l===null?l=[e]:l.push(e),u++}if(e.scope===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`scope`},message:`must have required property 'scope'`};l===null?l=[e]:l.push(e),u++}if(e.controls===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`controls`},message:`must have required property 'controls'`};l===null?l=[e]:l.push(e),u++}for(let n in e)if(!o.call(a.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};l===null?l=[e]:l.push(e),u++}if(e.$schema!==void 0&&typeof e.$schema!=`string`){let e={instancePath:t+`/$schema`,schemaPath:`#/properties/%24schema/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}if(e.version!==void 0&&e.version!==1){let e={instancePath:t+`/version`,schemaPath:`#/properties/version/const`,keyword:`const`,params:{allowedValue:1},message:`must be equal to constant`};l===null?l=[e]:l.push(e),u++}if(e.scope!==void 0){let n=e.scope;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return L.errors=a,o===0}e.number=R;function R(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return R.errors=a,l===0}e.slider=z;function z(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return z.errors=a,l===0}e.choice=B;function B(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return B.errors=a,o===0}e.checkboxGroup=V;function V(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return V.errors=a,o===0}e.text=H;function H(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return H.errors=a,l===0}e.color=U;function U(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return U.errors=a,o===0}e.button=W;function W(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return W.errors=a,o===0}}))(),1);function l(e){if(e&&typeof e==`object`){for(let t of Object.values(e))l(t);Object.freeze(e)}return e}function u(e){return Array.isArray(e)?`[${e.map(u).join(`,`)}]`:e&&typeof e==`object`?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${u(e[t])}`).join(`,`)}}`:JSON.stringify(e)}function d(e,t){if(!e)return!0;if(e.all)return e.all.every(e=>d(e,t));if(e.any)return e.any.some(e=>d(e,t));let n=t[e.control];return`equals`in e?n===e.equals:`in`in e?e.in.includes(n):Array.isArray(n)&&n.includes(e.includes)}var{validateDocumentShape:f,validateDeclaration:p}=c.default,m={boolean:`boolean`,number:`number`,slider:`slider`,select:`choice`,radio:`choice`,segmented:`choice`,checkboxGroup:`checkboxGroup`,text:`text`,textarea:`text`,color:`color`,button:`button`};function h(e){let t=[...p.errors].filter(e=>!/^\/controls\/\d+(?:\/|$)/.test(e.instancePath)).map(e=>({...e}));return Array.isArray(e?.controls)&&e.controls.forEach((e,n)=>{let r=Object.hasOwn(m,e?.type)?m[e.type]:void 0,i=r&&c.default[r];i?i(e)||t.push(...i.errors.map(e=>({...e,instancePath:`/controls/${n}${e.instancePath}`}))):t.push({instancePath:`/controls/${n}/type`,message:`must name a supported control type`})}),t.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params}))}var g=class extends Error{constructor(e){super(`Invalid controls.replica.json:\n${e.map(e=>` ${e.path||`/`}: ${e.message}`).join(`
`)}`),this.name=`ControlsValidationError`,this.issues=e}};function _(e,t){switch(e.type){case`boolean`:return typeof t==`boolean`?null:`must be a boolean`;case`number`:case`slider`:{if(typeof t!=`number`||!Number.isFinite(t))return`must be a finite number`;if(e.min!==void 0&&t= min`;if(e.max!==void 0&&t>e.max)return`must be <= max`;let n=(t-e.min)/(e.step??1);return!Number.isFinite(n)||Math.abs(n-Math.round(n))>1e-8?`must align with step (anchored at min)`:null}case`select`:case`radio`:case`segmented`:return e.options.includes(t)?null:`must be a declared option`;case`checkboxGroup`:return Array.isArray(t)&&new Set(t).size===t.length&&t.every(t=>e.options.includes(t))?null:`must be unique declared options`;case`text`:case`textarea`:return typeof t==`string`?e.minLength!==void 0&&[...t].lengthe.maxLength?`longer than maxLength`:null:`must be a string`;case`color`:return typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?null:`must be a six-digit hex color`;default:return`button controls have no value`}}function v(e){return e?e.control?[e.control]:(e.all??e.any).flatMap(v):[]}function y(e){let t=new Map((e.groups??[]).map(e=>[e.id,e])),n=new Map(e.controls.map(e=>[e.id,e])),r=new Set,i=new Set,a=[];function o(e){if(r.has(e))return;if(i.has(e))throw new g([{path:`/controls/${e}/when`,message:`conditional dependency cycle (including groups)`}]);i.add(e);let s=n.get(e);for(let e of[...v(s.when),...v(t.get(s.group)?.when)])o(e);i.delete(e),r.add(e),a.push(e)}for(let e of n.keys())o(e);return a}function b(e){let t=new Set;function n(e,r=0){if(r>24)throw new g([{path:`/`,message:`document nesting exceeds 24`}]);if(typeof e==`number`&&!Number.isFinite(e))throw new g([{path:`/`,message:`numbers must be finite`}]);if(![`string`,`number`,`boolean`,`object`].includes(typeof e))throw new g([{path:`/`,message:`must contain only JSON values`}]);if(e&&typeof e==`object`){if(!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new g([{path:`/`,message:`must contain only JSON objects`}]);if(t.has(e))throw new g([{path:`/`,message:`must be an acyclic JSON document`}]);t.add(e);for(let t of Object.values(e))n(t,r+1);t.delete(e)}}n(e)}function x(e){b(e);let t=e&&typeof e==`object`&&Object.hasOwn(e,`sets`)?e.sets:[e];if(!e||typeof e!=`object`||!Object.hasOwn(e,`sets`))return C(e),S(e),e;if(!f(e))throw new g(f.errors.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params})));let n=new Set;return t.forEach((e,t)=>{try{C(e),S(e)}catch(e){throw e instanceof g?new g(e.issues.map(e=>({...e,path:`/sets/${t}${e.path}`}))):e}if(n.has(e.scope))throw new g([{path:`/sets/${t}/scope`,message:`duplicate scope ${e.scope}`}]);n.add(e.scope)}),e}function S(e){let t=[];for(let[n,r]of e.controls.entries()){let e=r.binding,i=`/controls/${n}/binding`;e?((r.type===`button`&&![`button`,`api`].includes(e.type)||r.type!==`button`&&e.type===`button`)&&t.push({path:i,message:`binding does not match the control type`}),e.type===`query`&&(e.key===`rc`||e.key.startsWith(`rc.`))&&t.push({path:i,message:`rc and rc.* are reserved for control settings`}),e.type===`api`&&(([`window`,`globalThis`,`self`,`parent`,`top`,`document`,`location`,`history`,`navigator`].includes(e.object.split(`.`)[0])||[e.read,e.write,e.action,e.subscribe].some(e=>[`eval`,`Function`].includes(e)))&&t.push({path:i,message:`API bindings must name an app-owned object and ordinary methods`}),e.object.split(`.`).some(e=>[`constructor`,`prototype`,`__proto__`].includes(e))&&t.push({path:i,message:`API object must name the app's own exposed object`}),r.type===`button`?(!e.action||e.read||e.write||e.subscribe||e.pollMs)&&t.push({path:i,message:`API buttons require only object and action`}):(!e.read||!e.write||e.action||!!e.subscribe==!!e.pollMs)&&t.push({path:i,message:`API values require read, write, and either subscribe or pollMs`}))):t.push({path:i,message:`each control requires a binding`})}if(t.length)throw new g(t)}function C(e){if(b(e),!p(e))throw new g(h(e));let t=[];function n(e,n){t.push({path:e,message:n})}let r=new Set,i=new Map((e.groups??[]).map(e=>[e.id,e])),a=new Map(e.controls.map(e=>[e.id,e]));for(let[t,i]of[[`groups`,e.groups??[]],[`controls`,e.controls]])i.forEach((e,i)=>{r.has(e.id)&&n(`/${t}/${i}/id`,`duplicate ID ${e.id}`),r.add(e.id)});function o(e,t,r=0){if(!e)return;if(r>4){n(t,`conditions support at most five levels`);return}if(e.all||e.any){let n=e.all?`all`:`any`;e[n].forEach((e,i)=>o(e,`${t}/${n}/${i}`,r+1));return}let i=a.get(e.control);if(!i||i.type===`button`)n(t,`condition must reference a value control`);else if(`includes`in e)(i.type!==`checkboxGroup`||!i.options.includes(e.includes))&&n(t,`includes requires a declared checkboxGroup option`);else if(i.type===`checkboxGroup`)n(t,`checkboxGroup conditions must use includes`);else for(let r of`in`in e?e.in:[e.equals]){let e=_(i,r);e&&n(t,`invalid condition for ${i.id}: ${e}`)}}if(e.controls.forEach((e,t)=>{let r=`/controls/${t}`;if(e.group&&!i.has(e.group)&&n(`${r}/group`,`unknown group`),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&n(r,`min must not exceed max`),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&n(r,`minLength must not exceed maxLength`),e.type===`segmented`&&e.options.length>3&&n(`${r}/options`,`segmented supports at most three options`),e.type!==`button`){let t=_(e,e.default);t&&n(`${r}/default`,t)}o(e.when,`${r}/when`)}),(e.groups??[]).forEach((e,t)=>o(e.when,`/groups/${t}/when`)),t.length)throw new g(t);return y(e),e}var w=Symbol.for(`replica.controls.injected.runtime`),T=new WeakMap;function E(){let e=globalThis[w];if(e&&e.version!==2)throw Error(`Replica controls runtime version mismatch; reload the page`);if(!e){let e=new Map,t=new Set,n=Object.freeze({version:2,create:e=>D(e),list:()=>Object.freeze([...e.values()].map(e=>e.controller)),subscribe(e){return t.add(e),()=>t.delete(e)}});T.set(n,{scopes:e,notify:()=>{for(let e of[...t])e()}}),globalThis[w]=n}return globalThis[w]}function D(e){C(e);let t=l(structuredClone(e)),n=u(t),r=E(),i=r.list().find(e=>e.declaration.scope===t.scope);if(i){if(u(i.declaration)!==n)throw Error(`Conflicting controls declaration for scope "${t.scope}"; reload after schema changes`);return i}let a=T.get(r);if(!a)return r.create(e);let o=new Map(t.controls.map(e=>[e.id,e])),s=new Map((t.groups??[]).map(e=>[e.id,e])),c=y(t),f=new Set,p=new Map,m=new Set,h={},g=0,v=!1,b=!1,x;function S(e){for(let t of[...p.values()].reverse()){let n=t();if(Object.hasOwn(n,e)&&typeof n[e]==`function`)return n}}function w(e){let n={};for(let t of c){let r=o.get(t);n[t]=d(r.when,e)&&d(s.get(r.group)?.when,e),!n[t]&&r.type!==`button`&&(e[t]=structuredClone(r.default))}return l({values:e,visible:n,groups:Object.fromEntries([...s].map(([t,n])=>[t,d(n.when,e)])),actions:Object.fromEntries(t.controls.filter(e=>e.type===`button`).map(e=>[e.id,{available:!!S(e.id)&&!h[e.id]?.error,busy:m.has(e.id)}])),...Object.keys(h).length?{bindings:structuredClone(h)}:{}})}function D(){return Object.fromEntries(t.controls.filter(e=>e.type!==`button`).map(e=>[e.id,structuredClone(e.default)]))}x=l({...w(D()),revision:g});function O(e){let t=w(e),n={values:x.values,visible:x.visible,groups:x.groups,actions:x.actions,...x.bindings?{bindings:x.bindings}:{}};if(u(t)!==u(n)&&(x=l({...t,revision:++g}),b=!0,!v)){v=!0;try{for(;b;){b=!1;for(let e of[...f])e();a.notify()}}finally{v=!1}}}function k(e){let t=o.get(e);if(!t)throw Error(`Unknown control "${e}"`);if(!x.visible[e])throw Error(`Control "${e}" is hidden`);return t}let A=Object.freeze({declaration:t,getSnapshot:()=>x,subscribe(e){return f.add(e),()=>f.delete(e)},update(e,t){let n=_(k(e),t);if(n)throw Error(`Control "${e}": ${n}`);O({...x.values,[e]:structuredClone(t)})},restore(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Controls restore requires an object`);let t={...x.values};for(let[n,r]of Object.entries(e)){let e=o.get(n);if(!e)throw Error(`Unknown control "${n}"`);let i=_(e,r);if(i)throw Error(`Control "${n}": ${i}`);t[n]=structuredClone(r)}O(t)},refreshActions(){O({...x.values})},bindingStatus(e,t,n=!1,r=!t){if(!o.has(e))throw Error(`Unknown control "${e}"`);h[e]={error:t.slice(0,500),busy:n,available:r},O({...x.values})},reset(e){if(e===void 0)return O(D());let t=k(e);if(t.type===`button`)throw Error(`Buttons cannot be reset`);O({...x.values,[e]:structuredClone(t.default)})},async action(e){if(k(e).type!==`button`)throw Error(`Control "${e}" is not a button`);let t=S(e);if(!t)throw Error(`No mounted action handler for "${e}"`);if(m.has(e))throw Error(`Action "${e}" is busy`);m.add(e),O({...x.values});try{return await t[e]()}finally{m.delete(e),O({...x.values})}},mount(e=()=>({})){let t=Symbol();p.set(t,e);try{O({...x.values}),a.notify()}catch(e){throw p.delete(t),O({...x.values}),a.notify(),e}let n=!0;return()=>{n&&(n=!1,p.delete(t),O({...x.values}),a.notify())}},get mountedCount(){return p.size}});return a.scopes.set(t.scope,Object.freeze({canonical:n,controller:A})),a.notify(),A}function O(e,t=!1){if(!(e instanceof HTMLElement)||!e.isConnected)return`The binding target is missing or stale.`;let n=e.getBoundingClientRect();for(let t=e;t;t=t.parentElement){let e=window.getComputedStyle(t);if(t.hasAttribute(`hidden`)||t.hasAttribute(`inert`)||t.getAttribute(`aria-hidden`)===`true`||t.getAttribute(`aria-disabled`)===`true`||e.visibility===`hidden`||e.visibility===`collapse`||e.display===`none`||Number(e.opacity||1)===0)return`The binding target is hidden or disabled.`}if(e.hasAttribute(`data-replica-canvas-bridge`)||e.matches(`:disabled`)||!n.width||!n.height)return`The binding target is hidden or disabled.`;if(!t)return``;let r=document.elementFromPoint(n.left+n.width/2,n.top+n.height/2);if(!r||r!==e&&!e.contains(r))return`The binding target is blocked by another element.`;let i=e.closest(`button, input, select, textarea, [role="button"], [role="link"], a`),a=e.closest(`form`)||(e instanceof HTMLButtonElement||e instanceof HTMLInputElement?e.form:null);if(i!==e||a)return`The binding target is not a safe standalone control.`;let o=e.closest(`a`);if(o){let e=o.getAttribute(`href`),t;try{t=new URL(e||``,window.location.href)}catch{return`The binding target has an invalid link URL.`}if(!e||![`http:`,`https:`].includes(t.protocol)||t.origin!==window.location.origin||t.username||t.password||o.hasAttribute(`download`)||o.hasAttribute(`target`)&&o.getAttribute(`target`)!==`_self`)return`The binding target leaves the prototype or downloads a file.`}return``}function k(e,t){return JSON.stringify(e)===JSON.stringify(t)}function A(){let e=new URL(window.location.href);for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);return e.href}function j(e){let t=document.querySelectorAll(e);if(t.length!==1)throw Error(t.length?`The binding target is ambiguous.`:`The binding target is missing.`);return t[0]}function M(e){let t=window;for(let n of e.split(`.`)){if(!t||!Object.hasOwn(t,n))throw Error(`The app API "${e}" is unavailable.`);t=t[n]}if(!t||typeof t!=`object`&&typeof t!=`function`)throw Error(`The app API "${e}" is not an object.`);if([window,window.document,window.location,window.history,window.navigator].includes(t))throw Error(`API bindings must use an app-owned object, not a browser API.`);return t}function N(e){let t=e.binding;if(t.type===`api`){let e=M(t.object);for(let n of[t.read,t.write,t.action,t.subscribe].filter(Boolean))if(!Object.hasOwn(e,n)||typeof e[n]!=`function`)throw Error(`The app API method "${n}" is unavailable.`);return e}if(t.type===`query`||t.type===`hash`)return window;let n=j(t.selector),r=O(n,t.type===`button`);if(r)throw Error(r);if(t.type===`field`){if(!(n instanceof HTMLInputElement||n instanceof HTMLSelectElement||n instanceof HTMLTextAreaElement)||n instanceof HTMLInputElement&&[`button`,`submit`,`reset`,`image`,`file`,`password`,`hidden`].includes(n.type))throw Error(`The binding requires a supported native form field.`);if(e.type===`boolean`&&!(n instanceof HTMLInputElement&&n.type===`checkbox`))throw Error(`A boolean field binding requires a checkbox.`);if(e.type===`checkboxGroup`&&!(n instanceof HTMLSelectElement&&n.multiple))throw Error(`A checkboxGroup field binding requires a multiple select.`);if(n.readOnly)throw Error(`The binding target is read-only.`)}if(t.type===`style`&&e.type===`checkboxGroup`)throw Error(`Style bindings require a scalar control.`);return n}function P(e,t){if(e.type===`boolean`)return t===`true`||t!==`false`&&t;if(e.type===`number`||e.type===`slider`)return t.trim()===``?NaN:Number(t);if(e.type===`checkboxGroup`)return JSON.parse(t);if(e.type===`color`&&/^rgb\(/.test(t)){let e=t.match(/\d+/g);if(e?.length===3)return`#${e.map(e=>Number(e).toString(16).padStart(2,`0`)).join(``)}`}return t}function F(e){return Array.isArray(e)?JSON.stringify(e):String(e)}function I(e,t){let n=e.binding;if(n.type===`api`)return t[n.read]();if(n.type===`field`)return e.type===`boolean`?t.checked:e.type===`checkboxGroup`?[...t.selectedOptions].map(e=>e.value):P(e,t.value);if(n.type===`style`)return P(e,window.getComputedStyle(t).getPropertyValue(n.property).trim());let r=new URL(window.location.href),i=n.type===`query`?r.searchParams.get(n.key):decodeURIComponent(r.hash.slice(1));return i===null?structuredClone(e.default):P(e,i)}function L(e){let t=typeof e==`string`?e:e?.message;return Error(typeof t==`string`&&t?t:`The app binding failed without an error message.`)}async function R(e,t=5e3){let n;try{return await Promise.race([Promise.resolve().then(e),new Promise((e,r)=>{n=window.setTimeout(()=>r(Error(`The app API timed out. Its outcome is unknown.`)),t)})])}catch(e){throw L(e)}finally{window.clearTimeout(n)}}function z(e,t,n){let r=e instanceof HTMLInputElement?HTMLInputElement.prototype:e instanceof HTMLSelectElement?HTMLSelectElement.prototype:HTMLTextAreaElement.prototype;Object.getOwnPropertyDescriptor(r,t).set.call(e,n)}async function B(e,t,n){let r=e.binding;if(r.type===`api`){await R(()=>t[r.write](structuredClone(n)));return}if(r.type===`field`){if(t instanceof HTMLSelectElement)for(let e of Array.isArray(n)?n:[F(n)]){let n=[...t.options].filter(t=>t.value===e);if(n.length!==1||n[0].disabled||n[0].closest(`optgroup[disabled], [hidden], [inert]`))throw Error(`The native option is missing, ambiguous, hidden or disabled.`)}if(e.type===`checkboxGroup`)for(let e of t.options)e.selected=n.includes(e.value);else e.type===`boolean`?t.checked!==n&&t.click():z(t,`value`,F(n));t.dispatchEvent(new Event(`input`,{bubbles:!0})),t.dispatchEvent(new Event(`change`,{bubbles:!0}));return}if(r.type===`style`){t.style.setProperty(r.property,F(n));return}let i=new URL(window.location.href);if(r.type===`query`?i.searchParams.set(r.key,F(n)):i.hash=`#${F(n).replace(/%/g,`%25`)}`,i.href===window.location.href)return;if(i.origin!==window.location.origin)throw Error(`URL bindings cannot leave the prototype.`);if(r.mode===`navigate`)return i;window.history.replaceState(window.history.state,``,i);let a=new Event(r.type===`hash`?`hashchange`:`popstate`);Object.defineProperty(a,"replicaControlsBinding",{value:!0}),window.dispatchEvent(a)}function V(e){x(e);let t=(e.sets??[e]).map(e=>({controller:D(e),release:void 0,records:new Map(e.controls.map(e=>[e.id,{control:e,object:void 0,cleanup:void 0,initialized:!1,lastRead:0,reading:!1}]))})),n=!1,r=0,i=Promise.resolve(),a=Promise.resolve(),o=!1,s=!1,c,l=new Set,u=``;function d(){let e=JSON.stringify(t.map(({controller:e})=>[e.declaration.scope,e.mountedCount,e.getSnapshot().revision]));if(e!==u){u=e;for(let e of l)e()}}let f=E().subscribe(()=>{!s&&!r&&d()});function p(e){if(!e.controller.declaration.container)return!0;let t=document.querySelectorAll(e.controller.declaration.container);if(t.length>1)throw Error(`The page container is ambiguous.`);return t.length===1&&!O(t[0])}function m(e,t){let n=t.cleanup;t.cleanup=void 0,t.object=void 0,t.initialized=!1;try{n?.()}catch(n){let r=Error(`API cleanup failed: ${L(n).message}`);return e.controller.bindingStatus(t.control.id,r.message),r}}function h(e){let n=e.binding;if(n.type===`query`||n.type===`hash`){let e=new Set;for(let r of t){let t;try{t=p(r)}catch{continue}if(t)for(let t of r.records.values()){let i=t.control.binding;i.type===n.type&&(n.type===`hash`||i.key===n.key)&&e.add(F(r.controller.getSnapshot().values[t.control.id]))}}if(e.size>1)throw Error(`This URL setting has conflicting active Controls bindings.`)}return N(e)}function g(e,t,r,i){let a=t.control.binding.type===`api`?new URL(A()).origin!==new URL(i).origin:A()!==i;if(n||!p(e)||a||h(t.control)!==r)throw Error(`The binding target or prototype route changed. The outcome is unknown.`)}async function v(e,t,n,r){let i=await R(()=>I(t.control,n));g(e,t,n,r);let a=_(t.control,i);if(a)throw Error(`The app value ${a}.`);return e.controller.restore({[t.control.id]:i}),t.lastRead=Date.now(),i}async function b(e,t,n){let{control:r}=t,i=e.controller.getSnapshot().values[r.id],a=A(),o;e.controller.bindingStatus(r.id,``,!0);try{o=h(r);let i=await B(r,o,n);if(i){let t=new URL(c?.href??window.location.href);return r.binding.type===`query`?t.searchParams.set(r.binding.key,i.searchParams.get(r.binding.key)):t.hash=i.hash,c=t,e.controller.restore({[r.id]:n}),e.controller.bindingStatus(r.id,``),n}await new Promise(e=>{let t=window.setTimeout(()=>{window.cancelAnimationFrame(n),e()},100),n=window.requestAnimationFrame(()=>{window.clearTimeout(t),e()})});let s=[`query`,`hash`].includes(r.binding.type),l=await v(e,t,o,s?A():a);if(!k(l,n))throw t.rejection=`The app rejected or adjusted this value. Its actual value is shown.`,t.rejectedValue=l,Error(`The app rejected or adjusted this value. Its actual value is shown.`);return t.rejection=``,e.controller.bindingStatus(r.id,``),l}catch(s){let c=L(s),l=!1;if(o)try{let n=await v(e,t,o,a);t.rejection=c.message,t.rejectedValue=n,l=!0}catch(e){c=Error(`${c.message} ${L(e).message}`)}throw!l&&k(e.controller.getSnapshot().values[r.id],n)&&e.controller.restore({[r.id]:i}),e.controller.bindingStatus(r.id,c.message,!1,l),c}}async function S(e,t){let{control:n}=t;if(!t.reading){t.reading=!0;try{let r=h(n);if(t.object!==r){let i=m(e,t);if(i)throw i;if(t.object=r,n.binding.type===`api`&&n.binding.subscribe){let e=r[n.binding.subscribe](()=>{t.lastRead=0,C()});if(typeof e!=`function`)throw Error(`The API notification method must return a cleanup function.`);t.cleanup=e}}if(n.type===`button`){e.controller.bindingStatus(n.id,t.rejection||``,!1,!0);return}if(!t.initialized)t.initialized=!0,await b(e,t,e.controller.getSnapshot().values[n.id]);else{let i=n.binding.type===`api`?n.binding.pollMs:250;if(t.lastRead===0||i&&Date.now()-t.lastRead>=i){if(!e.controller.getSnapshot().visible[n.id]&&!k(await R(()=>I(n,r)),n.default))await b(e,t,n.default);else{let n=await v(e,t,r,A());t.rejection&&!k(n,t.rejectedValue)&&(t.rejection=``)}e.controller.bindingStatus(n.id,t.rejection||``,!1,!0)}}}catch(t){e.controller.bindingStatus(n.id,L(t).message)}finally{t.reading=!1}}}function C(){return o||(o=!0,a=a.then(async()=>{if(!(n||r)){s=!0;try{await Promise.all(t.map(async e=>{let t,n=!1;try{t=p(e)}catch(r){t=!0,n=!0;for(let t of e.records.values())e.controller.bindingStatus(t.control.id,`Invalid page container: ${r.message}`)}if(t){if(!e.release){let t=Object.fromEntries([...e.records.values()].filter(e=>e.control.type===`button`).map(t=>[t.control.id,async()=>{let n=h(t.control),r=A();t.control.binding.type===`api`?await R(()=>n[t.control.binding.action](),3e4):n.click(),g(e,t,n,r)}]));e.release=e.controller.mount(()=>t)}n||await Promise.all([...e.records.values()].map(t=>S(e,t)))}else{e.release?.(),e.release=void 0;for(let t of e.records.values())m(e,t)}}))}finally{s=!1,d()}}}).finally(()=>{o=!1})),a}function w(e,t){let n=i.then(async()=>{await a,t?.(),c=void 0,r++;try{return await e()}catch(e){throw c=void 0,e}finally{r--,d()}});return i=n.catch(()=>{}),n}function T(e){let n=t.find(t=>t.controller===e);if(!n)throw Error(`Unknown controls set.`);return n}async function j(e,t,n){let r=T(e),i=e.getSnapshot();n?.(),e.restore(t);let a=[];for(let o of y(e.declaration)){n?.();let s=r.records.get(o);if(s.control.type===`button`)continue;let c=e.getSnapshot().values[o];if(Object.hasOwn(t,o)||!k(c,i.values[o])||[`query`,`hash`].includes(s.control.binding.type)&&s.control.binding.mode===`navigate`)try{await b(r,s,c)}catch(t){e.getSnapshot().bindings[o]?.available!==!0&&k(e.getSnapshot().values[o],c)&&e.restore({[o]:i.values[o]}),a.push(`${s.control.label}: ${t.message}`)}}if(n?.(),a.length)throw Error(a.join(`
`).slice(0,1e3))}let M=window.setInterval(()=>{C()},250);function P(e){for(let n of t)for(let t of n.records.values())if(t.control.binding.type!==`api`&&t.control.type!==`button`){if(e.type===`input`||e.type===`change`){if(e.target!==t.object)continue;try{let e=I(t.control,t.object),r=_(t.control,e);if(r)throw Error(`The app value ${r}.`);n.controller.restore({[t.control.id]:e})}catch(e){n.controller.bindingStatus(t.control.id,e.message)}}t.lastRead=0}C()}for(let e of[`input`,`change`,`popstate`,`hashchange`])window.addEventListener(e,P);return C(),{runtime:E(),pending:()=>r>0||s,subscribe(e){return l.add(e),()=>l.delete(e)},settled:()=>a,restore:(e,t,n)=>w(()=>j(e,t,n),n),update:(e,t,n,r)=>w(()=>{let i=e.declaration.controls.find(e=>e.id===t),a=i?_(i,n):`Unknown control.`;if(a)throw Error(a);if(!e.getSnapshot().visible[t])throw Error(`This control is hidden.`);return j(e,{[t]:n},r)},r),takeNavigation(){if(!c)return;let e=c;c=void 0;for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);for(let[t,n]of new URL(window.location.href).searchParams)(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.append(t,n);return e.href},navigate(){let e=this.takeNavigation();e&&window.location.assign(e)},reset:(e,n)=>w(async()=>{let r=e?[T(e)]:t,i=[];for(let e of r){let t=Object.fromEntries(e.controller.declaration.controls.filter(e=>e.type!==`button`).map(e=>[e.id,e.default]));if(!e.release)e.controller.reset();else try{await j(e.controller,t,n)}catch(e){i.push(e.message)}}if(i.length)throw Error(i.join(`
-`).slice(0,1e3))},n),dispose(){n=!0,f(),window.clearInterval(M);for(let e of[`input`,`change`,`popstate`,`hashchange`])window.removeEventListener(e,P);for(let e of t){e.release?.();for(let t of e.records.values())m(e,t)}}}}async function H(){let e=await fetch(`/controls.replica.json`,{credentials:`same-origin`,redirect:`error`});if(e.status===404||e.status===410)return;if(!e.ok)throw Error(`controls.replica.json returned HTTP ${e.status}.`);let t=``,n=e.body?.getReader();if(n){let e=new TextDecoder,r=0;for(;;){let{done:i,value:a}=await n.read();if(i)break;if(r+=a.byteLength,r>256e3)throw await n.cancel(),Error(`controls.replica.json exceeds the 256,000-byte limit.`);t+=e.decode(a,{stream:!0})}t+=e.decode()}else t=await e.text();if(new TextEncoder().encode(t).length>256e3)throw Error(`controls.replica.json exceeds the 256,000-byte limit.`);if(!(e.headers.get(`content-type`)?.startsWith(`text/html`)&&/^\s*<(?:!doctype html|html)/i.test(t)))return V(JSON.parse(t))}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var W=`replica:controls`;function G(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&U(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||U({[r.id]:r.value}))}catch{return!1}}function K(e){return C(e.declaration),JSON.parse(JSON.stringify({declaration:e.declaration,fingerprint:JSON.stringify(e.declaration),snapshot:e.getSnapshot()}))}var q=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function J(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!U(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!q.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function Y(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=q.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!U({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{J(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function X(e,t){let n=new URL(e,window.location.href),r=Y(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(J(r.scopes)))n.searchParams.set(e,t);return n.toString()}function Z(e,t,n){let r=window.history.pushState.bind(window.history),i=window.history.replaceState.bind(window.history),a=!1,o=document.readyState===`complete`||(performance.getEntriesByType?.(`navigation`)??[]).some(e=>`domContentLoadedEventStart`in e&&typeof e.domContentLoadedEventStart==`number`&&e.domContentLoadedEventStart>0),s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString();function c(){try{let e=J({...Y(s).scopes,...t()});return n(``),e}catch(e){return n(e instanceof Error?e.message:`Controls could not be saved in the URL.`),s}}function l(e){if(!a||!o)return new URL(String(e??window.location.href),window.location.href).toString();let t=new URL(X(String(e??window.location.href),c()));return t.searchParams.set(`rc`,`1`),t.toString()}function u(e,t,n){r(e,t,l(n))}function d(e,t,n){i(e,t,l(n))}window.history.pushState=u,window.history.replaceState=d;function f(t){`replicaControlsBinding`in t&&t.replicaControlsBinding===!0||(s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString(),e(s))}function p(e){if(!a||!o||e.defaultPrevented||!(e.target instanceof Element))return;let t=e.target.closest(`a[href]`);if(!(t instanceof HTMLAnchorElement)||t.hasAttribute(`download`)||t.target&&t.target!==`_self`)return;let n=new URL(t.href);n.origin===window.location.origin&&(t.href=l(n))}window.addEventListener(`popstate`,f),window.addEventListener(`click`,p,!0);function m(){if(!a||!o)return;s=c();let e=l(window.location.href);e!==window.location.href&&i(window.history.state,``,e)}function h(){o=!0,m()}return document.addEventListener(`DOMContentLoaded`,h,{once:!0}),{set(e){let t=Y(e);if(t.notice)throw Error(t.notice);s=J(t.scopes),a=!0,m()},refresh:m,current(){return new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString()},managed(){return new URLSearchParams(window.location.search).get(`rc`)===`1`},dispose(){window.history.pushState===u&&(window.history.pushState=r),window.history.replaceState===d&&(window.history.replaceState=i),window.removeEventListener(`popstate`,f),window.removeEventListener(`click`,p,!0),document.removeEventListener(`DOMContentLoaded`,h)}}}function Q(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}var $={mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function ee(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?$.controlsActionUnavailable:``)}}function te(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>ee(e,t)))}}function ne(e){let t=``,n,r,i=``,a=!1,o=new Set,s=!1,c=0,l,u,d=!1,f,p=new Set,m=new Set,h=``,g=Z(e=>{m.clear(),x(`snapshot`,`event`,void 0,e)},()=>Object.fromEntries((n?.list()??[]).filter(e=>m.has(e.declaration.scope)).map(e=>[e.declaration.scope,Q(K(e))])),e=>{h!==e&&(h=e,x(`snapshot`,`event`))});async function _(){try{if(u=await H(),a){u?.dispose();return}n=u?.runtime,r=u?.subscribe(S),await u?.settled();let e=u;e&&v()&&await new Promise(t=>{function n(){clearTimeout(i),a(),f=void 0,t()}function r(){v()||n()}let i=setTimeout(n,500),a=e.subscribe(r);f=n,r()})}catch(e){l={status:`invalid-config`,error:e instanceof Error?e.message.slice(0,1e3):`Controls definitions could not be read.`}}finally{d=!0}S()}function v(){return n?.list().some(e=>Object.values(e.getSnapshot().bindings??{}).some(e=>e.error))}function y(){let e=!!n;if(l)return{runtimeAvailable:e,scopes:[],...l};if(!n)return{runtimeAvailable:!1,status:d?`no-controls`:`missing-runtime`,scopes:[]};try{let e=n.list().filter(e=>e.mountedCount>0).map(K);return e.length>100?{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Too many active controls scopes.`}:{runtimeAvailable:!0,status:e.length?`ready`:`no-controls`,scopes:e}}catch{return{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`The Controls definitions are invalid.`}}}function b(){return{...y(),scopeErrors:[],reconnectRequired:s,...s?{error:`Reconnect controls before sending more commands.`}:{},...h?{error:`${h} Changes remain in memory and are not in the URL.`}:{}}}function x(n,r,i,o){if(a||!t)return;let s={protocol:W,version:1,type:n,epoch:t,requestId:r,sequence:++c,state:b(),...i?{error:i}:{},...o===void 0?{}:{controlQuery:o}};window.parent.postMessage(G(s)?s:{...s,state:{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Controls exceed the transport size limit.`},error:`Controls exceed the transport size limit.`},e)}function S(){for(let e of p)e();if(!d||u?.pending())return;g?.refresh();let e=JSON.stringify(b());e!==i&&(i=e,x(`snapshot`,`event`))}async function C(r){if(r.source===window.parent&&r.origin===e&&r.data&&typeof r.data==`object`&&`type`in r.data&&r.data.type===`replica:controls:status`&&`nonce`in r.data&&typeof r.data.nonce==`string`&&r.data.nonce.length<=100&&`timeoutMs`in r.data&&Number.isInteger(r.data.timeoutMs)&&typeof r.data.timeoutMs==`number`&&r.data.timeoutMs>=0&&r.data.timeoutMs<=1e4){let{nonce:t,timeoutMs:n}=r.data;function i(){return!d||u?.pending()===!0&&!b().scopes.some(({snapshot:e})=>[...Object.values(e.actions),...Object.values(e.bindings??{})].some(e=>e.busy))}i()&&n>0&&await new Promise(e=>{function t(){clearTimeout(o),p.delete(r),e()}function r(){(a||!i())&&t()}let o=setTimeout(t,n);p.add(r),r()}),a||window.parent.postMessage({type:`replica:controls:status-result`,nonce:t,value:te(b(),i(),window.location.href)},e);return}if(r.source!==window.parent||r.origin!==e||!G(r.data))return;let c=r.data;if(c.type===`hello`){t=c.epoch,o.clear(),s=!1,m.clear();let e=c.fromFrameUrl&&g?.managed();g?.set(e?g.current():c.controlQuery??``),d||await w,x(`reply`,c.requestId,void 0,e?g?.current():void 0);return}if(c.type!==`command`||c.epoch!==t||o.has(c.requestId))return;if(o.size>=2e3){s=!0,x(`reply`,c.requestId,`Reconnect controls before sending more commands.`);return}o.add(c.requestId);let l=c.command;function f(){if(a||t!==c.epoch)throw Error(`The preview reconnected. The command outcome is unknown.`)}try{if(l?.operation===`url`){g.set(l.query??``),l.scope&&n?.list().some(e=>e.declaration.scope===l.scope&&e.mountedCount>0)&&(m.add(l.scope),g.refresh()),x(`reply`,c.requestId);return}if(!l||!n||![`ready`,`no-controls`].includes(b().status))throw Error(`Controls runtime is unavailable.`);if(l.operation===`reset-all`){if(n.list().some(e=>Object.values(e.getSnapshot().actions).some(e=>e.busy)))throw Error(`Wait for pending actions before resetting controls.`);let e=n.list().filter(e=>e.mountedCount>0);if(!Array.isArray(l.contexts)||l.contexts.length!==e.length||e.some(e=>!l.contexts?.some(t=>t.scope===e.declaration.scope&&t.fingerprint===JSON.stringify(e.declaration)&&t.revision===e.getSnapshot().revision)))throw Error(`Controls changed. The stale reset was not applied.`);m.clear(),await u?.reset(void 0,f)}else{let e=n.list().find(e=>e.declaration.scope===l.scope&&e.mountedCount>0);if(!e)throw Error(`This controls scope is no longer active.`);if(l.fingerprint!==JSON.stringify(e.declaration)||l.revision!==e.getSnapshot().revision)throw Error(`Controls changed. The stale command was not applied.`);if(l.operation===`restore`){if(!U(l.values))throw Error(`Invalid saved controls.`);await u?.restore(e,l.values,f),m.add(e.declaration.scope),g?.refresh()}else if(l.operation===`reset`)m.add(e.declaration.scope),await u?.reset(e,f);else{let t=e.declaration.controls.find(e=>e.id===l.id);if(!t||!e.getSnapshot().visible[t.id])throw Error(`This control is unknown or hidden.`);if(m.add(e.declaration.scope),l.operation===`update`){let n={[t.id]:l.value};if(!U(n))throw Error(`Invalid control value.`);let r=n[t.id];if(r===void 0)throw Error(`Missing control value.`);await u?.update(e,t.id,r,f)}else if(l.operation===`action`)await e.action(t.id);else throw Error(`Unknown controls command.`)}S()}t===c.epoch&&(x(`reply`,c.requestId),u?.navigate())}catch(e){t===c.epoch&&x(`reply`,c.requestId,e instanceof Error?e.message.slice(0,300):`The controls command failed.`)}}let w=_();function T(e){C(e)}return window.addEventListener(`message`,T),()=>{a=!0,f?.();for(let e of p)e();r?.(),u?.dispose(),window.removeEventListener(`message`,T),g?.dispose()}}ne(`__REPLICA_CONTROLS_PARENT_ORIGIN__`)})();
\ No newline at end of file
+`).slice(0,1e3))},n),dispose(){n=!0,f(),window.clearInterval(M);for(let e of[`input`,`change`,`popstate`,`hashchange`])window.removeEventListener(e,P);for(let e of t){e.release?.();for(let t of e.records.values())m(e,t)}}}}async function H(){let e=await fetch(`/controls.replica.json`,{credentials:`same-origin`,redirect:`error`});if(e.status===404||e.status===410)return;if(!e.ok)throw Error(`controls.replica.json returned HTTP ${e.status}.`);let t=``,n=e.body?.getReader();if(n){let e=new TextDecoder,r=0;for(;;){let{done:i,value:a}=await n.read();if(i)break;if(r+=a.byteLength,r>256e3)throw await n.cancel(),Error(`controls.replica.json exceeds the 256,000-byte limit.`);t+=e.decode(a,{stream:!0})}t+=e.decode()}else t=await e.text();if(new TextEncoder().encode(t).length>256e3)throw Error(`controls.replica.json exceeds the 256,000-byte limit.`);if(!(e.headers.get(`content-type`)?.startsWith(`text/html`)&&/^\s*<(?:!doctype html|html)/i.test(t)))return V(JSON.parse(t))}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var W=`replica:controls`;function G(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&U(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||U({[r.id]:r.value}))}catch{return!1}}function K(e){return C(e.declaration),JSON.parse(JSON.stringify({declaration:e.declaration,fingerprint:JSON.stringify(e.declaration),snapshot:e.getSnapshot()}))}var q=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function J(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!U(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!q.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function Y(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=q.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!U({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{J(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function X(e,t){let n=new URL(e,window.location.href),r=Y(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(J(r.scopes)))n.searchParams.set(e,t);return n.toString()}function Z(e,t,n){let r=window.history.pushState.bind(window.history),i=window.history.replaceState.bind(window.history),a=!1,o=document.readyState===`complete`||(performance.getEntriesByType?.(`navigation`)??[]).some(e=>`domContentLoadedEventStart`in e&&typeof e.domContentLoadedEventStart==`number`&&e.domContentLoadedEventStart>0),s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString();function c(){try{let e=J({...Y(s).scopes,...t()});return n(``),e}catch(e){return n(e instanceof Error?e.message:`Controls could not be saved in the URL.`),s}}function l(e){if(!a||!o)return new URL(String(e??window.location.href),window.location.href).toString();let t=new URL(X(String(e??window.location.href),c()));return t.searchParams.set(`rc`,`1`),t.toString()}function u(e,t,n){r(e,t,l(n))}function d(e,t,n){i(e,t,l(n))}window.history.pushState=u,window.history.replaceState=d;function f(t){`replicaControlsBinding`in t&&t.replicaControlsBinding===!0||(s=new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString(),e(s))}function p(e){if(!a||!o||e.defaultPrevented||!(e.target instanceof Element))return;let t=e.target.closest(`a[href]`);if(!(t instanceof HTMLAnchorElement)||t.hasAttribute(`download`)||t.target&&t.target!==`_self`)return;let n=new URL(t.href);n.origin===window.location.origin&&(t.href=l(n))}window.addEventListener(`popstate`,f),window.addEventListener(`click`,p,!0);function m(){if(!a||!o)return;s=c();let e=l(window.location.href);e!==window.location.href&&i(window.history.state,``,e)}function h(){o=!0,m()}return document.addEventListener(`DOMContentLoaded`,h,{once:!0}),{set(e){let t=Y(e);if(t.notice)throw Error(t.notice);s=J(t.scopes),a=!0,m()},refresh:m,current(){return new URLSearchParams([...new URLSearchParams(window.location.search)].filter(([e])=>e.startsWith(`rc.`))).toString()},managed(){return new URLSearchParams(window.location.search).get(`rc`)===`1`},dispose(){window.history.pushState===u&&(window.history.pushState=r),window.history.replaceState===d&&(window.history.replaceState=i),window.removeEventListener(`popstate`,f),window.removeEventListener(`click`,p,!0),document.removeEventListener(`DOMContentLoaded`,h)}}}function Q(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}var $={localCommentsSaved:`Comments stay on this device until a Build with matching content is published and the canvas syncs them to Hub.`,commentPagesExceeded:`Too many review comment pages.`,commentPreparationFailed:`Hub could not prepare this comment.`,commentRefreshFailed:e=>`The comment was saved, but Hub could not be refreshed: ${e}`,commentLiveUpdatesPaused:`Live updates paused; checking every 30 seconds.`,mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function ee(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?$.controlsActionUnavailable:``)}}function te(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>ee(e,t)))}}function ne(e){let t=``,n,r,i=``,a=!1,o=new Set,s=!1,c=0,l,u,d=!1,f,p=new Set,m=new Set,h=``,g=Z(e=>{m.clear(),x(`snapshot`,`event`,void 0,e)},()=>Object.fromEntries((n?.list()??[]).filter(e=>m.has(e.declaration.scope)).map(e=>[e.declaration.scope,Q(K(e))])),e=>{h!==e&&(h=e,x(`snapshot`,`event`))});async function _(){try{if(u=await H(),a){u?.dispose();return}n=u?.runtime,r=u?.subscribe(S),await u?.settled();let e=u;e&&v()&&await new Promise(t=>{function n(){clearTimeout(i),a(),f=void 0,t()}function r(){v()||n()}let i=setTimeout(n,500),a=e.subscribe(r);f=n,r()})}catch(e){l={status:`invalid-config`,error:e instanceof Error?e.message.slice(0,1e3):`Controls definitions could not be read.`}}finally{d=!0}S()}function v(){return n?.list().some(e=>Object.values(e.getSnapshot().bindings??{}).some(e=>e.error))}function y(){let e=!!n;if(l)return{runtimeAvailable:e,scopes:[],...l};if(!n)return{runtimeAvailable:!1,status:d?`no-controls`:`missing-runtime`,scopes:[]};try{let e=n.list().filter(e=>e.mountedCount>0).map(K);return e.length>100?{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Too many active controls scopes.`}:{runtimeAvailable:!0,status:e.length?`ready`:`no-controls`,scopes:e}}catch{return{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`The Controls definitions are invalid.`}}}function b(){return{...y(),scopeErrors:[],reconnectRequired:s,...s?{error:`Reconnect controls before sending more commands.`}:{},...h?{error:`${h} Changes remain in memory and are not in the URL.`}:{}}}function x(n,r,i,o){if(a||!t)return;let s={protocol:W,version:1,type:n,epoch:t,requestId:r,sequence:++c,state:b(),...i?{error:i}:{},...o===void 0?{}:{controlQuery:o}};window.parent.postMessage(G(s)?s:{...s,state:{runtimeAvailable:!0,status:`invalid-config`,scopes:[],error:`Controls exceed the transport size limit.`},error:`Controls exceed the transport size limit.`},e)}function S(){for(let e of p)e();if(!d||u?.pending())return;g?.refresh();let e=JSON.stringify(b());e!==i&&(i=e,x(`snapshot`,`event`))}async function C(r){if(r.source===window.parent&&r.origin===e&&r.data&&typeof r.data==`object`&&`type`in r.data&&r.data.type===`replica:controls:status`&&`nonce`in r.data&&typeof r.data.nonce==`string`&&r.data.nonce.length<=100&&`timeoutMs`in r.data&&Number.isInteger(r.data.timeoutMs)&&typeof r.data.timeoutMs==`number`&&r.data.timeoutMs>=0&&r.data.timeoutMs<=1e4){let{nonce:t,timeoutMs:n}=r.data;function i(){return!d||u?.pending()===!0&&!b().scopes.some(({snapshot:e})=>[...Object.values(e.actions),...Object.values(e.bindings??{})].some(e=>e.busy))}i()&&n>0&&await new Promise(e=>{function t(){clearTimeout(o),p.delete(r),e()}function r(){(a||!i())&&t()}let o=setTimeout(t,n);p.add(r),r()}),a||window.parent.postMessage({type:`replica:controls:status-result`,nonce:t,value:te(b(),i(),window.location.href)},e);return}if(r.source!==window.parent||r.origin!==e||!G(r.data))return;let c=r.data;if(c.type===`hello`){t=c.epoch,o.clear(),s=!1,m.clear();let e=c.fromFrameUrl&&g?.managed();g?.set(e?g.current():c.controlQuery??``),d||await w,x(`reply`,c.requestId,void 0,e?g?.current():void 0);return}if(c.type!==`command`||c.epoch!==t||o.has(c.requestId))return;if(o.size>=2e3){s=!0,x(`reply`,c.requestId,`Reconnect controls before sending more commands.`);return}o.add(c.requestId);let l=c.command;function f(){if(a||t!==c.epoch)throw Error(`The preview reconnected. The command outcome is unknown.`)}try{if(l?.operation===`url`){g.set(l.query??``),l.scope&&n?.list().some(e=>e.declaration.scope===l.scope&&e.mountedCount>0)&&(m.add(l.scope),g.refresh()),x(`reply`,c.requestId);return}if(!l||!n||![`ready`,`no-controls`].includes(b().status))throw Error(`Controls runtime is unavailable.`);if(l.operation===`reset-all`){if(n.list().some(e=>Object.values(e.getSnapshot().actions).some(e=>e.busy)))throw Error(`Wait for pending actions before resetting controls.`);let e=n.list().filter(e=>e.mountedCount>0);if(!Array.isArray(l.contexts)||l.contexts.length!==e.length||e.some(e=>!l.contexts?.some(t=>t.scope===e.declaration.scope&&t.fingerprint===JSON.stringify(e.declaration)&&t.revision===e.getSnapshot().revision)))throw Error(`Controls changed. The stale reset was not applied.`);m.clear(),await u?.reset(void 0,f)}else{let e=n.list().find(e=>e.declaration.scope===l.scope&&e.mountedCount>0);if(!e)throw Error(`This controls scope is no longer active.`);if(l.fingerprint!==JSON.stringify(e.declaration)||l.revision!==e.getSnapshot().revision)throw Error(`Controls changed. The stale command was not applied.`);if(l.operation===`restore`){if(!U(l.values))throw Error(`Invalid saved controls.`);await u?.restore(e,l.values,f),m.add(e.declaration.scope),g?.refresh()}else if(l.operation===`reset`)m.add(e.declaration.scope),await u?.reset(e,f);else{let t=e.declaration.controls.find(e=>e.id===l.id);if(!t||!e.getSnapshot().visible[t.id])throw Error(`This control is unknown or hidden.`);if(m.add(e.declaration.scope),l.operation===`update`){let n={[t.id]:l.value};if(!U(n))throw Error(`Invalid control value.`);let r=n[t.id];if(r===void 0)throw Error(`Missing control value.`);await u?.update(e,t.id,r,f)}else if(l.operation===`action`)await e.action(t.id);else throw Error(`Unknown controls command.`)}S()}t===c.epoch&&(x(`reply`,c.requestId),u?.navigate())}catch(e){t===c.epoch&&x(`reply`,c.requestId,e instanceof Error?e.message.slice(0,300):`The controls command failed.`)}}let w=_();function T(e){C(e)}return window.addEventListener(`message`,T),()=>{a=!0,f?.();for(let e of p)e();r?.(),u?.dispose(),window.removeEventListener(`message`,T),g?.dispose()}}ne(`__REPLICA_CONTROLS_PARENT_ORIGIN__`)})();
\ No newline at end of file
diff --git a/hub/app/javascript/features/prototype-canvas-hub-panel/bridge-health.test.tsx b/hub/app/javascript/features/prototype-canvas-hub-panel/bridge-health.test.tsx
index 3f2c2969..cf0c7374 100644
--- a/hub/app/javascript/features/prototype-canvas-hub-panel/bridge-health.test.tsx
+++ b/hub/app/javascript/features/prototype-canvas-hub-panel/bridge-health.test.tsx
@@ -1,30 +1,13 @@
-import { ThemeProvider } from "@primer/react-brand"
-import { act, fireEvent, render, screen, waitFor, within } from "@testing-library/react"
+import { act, fireEvent, screen, waitFor, within } from "@testing-library/react"
import { createRef } from "react"
-import { afterEach, beforeAll, expect, it, vi } from "vitest"
+import { expect, it, vi } from "vitest"
import { octocatRootComment } from "@/storybook/fixtures/review/comments"
import { reviewCommentsCopy } from "@utils/review-comment/en"
import type { ReviewAnchor } from "@utils/review-anchor/types"
-
-import { HubPanel } from "."
import { importedPrototype, publicationHub } from "@utils/resolve-prototype-publication/fixtures"
-beforeAll(() => {
- Object.defineProperty(HTMLDialogElement.prototype, "showModal", {
- configurable: true,
- value(this: HTMLDialogElement) {
- this.open = true
- },
- })
-})
-
-afterEach(() => {
- document.getElementById("canvas-review-controls")?.remove()
- vi.useRealTimers()
- vi.restoreAllMocks()
- vi.unstubAllGlobals()
-})
+import { renderPrototypeCanvasHubPanel } from "./test-support/render-prototype-canvas-hub-panel"
it("waits for loading, validates compatibility, recovers from late responses, and clears readiness on reload", async () => {
vi.useFakeTimers()
@@ -33,30 +16,24 @@ it("waits for loading, validates compatibility, recovers from late responses, an
const fetch = vi.fn()
vi.stubGlobal("fetch", fetch)
const frameRef = createRef()
- const view = render(
-
-
- {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
+ const view = renderPrototypeCanvasHubPanel(
+ {
+ config: {
+ name: "Welcome",
+ prototypeUrl: "http://localhost:4321",
+ previewUrl: "http://127.0.0.1:12345",
+ token: "local",
+ },
+ frameRef,
+ status: {
+ state: "undiscovered",
+ repositoryAuthorized: true,
+ repository: "github/prototype",
+ branch: "prototype/welcome",
+ },
+ open: false,
+ },
+ ,
)
function respond(
protocolVersion?: number,
@@ -113,9 +90,6 @@ it.each([
])(
"ignores incompatible targeting messages until a compatible ready response: $type $reason",
async (message) => {
- const controls = document.createElement("div")
- controls.id = "canvas-review-controls"
- document.body.append(controls)
const nonce = "00000000-0000-4000-8000-000000000002"
vi.spyOn(crypto, "randomUUID").mockReturnValue(nonce)
vi.stubGlobal(
@@ -123,6 +97,14 @@ it.each([
vi.fn((path: string) => {
if (path === "/api/hub/events")
return Promise.reject(new Error("Live connection unavailable"))
+ if (path === "/api/hub/status")
+ return Promise.resolve(
+ Response.json({
+ ...publicationHub,
+ state: "connected",
+ prototype: importedPrototype,
+ }),
+ )
return Promise.resolve(
new Response(JSON.stringify({ comments: [], hasMore: false, nextCursor: null })),
)
@@ -130,20 +112,14 @@ it.each([
)
const frameRef = createRef()
const onFrameLoad = vi.fn()
- const view = render(
-
-
- {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
+ const view = renderPrototypeCanvasHubPanel(
+ {
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321", token: "local" },
+ frameRef,
+ status: { ...publicationHub, state: "connected", prototype: importedPrototype },
+ open: false,
+ },
+ ,
)
function respond(data: Record) {
act(() => {
@@ -168,7 +144,7 @@ it.each([
await screen.findByRole("menuitem", { name: reviewCommentsCopy.commentOnElementLabel }),
)
expect(
- screen.getByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel }),
+ await screen.findByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel }),
).toBeVisible()
respond({ ...ready, protocolVersion: 99 })
@@ -200,6 +176,7 @@ it.each([
fireEvent.click(
await screen.findByRole("menuitem", { name: reviewCommentsCopy.commentOnElementLabel }),
)
+ await screen.findByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel })
respond({ type: "replica:canvas:selected", anchor: octocatRootComment.anchor })
}
expect(screen.getByRole("textbox", { name: reviewCommentsCopy.composerLabel })).toBeVisible()
@@ -210,9 +187,6 @@ it.each([
it.each(["area", "element"] as const)(
"clears a rejected $0 selection, shows its failure, and allows a valid retry",
async (kind) => {
- const controls = document.createElement("div")
- controls.id = "canvas-review-controls"
- document.body.append(controls)
const nonce = "00000000-0000-4000-8000-000000000003"
vi.spyOn(crypto, "randomUUID").mockReturnValue(nonce)
vi.stubGlobal(
@@ -220,6 +194,14 @@ it.each(["area", "element"] as const)(
vi.fn((path: string) => {
if (path === "/api/hub/events")
return Promise.reject(new Error("Live connection unavailable"))
+ if (path === "/api/hub/status")
+ return Promise.resolve(
+ Response.json({
+ ...publicationHub,
+ state: "connected",
+ prototype: importedPrototype,
+ }),
+ )
return Promise.resolve(
new Response(JSON.stringify({ comments: [], hasMore: false, nextCursor: null })),
)
@@ -227,20 +209,14 @@ it.each(["area", "element"] as const)(
)
const frameRef = createRef()
const onFrameLoad = vi.fn()
- const view = render(
-
-
- {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
+ const view = renderPrototypeCanvasHubPanel(
+ {
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321", token: "local" },
+ frameRef,
+ status: { ...publicationHub, state: "connected", prototype: importedPrototype },
+ open: false,
+ },
+ ,
)
function respond(data: Record, origin = "http://localhost:4321") {
act(() => {
@@ -302,6 +278,7 @@ it.each(["area", "element"] as const)(
})
fireEvent.click(screen.getByRole("button", { name: reviewCommentsCopy.commentMenuLabel }))
fireEvent.click(await screen.findByRole("menuitem", { name: selectionLabel }))
+ await screen.findByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel })
respond({ type: "replica:canvas:selected", anchor: invalidAnchor }, "https://untrusted.example")
respond({ type: "replica:canvas:selected", anchor: invalidAnchor, nonce: "stale" })
@@ -331,6 +308,7 @@ it.each(["area", "element"] as const)(
fireEvent.click(screen.getByRole("button", { name: reviewCommentsCopy.commentMenuLabel }))
fireEvent.click(await screen.findByRole("menuitem", { name: selectionLabel }))
+ await screen.findByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel })
expect(screen.queryByRole("alert")).not.toBeInTheDocument()
respond({ type: "replica:canvas:selected", anchor: validAnchor })
expect(screen.getByRole("textbox", { name: reviewCommentsCopy.composerLabel })).toBeVisible()
diff --git a/hub/app/javascript/features/prototype-canvas-hub-panel/comment-visibility.test.tsx b/hub/app/javascript/features/prototype-canvas-hub-panel/comment-visibility.test.tsx
index bf7cbcdf..e2da3dda 100644
--- a/hub/app/javascript/features/prototype-canvas-hub-panel/comment-visibility.test.tsx
+++ b/hub/app/javascript/features/prototype-canvas-hub-panel/comment-visibility.test.tsx
@@ -1,28 +1,14 @@
-import { ThemeProvider } from "@primer/react-brand"
-import { act, fireEvent, render, screen, waitFor, within } from "@testing-library/react"
+import { act, fireEvent, screen, waitFor, within } from "@testing-library/react"
import { createRef } from "react"
-import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"
+import { describe, expect, it, vi } from "vitest"
import { octocatRootComment } from "@/storybook/fixtures/review/comments"
import { reviewCommentsCopy } from "@utils/review-comment/en"
-
import { importedPrototype, publicationHub } from "@utils/resolve-prototype-publication/fixtures"
-import { HubPanel } from "."
-
-beforeEach(() => {
- const controls = document.createElement("div")
- controls.id = "canvas-review-controls"
- document.body.append(controls)
-})
-
-afterEach(() => {
- document.getElementById("canvas-review-controls")?.remove()
- vi.restoreAllMocks()
- vi.unstubAllGlobals()
-})
+import { renderPrototypeCanvasHubPanel } from "./test-support/render-prototype-canvas-hub-panel"
-describe("HubPanel()", () => {
+describe("PrototypeCanvasHubPanel()", () => {
it("opens an earlier comment Build on the selected Hub rather than the loopback canvas", async () => {
vi.stubGlobal(
"fetch",
@@ -33,27 +19,18 @@ describe("HubPanel()", () => {
)
}),
)
- render(
-
- ()}
- status={{
- ...publicationHub,
- state: "connected",
- prototype: {
- ...importedPrototype,
- build: { ...importedPrototype.build!, number: 2 },
- },
- }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
- )
+ renderPrototypeCanvasHubPanel({
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321/", token: "local" },
+ status: {
+ ...publicationHub,
+ state: "connected",
+ prototype: {
+ ...importedPrototype,
+ build: { ...importedPrototype.build!, number: 2 },
+ },
+ },
+ open: false,
+ })
fireEvent.click(await screen.findByRole("button", { name: /^Comments, 1/ }))
const buildLink = screen.getByRole("link", { name: "build 1" })
@@ -81,20 +58,11 @@ describe("HubPanel()", () => {
)
})
vi.stubGlobal("fetch", fetchMock)
- render(
-
- ()}
- status={{ ...publicationHub, state: "connected", prototype: importedPrototype }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
- )
+ renderPrototypeCanvasHubPanel({
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321/", token: "local" },
+ status: { ...publicationHub, state: "connected", prototype: importedPrototype },
+ open: false,
+ })
fireEvent.click(await screen.findByRole("button", { name: /^Comments, 1/ }))
fireEvent.click(screen.getByRole("button", { name: /Please align this control/ }))
const dialog = screen.getByRole("dialog", { name: reviewCommentsCopy.threadHeading })
@@ -145,20 +113,11 @@ describe("HubPanel()", () => {
)
})
vi.stubGlobal("fetch", fetchMock)
- const view = render(
-
- ()}
- status={{ ...publicationHub, state: "connected", prototype: importedPrototype }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321/", token: "local" },
+ status: { ...publicationHub, state: "connected", prototype: importedPrototype },
+ open: false,
+ })
fireEvent.click(await screen.findByRole("button", { name: /^Comments, 1/ }))
fireEvent.click(screen.getByRole("button", { name: /Please align this control/ }))
const dialog = screen.getByRole("dialog", { name: reviewCommentsCopy.threadHeading })
@@ -173,25 +132,16 @@ describe("HubPanel()", () => {
([input, options]) => input === "/api/hub/comments/1/replies" && options?.method === "POST",
),
).toHaveLength(1)
- view.rerender(
-
- ()}
- status={{
- ...publicationHub,
- state: "connected",
- hubOrigin: "https://other-hub.example.test",
- prototype: importedPrototype,
- }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
- )
+ view.rerender({
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321/", token: "local" },
+ status: {
+ ...publicationHub,
+ state: "connected",
+ hubOrigin: "https://other-hub.example.test",
+ prototype: importedPrototype,
+ },
+ open: false,
+ })
await waitFor(() => expect(screen.queryByText(message)).not.toBeInTheDocument())
expect(
fetchMock.mock.calls.filter(
@@ -214,29 +164,34 @@ describe("HubPanel()", () => {
body: "Please update this heading.",
viewerLastSeenActivityVersion: 2,
}
+ let commentCreated = false
const fetchMock = vi.fn().mockImplementation((input, options) => {
if (input === "/api/hub/events") return Promise.reject(new Error("Offline"))
- if (input === "/api/hub/comments" && options?.method === "POST")
+ if (input === "/api/hub/status")
+ return Promise.resolve(
+ Response.json({ ...publicationHub, state: "connected", prototype: importedPrototype }),
+ )
+ if (input === "/api/hub/comments" && options?.method === "POST") {
+ commentCreated = true
return Promise.resolve(Response.json({ comments: [created] }, { status: 201 }))
+ }
return Promise.resolve(
- Response.json({ comments: [octocatRootComment], hasMore: false, nextCursor: null }),
+ Response.json({
+ comments: [octocatRootComment, ...(commentCreated ? [created] : [])],
+ hasMore: false,
+ nextCursor: null,
+ }),
)
})
vi.stubGlobal("fetch", fetchMock)
- const view = render(
-
-
- {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
+ const view = renderPrototypeCanvasHubPanel(
+ {
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321/", token: "local" },
+ frameRef,
+ status: { ...publicationHub, state: "connected", prototype: importedPrototype },
+ open: false,
+ },
+ ,
)
const toggle = await screen.findByRole("button", { name: /^Comments, 1/ })
await waitFor(() => expect(onFrameLoad).toHaveBeenCalled())
@@ -328,6 +283,10 @@ describe("HubPanel()", () => {
fireEvent.click(
await screen.findByRole("menuitem", { name: reviewCommentsCopy.commentOnElementLabel }),
)
+ await screen.findByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel })
+ expect(
+ screen.queryByRole("button", { name: "Unread thread started by @octocat" }),
+ ).not.toBeInTheDocument()
expect(toggle).toHaveAttribute("aria-expanded", String(commentsOpen))
receive({ type: "replica:canvas:selected", anchor: created.anchor })
fireEvent.change(screen.getByRole("textbox", { name: reviewCommentsCopy.composerLabel }), {
diff --git a/hub/app/javascript/features/prototype-canvas-hub-panel/index.test.tsx b/hub/app/javascript/features/prototype-canvas-hub-panel/index.test.tsx
index 8a878690..0ee9eff7 100644
--- a/hub/app/javascript/features/prototype-canvas-hub-panel/index.test.tsx
+++ b/hub/app/javascript/features/prototype-canvas-hub-panel/index.test.tsx
@@ -1,12 +1,9 @@
-import { ThemeProvider } from "@primer/react-brand"
-import { act, fireEvent, render, screen, waitFor, within } from "@testing-library/react"
+import { act, fireEvent, screen, waitFor, within } from "@testing-library/react"
import { createRef } from "react"
-import { afterEach, beforeEach, expect, it, vi } from "vitest"
+import { describe, expect, it, vi } from "vitest"
import { octocatRootComment } from "@/storybook/fixtures/review/comments"
import { reviewCommentsCopy } from "@utils/review-comment/en"
-
-import { HubPanel } from "."
import {
importedPrototype,
publicationHub,
@@ -15,17 +12,7 @@ import {
import { resolvePublication } from "@utils/resolve-prototype-publication"
import type { HubStatus } from "@utils/prototype-canvas/types"
-beforeEach(() => {
- const reviewControls = document.createElement("div")
- reviewControls.id = "canvas-review-controls"
- document.body.append(reviewControls)
-})
-
-afterEach(() => {
- document.getElementById("canvas-review-controls")?.remove()
- vi.restoreAllMocks()
- vi.unstubAllGlobals()
-})
+import { renderPrototypeCanvasHubPanel } from "./test-support/render-prototype-canvas-hub-panel"
it.each(["undiscovered", "unregistered", "no-build", "disconnected"] as const)(
"hides publishing Settings for a %s prototype",
@@ -37,39 +24,28 @@ it.each(["undiscovered", "unregistered", "no-build", "disconnected"] as const)(
),
)
const save = vi.fn<() => Promise>().mockResolvedValue(undefined)
- const view = render(
-
- ()}
- status={{
- ...publicationHub,
- state: state === "undiscovered" || state === "disconnected" ? state : "connected",
- prototype:
- state === "undiscovered" || state === "disconnected"
- ? undefined
- : {
- ...importedPrototype,
- registered: state !== "unregistered",
- build: state === "no-build" ? null : importedPrototype.build,
- },
- }}
- publishPreference={{
- remember: false,
- loading: false,
- saving: false,
- error: "",
- save,
- retry: vi.fn<() => Promise>().mockResolvedValue(undefined),
- }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- onClose={() => {}}
- open
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status: {
+ ...publicationHub,
+ state: state === "undiscovered" || state === "disconnected" ? state : "connected",
+ prototype:
+ state === "undiscovered" || state === "disconnected"
+ ? undefined
+ : {
+ ...importedPrototype,
+ registered: state !== "unregistered",
+ build: state === "no-build" ? null : importedPrototype.build,
+ },
+ },
+ publishPreference: {
+ remember: false,
+ loading: false,
+ saving: false,
+ error: "",
+ save,
+ retry: vi.fn<() => Promise>().mockResolvedValue(undefined),
+ },
+ })
expect(screen.queryByRole("region", { name: "Settings" })).not.toBeInTheDocument()
expect(screen.queryByRole("button", { name: "Publishing preferences" })).not.toBeInTheDocument()
expect(save).not.toHaveBeenCalled()
@@ -88,13 +64,8 @@ it.each(["unavailable", "denied"] as const)(
message: "Hub status unavailable: Load failed",
}
const props = {
- config: { name: "Example", prototypeUrl: "http://localhost:4321/", token: "local" },
- frameRef: createRef(),
status,
onStatusChange,
- onSelectHub: async () => {},
- onConnect: () => {},
- onClose: () => {},
onPublish: vi.fn(),
onRetryPublication,
publication: {
@@ -103,13 +74,8 @@ it.each(["unavailable", "denied"] as const)(
label: "Retry status",
action: "retry" as const,
},
- open: true,
}
- const view = render(
-
-
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({ ...props })
expect(screen.getAllByRole("alert")).toHaveLength(1)
expect(screen.getByRole("alert")).toHaveTextContent(status.message!)
expect(screen.getByRole("alert")).toHaveClass("hub-alert--warning", "hub-alert--compact")
@@ -122,22 +88,14 @@ it.each(["unavailable", "denied"] as const)(
expect(onStatusChange).not.toHaveBeenCalled()
expect(props.onPublish).not.toHaveBeenCalled()
- view.rerender(
-
-
- ,
- )
+ view.rerender({ ...props, publicationBusy: true })
const retry = screen.getByRole("button", { name: "Retry status" })
expect(retry).toBeDisabled()
expect(retry).toHaveAttribute("aria-busy", "true")
fireEvent.click(retry)
expect(onRetryPublication).toHaveBeenCalledOnce()
- view.rerender(
-
-
- ,
- )
+ view.rerender({ ...props, status: { ...status, state: "undiscovered", message: undefined } })
expect(screen.getByRole("region", { name: "Branch publication" })).toHaveTextContent(
props.publication.detail,
)
@@ -148,20 +106,10 @@ it.each(["unavailable", "denied"] as const)(
it("offers a Hub-only retry with fallback copy when no publication callback is provided", () => {
const onStatusChange = vi.fn().mockResolvedValue(undefined)
- const view = render(
-
- ()}
- status={{ ...publicationHub, state: "unavailable" }}
- onStatusChange={onStatusChange}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- onClose={() => {}}
- open
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status: { ...publicationHub, state: "unavailable" },
+ onStatusChange,
+ })
expect(screen.getByRole("alert")).toHaveTextContent(
"Hub verification is unavailable. Restore access and retry.",
)
@@ -182,31 +130,17 @@ it("replaces automatic publication progress with editable metadata once publishe
),
),
)
- const props = {
- config: { name: "Example", prototypeUrl: "http://localhost:4321/", token: "local" },
- frameRef: createRef(),
- onStatusChange: async () => {},
- onSelectHub: async () => {},
- onConnect: () => {},
- onClose: () => {},
- onPublish: () => {},
- onRetryPublication: () => {},
- open: true,
- }
+ const props = { onPublish: () => {}, onRetryPublication: () => {} }
const waiting = {
...publicationHub,
state: "connected" as const,
prototype: { ...importedPrototype, registered: false, published: false },
}
- const view = render(
-
-
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ ...props,
+ status: waiting,
+ publication: resolvePublication(publicationState, waiting),
+ })
expect(screen.queryByRole("button", { name: "Register prototype" })).not.toBeInTheDocument()
expect(screen.queryByRole("button", { name: "Refresh publication" })).not.toBeInTheDocument()
expect(screen.queryByRole("button", { name: "Edit details" })).not.toBeInTheDocument()
@@ -220,15 +154,11 @@ it("replaces automatic publication progress with editable metadata once publishe
...waiting,
registrationError: "Automatic prototype registration failed: Hub returned HTTP 404.",
}
- view.rerender(
-
-
- ,
- )
+ view.rerender({
+ ...props,
+ status: failed,
+ publication: resolvePublication(publicationState, failed),
+ })
expect(screen.getByText(failed.registrationError)).toBeInTheDocument()
expect(screen.getByRole("link", { name: "Build #1" })).toBeInTheDocument()
expect(screen.getByText(importedPrototype.build!.commitSha.slice(0, 7)).parentElement).toBe(
@@ -247,15 +177,11 @@ it("replaces automatic publication progress with editable metadata once publishe
expect(screen.queryByRole("button", { name: "Connect to the Hub" })).not.toBeInTheDocument()
const published = { ...waiting, prototype: importedPrototype }
- view.rerender(
-
-
- ,
- )
+ view.rerender({
+ ...props,
+ status: published,
+ publication: resolvePublication(publicationState, published),
+ })
expect(screen.queryByText(/publishing it automatically/)).not.toBeInTheDocument()
expect(screen.queryByRole("region", { name: "Branch publication" })).not.toBeInTheDocument()
expect(screen.getByRole("button", { name: "Edit details" })).toBeEnabled()
@@ -337,30 +263,19 @@ it.each([
"fetch",
vi.fn(() => Promise.resolve(Response.json({ comments: [], hasMore: false, nextCursor: null }))),
)
- const view = render(
-
- ()}
- status={{
- ...publicationHub,
- state: "connected",
- prototype: {
- ...importedPrototype,
- build: {
- ...importedPrototype.build!,
- author: { name, login, avatarUrl: null },
- },
- },
- }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- onClose={() => {}}
- open
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status: {
+ ...publicationHub,
+ state: "connected",
+ prototype: {
+ ...importedPrototype,
+ build: {
+ ...importedPrototype.build!,
+ author: { name, login, avatarUrl: null },
+ },
+ },
+ },
+ })
const build = within(screen.getByRole("region", { name: "Latest Build" }))
expect(build.getByText(label)).toBeInTheDocument()
expect(build.queryByText(/^Commit author:/)).not.toBeInTheDocument()
@@ -382,59 +297,39 @@ it("derives Build history from the selected Hub and current prototype only with
"fetch",
vi.fn(() => Promise.resolve(Response.json({ comments: [], hasMore: false, nextCursor: null }))),
)
- const props = {
- config: { name: "Example", prototypeUrl: "http://localhost:4321/", token: "local" },
- frameRef: createRef(),
- onStatusChange: async () => {},
- onSelectHub: async () => {},
- onConnect: () => {},
- onClose: () => {},
- open: true,
- }
+
const status = {
...publicationHub,
state: "connected" as const,
prototype: { ...importedPrototype, id: 53, repositoryId: 2001, versionCount: 12 },
}
- const view = render(
-
-
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status,
+ })
expect(screen.getByRole("link", { name: "Show build history" })).toHaveAttribute(
"href",
"https://hub.example.com/repositories/2001/prototypes/53/builds",
)
expect(screen.queryByText(/versions?/)).not.toBeInTheDocument()
await screen.findByRole("button", { name: /^Comments, 0/ })
- view.rerender(
-
-
- ,
- )
+ view.rerender({
+ status: {
+ ...status,
+ hubOrigin: "https://other-hub.example.com/",
+ prototype: { ...status.prototype, id: 62, repositoryId: 4003 },
+ },
+ })
expect(screen.getByRole("link", { name: "Show build history" })).toHaveAttribute(
"href",
"https://other-hub.example.com/repositories/4003/prototypes/62/builds",
)
for (const buildState of ["queued", "building", "failed", null]) {
- view.rerender(
-
-
- ,
- )
+ view.rerender({
+ status: {
+ ...status,
+ prototype: { ...status.prototype, build: null, buildState },
+ },
+ })
expect(screen.queryByRole("link", { name: "Show build history" })).not.toBeInTheDocument()
expect(screen.queryByRole("link", { name: "Build #1" })).not.toBeInTheDocument()
expect(screen.getByText(/No successful imported Build yet/)).toBeInTheDocument()
@@ -452,24 +347,13 @@ it("keeps the Hub heading and root link before discovery with only concise unpub
remoteBranch: { ...publicationState.stats.remoteBranch!, state: "absent" as const },
},
}
- const view = render(
-
- ()}
- status={status}
- publication={resolvePublication(state, status)}
- dirty
- onPublish={() => {}}
- onRetryPublication={() => {}}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- onClose={() => {}}
- open
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status,
+ publication: resolvePublication(state, status),
+ dirty: true,
+ onPublish: () => {},
+ onRetryPublication: () => {},
+ })
const heading = screen.getByRole("heading", { name: "Hub" })
expect(heading.className).toContain("Heading--subhead-medium")
const link = screen.getByRole("link", { name: "https://hub.example.com" })
@@ -487,25 +371,12 @@ it("keeps the Hub heading and root link before discovery with only concise unpub
})
it("offers only the shared dialog action when disconnected status arrives after loading", () => {
- const props = {
- config: { name: "Example", prototypeUrl: "http://localhost:4321/", token: "local" },
- frameRef: createRef(),
- onStatusChange: async () => {},
- onSelectHub: async () => {},
- onConnect: () => {},
- onClose: () => {},
- open: true,
- }
- const view = render(
-
-
- ,
- )
- view.rerender(
-
-
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status: null,
+ })
+ view.rerender({
+ status: { ...publicationHub, state: "disconnected" },
+ })
expect(screen.queryByRole("textbox", { name: "Hub URL" })).not.toBeInTheDocument()
expect(
screen.getByText("Connect to the hub before publishing this prototype."),
@@ -524,20 +395,8 @@ it("reports disconnect failures and keeps reconnecting to the saved Hub availabl
vi.stubGlobal("fetch", fetch)
const onStatusChange = vi.fn().mockResolvedValue(undefined)
const onConnect = vi.fn()
- const props = {
- config: { name: "Example", prototypeUrl: "http://localhost:4321/", token: "local" },
- frameRef: createRef(),
- onStatusChange,
- onSelectHub: async () => {},
- onConnect,
- onClose: () => {},
- open: true,
- }
- const view = render(
-
-
- ,
- )
+ const props = { onStatusChange, onConnect }
+ const view = renderPrototypeCanvasHubPanel({ ...props, status: publicationHub })
fireEvent.click(screen.getByRole("button", { name: "Disconnect Hub" }))
expect(await screen.findByRole("alert")).toHaveTextContent("Hub could not revoke the connection.")
expect(onStatusChange).not.toHaveBeenCalled()
@@ -548,20 +407,12 @@ it("reports disconnect failures and keeps reconnecting to the saved Hub availabl
fireEvent.click(screen.getByRole("button", { name: "Disconnect Hub" }))
await waitFor(() => expect(onStatusChange).toHaveBeenCalledOnce())
- view.rerender(
-
-
- ,
- )
+ view.rerender({ ...props, status: { ...publicationHub, state: "disconnected" } })
expect(screen.queryByRole("textbox", { name: "Hub URL" })).not.toBeInTheDocument()
expect(screen.queryByRole("button", { name: "Cancel" })).not.toBeInTheDocument()
fireEvent.click(screen.getByRole("button", { name: "Connect to the Hub" }))
expect(onConnect).toHaveBeenCalledOnce()
- view.rerender(
-
-
- ,
- )
+ view.rerender({ ...props, status: publicationHub })
await waitFor(() =>
expect(screen.queryByRole("textbox", { name: "Hub URL" })).not.toBeInTheDocument(),
)
@@ -573,26 +424,18 @@ it("keeps a repository connection when configuration differs and requires an exp
const onStatusChange = vi.fn().mockResolvedValue(undefined)
const fetch = vi.fn().mockResolvedValue(Response.json({ state: "disconnected" }))
vi.stubGlobal("fetch", fetch)
- const view = render(
-
- ()}
- status={{
- state: "undiscovered",
- repository: "github/prototype",
- branch: "prototype/uncommitted",
- hubOrigin: "https://previous.example.com",
- discovery: { state: "valid", origin: "https://configured.example.com", mismatch: true },
- }}
- onStatusChange={onStatusChange}
- onSelectHub={onSelectHub}
- open
- onConnect={() => {}}
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "New prototype", prototypeUrl: "http://localhost:4321/", token: "local" },
+ status: {
+ state: "undiscovered",
+ repository: "github/prototype",
+ branch: "prototype/uncommitted",
+ hubOrigin: "https://previous.example.com",
+ discovery: { state: "valid", origin: "https://configured.example.com", mismatch: true },
+ },
+ onStatusChange,
+ onSelectHub,
+ })
expect(screen.getByText(/Your repository connection is ready/)).toBeInTheDocument()
expect(screen.getByRole("button", { name: "Disconnect Hub" })).toBeInTheDocument()
expect(screen.getByRole("alert")).toHaveTextContent("Your connection has not changed")
@@ -623,24 +466,18 @@ it("keeps pending approval and configuration out of the sidebar", () => {
vi.stubGlobal("fetch", fetch)
const onStatusChange = vi.fn().mockResolvedValue(undefined)
const onSelectHub = vi.fn().mockResolvedValue(undefined)
- const view = render(
-
- ()}
- status={{
- ...publicationHub,
- state: "pairing",
- pairing: { verificationUrl: "https://hub.example.com/canvas/pair/123", userCode: "123" },
- }}
- onStatusChange={onStatusChange}
- onSelectHub={onSelectHub}
- onConnect={() => {}}
- onClose={() => {}}
- open
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status: {
+ ...publicationHub,
+ state: "pairing",
+ pairing: {
+ verificationUrl: "https://hub.example.com/canvas/pair/123",
+ userCode: "123",
+ },
+ },
+ onStatusChange,
+ onSelectHub,
+ })
expect(screen.queryByRole("textbox", { name: "Hub URL" })).not.toBeInTheDocument()
expect(screen.queryByRole("textbox", { name: "Approval URL" })).not.toBeInTheDocument()
expect(screen.queryByRole("link", { name: "Connect to the Hub" })).not.toBeInTheDocument()
@@ -657,20 +494,10 @@ it("offers an explicit local switch with a warning when the selected Hub cannot
vi.fn().mockResolvedValue(Response.json({ error: "Hub is offline." }, { status: 503 })),
)
const onSelectHub = vi.fn().mockResolvedValue(undefined)
- const view = render(
-
- ()}
- status={{ ...publicationHub, state: "unavailable" }}
- onStatusChange={async () => {}}
- onSelectHub={onSelectHub}
- onConnect={() => {}}
- onClose={() => {}}
- open
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ status: { ...publicationHub, state: "unavailable" },
+ onSelectHub,
+ })
fireEvent.click(screen.getByRole("button", { name: "Disconnect Hub" }))
expect(await screen.findByText(/The previous connection may still be active/)).toHaveAttribute(
"role",
@@ -692,6 +519,9 @@ it("offers an explicit local switch with a warning when the selected Hub cannot
it("creates Hub conversations and supports existing-thread actions", async () => {
const paths: { path: string; method: string }[] = []
+ const recoveryDetail = "Hub is temporarily unavailable. Retry saving your comment."
+ let saveUnavailable = true
+ let savedRoot: typeof octocatRootComment | null = null
let finishReply!: (response: Response) => void
const nonce = "00000000-0000-4000-8000-000000000000"
vi.spyOn(crypto, "randomUUID").mockReturnValue(nonce)
@@ -711,32 +541,48 @@ it("creates Hub conversations and supports existing-thread actions", async () =>
const path = typeof input === "string" ? input : input instanceof URL ? input.href : input.url
paths.push({ path, method: options?.method || "GET" })
if (path === "/api/hub/events") throw new Error("Live connection unavailable")
+ if (path === "/api/hub/status")
+ return Promise.resolve(
+ Response.json({
+ ...publicationHub,
+ state: "connected",
+ repository: "github/prototype",
+ branch: "prototype/welcome",
+ prototype: { ...importedPrototype, repositoryId: 2001 },
+ }),
+ )
if (path === "/api/hub/comments/1/replies")
return new Promise((resolve) => {
finishReply = resolve
})
- if (path === "/api/hub/comments" && options?.method === "POST")
+ if (path === "/api/hub/comments" && options?.method === "POST" && saveUnavailable)
+ return Promise.resolve(Response.json({ error: recoveryDetail }, { status: 503 }))
+ if (path === "/api/hub/comments" && options?.method === "POST") {
+ savedRoot = {
+ ...octocatRootComment,
+ id: 2,
+ body: "Please update this heading.",
+ activityVersion: 1,
+ }
return Promise.resolve(
new Response(
JSON.stringify({
- comments: [
- {
- ...octocatRootComment,
- id: 2,
- body: "Please update this heading.",
- activityVersion: 1,
- },
- ],
+ comments: [savedRoot],
}),
{ status: 201, headers: { "Content-Type": "application/json" } },
),
)
+ }
return Promise.resolve(
new Response(
JSON.stringify(
path === "/api/hub/comments"
? {
- comments: [octocatRootComment, resolvedRootComment],
+ comments: [
+ octocatRootComment,
+ resolvedRootComment,
+ ...(savedRoot ? [savedRoot] : []),
+ ],
hasMore: false,
nextCursor: null,
}
@@ -747,48 +593,43 @@ it("creates Hub conversations and supports existing-thread actions", async () =>
)
}),
)
- const view = render(
-
-
- {}}
- onSelectHub={async () => {}}
- open
- onConnect={() => {}}
- onClose={onClose}
- />
- ,
+ },
+ },
+ onClose,
+ },
+ ,
)
const commentsToggle = await screen.findByRole("button", { name: /^Comments, 1/ })
const hubPanel = screen.getByRole("complementary", { name: "Hub" })
@@ -959,13 +800,15 @@ it("creates Hub conversations and supports existing-thread actions", async () =>
fireEvent.click(
await screen.findByRole("menuitem", { name: reviewCommentsCopy.commentOnElementLabel }),
)
- expect(postMessage).toHaveBeenLastCalledWith(
- {
- type: "replica:canvas:select",
- nonce,
- mode: "element",
- },
- "http://localhost:4321",
+ await waitFor(() =>
+ expect(postMessage).toHaveBeenLastCalledWith(
+ {
+ type: "replica:canvas:select",
+ nonce,
+ mode: "element",
+ },
+ "http://localhost:4321",
+ ),
)
expect(
screen.getAllByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel }),
@@ -987,6 +830,14 @@ it("creates Hub conversations and supports existing-thread actions", async () =>
target: { value: "Please update this heading." },
})
fireEvent.click(screen.getByRole("button", { name: reviewCommentsCopy.submitLabel }))
+ const composer = screen.getByRole("dialog", { name: reviewCommentsCopy.composerHeading })
+ expect(await within(composer).findByRole("alert")).toHaveTextContent(recoveryDetail)
+ expect(within(composer).getByRole("alert")).toBeVisible()
+ expect(
+ within(composer).getByRole("textbox", { name: reviewCommentsCopy.composerLabel }),
+ ).toHaveValue("Please update this heading.")
+ saveUnavailable = false
+ fireEvent.click(within(composer).getByRole("button", { name: reviewCommentsCopy.submitLabel }))
await waitFor(() => expect(paths).toContainEqual({ path: "/api/hub/comments", method: "POST" }))
expect(
await screen.findByRole("dialog", { name: reviewCommentsCopy.threadHeading }),
@@ -1032,78 +883,6 @@ it("creates Hub conversations and supports existing-thread actions", async () =>
view.unmount()
})
-it("blocks new root comments when the local checkout differs from the imported Build", async () => {
- vi.stubGlobal(
- "fetch",
- vi.fn((input: RequestInfo | URL) => {
- const path = typeof input === "string" ? input : input instanceof URL ? input.href : input.url
- if (path === "/api/hub/events") throw new Error("Live connection unavailable")
- return Promise.resolve(
- new Response(JSON.stringify({ comments: [], hasMore: false, nextCursor: null }), {
- status: 200,
- headers: { "Content-Type": "application/json" },
- }),
- )
- }),
- )
-
- const view = render(
-
- ()}
- status={{
- state: "connected",
- repository: "github/prototype",
- branch: "prototype/welcome",
- commitSha: "b".repeat(40),
- hubOrigin: "https://hub.example.com",
- prototype: {
- id: 1,
- repositoryId: 2001,
- branch: "prototype/welcome",
- name: "Welcome",
- description: null,
- viewerLogin: "octocat",
- registered: true,
- canEdit: true,
- canRegister: true,
- published: true,
- buildState: "successful",
- versionCount: 1,
- build: {
- url: "https://hub.example.com/repositories/2001/prototypes/1?build=1",
- number: 1,
- commitSha: "a".repeat(40),
- publishedAt: "2026-09-14T12:00:00Z",
- author: { login: "octocat", name: null, avatarUrl: null },
- },
- },
- }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- open
- onConnect={() => {}}
- onClose={() => {}}
- />
- ,
- )
-
- fireEvent.click(await screen.findByRole("button", { name: /^Comments, 0/ }))
- expect(
- await screen.findByText("New comments are available when the local checkout matches Build #1."),
- ).toBeInTheDocument()
- expect(screen.getByRole("button", { name: reviewCommentsCopy.commentMenuLabel })).toBeDisabled()
- const commentsSidebar = screen
- .getByRole("complementary", { name: reviewCommentsCopy.heading })
- .closest(".canvas-comments-sidebar-shell")
- expect(commentsSidebar).toHaveAttribute("data-open", "true")
- fireEvent.click(screen.getByRole("button", { name: reviewCommentsCopy.closeLabel }))
- expect(commentsSidebar).toHaveAttribute("data-open", "false")
- expect(commentsSidebar).toHaveAttribute("aria-hidden", "true")
- view.unmount()
-})
-
it("discards stale comments and metadata edits when the checkout changes", async () => {
let resolveOld!: (response: Response) => void
let requests = 0
@@ -1149,34 +928,20 @@ it("discards stale comments and metadata edits when the checkout changes", async
}
const props = {
config: { name: "Welcome", prototypeUrl: "http://localhost:4321/", token: "local" },
- frameRef: createRef(),
- onStatusChange: async () => {},
- onSelectHub: async () => {},
- open: true,
- onConnect: () => {},
- onClose: () => {},
}
- const view = render(
-
-
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({ ...props, status })
await waitFor(() => expect(requests).toBeGreaterThan(0))
const oldRequests = requests
fireEvent.click(screen.getByRole("button", { name: "Edit details" }))
fireEvent.change(screen.getByRole("textbox", { name: "Name" }), { target: { value: "Draft" } })
- view.rerender(
-
-
- ,
- )
+ view.rerender({
+ ...props,
+ status: {
+ ...status,
+ branch: "prototype/second",
+ prototype: { ...status.prototype, id: 2, branch: "prototype/second", name: "Second" },
+ },
+ })
await waitFor(() => expect(requests).toBeGreaterThan(oldRequests))
expect(screen.queryByRole("textbox", { name: "Name" })).not.toBeInTheDocument()
await act(async () => {
@@ -1192,6 +957,329 @@ it("discards stale comments and metadata edits when the checkout changes", async
view.unmount()
})
+describe("PrototypeCanvasHubPanel()", () => {
+ it.each(["comments", "error"] as const)(
+ "keeps current-source feedback visible when stale %s arrive",
+ async (staleResult) => {
+ let finishOld!: (response: Response) => void
+ const fetch = vi.fn((path: string) => {
+ if (path === "/api/hub/events") throw new Error("Live connection unavailable")
+ if (path.includes("local_revision_id=11"))
+ return new Promise((resolve) => {
+ finishOld = resolve
+ })
+ return Promise.resolve(
+ Response.json({
+ comments: [
+ {
+ ...octocatRootComment,
+ body: "Current source comment.",
+ draftRevisionId: 12,
+ buildNumber: null,
+ },
+ ],
+ hasMore: false,
+ nextCursor: null,
+ }),
+ )
+ })
+ vi.stubGlobal("fetch", fetch)
+ const status: HubStatus = {
+ ...publicationHub,
+ state: "connected",
+ prototype: importedPrototype,
+ reviewRevision: {
+ ...publicationHub.reviewRevision!,
+ id: 11,
+ buildNumber: null,
+ clean: false,
+ },
+ }
+
+ const view = renderPrototypeCanvasHubPanel({ status })
+ await waitFor(() => expect(finishOld).toBeTypeOf("function"))
+ fireEvent.click(screen.getByRole("button", { name: /^Comments, 0/ }))
+ view.rerender({
+ status: {
+ ...status,
+ reviewRevision: { ...status.reviewRevision!, id: 12, treeSha: "c".repeat(40) },
+ },
+ })
+ const sidebar = screen.getByRole("complementary", { name: reviewCommentsCopy.heading })
+ expect(await within(sidebar).findByText("Current source comment.")).toBeVisible()
+ await act(async () => {
+ finishOld(
+ staleResult === "error"
+ ? Response.json({ error: "Old source is unavailable." }, { status: 503 })
+ : Response.json({
+ comments: [
+ {
+ ...octocatRootComment,
+ body: "Old source comment.",
+ draftRevisionId: 11,
+ buildNumber: null,
+ },
+ ],
+ hasMore: false,
+ nextCursor: null,
+ }),
+ )
+ await Promise.resolve()
+ })
+ expect(within(sidebar).getByText("Current source comment.")).toBeVisible()
+ expect(within(sidebar).queryByText("Old source comment.")).not.toBeInTheDocument()
+ expect(within(sidebar).queryByRole("alert")).not.toBeInTheDocument()
+ expect(within(sidebar).queryByText(reviewCommentsCopy.loadingLabel)).not.toBeInTheDocument()
+ view.unmount()
+ },
+ )
+
+ it("keeps local feedback editable before discovery when source capture fails", async () => {
+ const local = {
+ ...octocatRootComment,
+ body: "Local feedback before the first publish.",
+ buildNumber: null,
+ buildPath: null,
+ draftRevisionId: 11,
+ viewerLastSeenActivityVersion: octocatRootComment.activityVersion,
+ }
+ vi.stubGlobal(
+ "fetch",
+ vi.fn(() =>
+ Promise.resolve(Response.json({ comments: [local], hasMore: false, nextCursor: null })),
+ ),
+ )
+ const view = renderPrototypeCanvasHubPanel({
+ status: {
+ ...publicationHub,
+ state: "undiscovered",
+ repositoryAuthorized: true,
+ viewerLogin: "octocat",
+ prototype: undefined,
+ reviewError: "Commit or discard submodule changes before commenting.",
+ reviewRevision: undefined,
+ },
+ })
+ fireEvent.click(await screen.findByRole("button", { name: /^Comments, 1/ }))
+ fireEvent.click(await screen.findByRole("button", { name: /Local feedback before/ }))
+ const conversation = await screen.findByRole("dialog", {
+ name: reviewCommentsCopy.threadHeading,
+ })
+ expect(within(conversation).queryByRole("textbox")).not.toBeInTheDocument()
+ expect(
+ within(conversation).queryByRole("button", { name: reviewCommentsCopy.resolveLabel }),
+ ).not.toBeInTheDocument()
+ expect(
+ within(conversation).queryByRole("button", { name: reviewCommentsCopy.addReactionLabel }),
+ ).not.toBeInTheDocument()
+ fireEvent.click(
+ within(conversation).getByRole("button", {
+ name: reviewCommentsCopy.commentActionsLabel.replace("%{author}", "@octocat"),
+ }),
+ )
+ expect(
+ await screen.findByRole("menuitem", { name: reviewCommentsCopy.editLabel }),
+ ).toBeEnabled()
+ expect(screen.getByRole("menuitem", { name: reviewCommentsCopy.deleteLabel })).toBeEnabled()
+ expect(
+ screen.queryByRole("menuitem", { name: reviewCommentsCopy.markUnreadLabel }),
+ ).not.toBeInTheDocument()
+ expect(within(conversation).queryByRole("link", { name: /build/i })).not.toBeInTheDocument()
+ fireEvent.click(screen.getByRole("menuitem", { name: reviewCommentsCopy.editLabel }))
+ expect(screen.getByRole("textbox", { name: reviewCommentsCopy.editCommentLabel })).toHaveValue(
+ local.body,
+ )
+ view.unmount()
+ })
+
+ it.each(["draft revision", "published Build"] as const)(
+ "saves once to the selected %s after source changes and a preview reload",
+ async (target) => {
+ const nonce = "00000000-0000-4000-8000-000000000022"
+ vi.spyOn(crypto, "randomUUID").mockReturnValue(nonce)
+ const frameRef = createRef()
+ const onFrameLoad = vi.fn()
+ const originalRevision = {
+ ...publicationHub.reviewRevision!,
+ id: target === "draft revision" ? 11 : null,
+ buildNumber: target === "published Build" ? 1 : null,
+ clean: target === "published Build",
+ }
+ let finishPreparation!: (response: Response) => void
+ let finishSave!: (response: Response) => void
+ let savedRoot: typeof octocatRootComment | null = null
+ const fetch = vi.fn((input: RequestInfo | URL, options?: RequestInit) => {
+ const path =
+ typeof input === "string" ? input : input instanceof URL ? input.href : input.url
+ if (path === "/api/hub/events") throw new Error("Live connection unavailable")
+ if (path === "/api/hub/status")
+ return target === "draft revision"
+ ? new Promise((resolve) => {
+ finishPreparation = resolve
+ })
+ : Promise.resolve(Response.json(status))
+ if (path === "/api/hub/comments" && options?.method === "POST")
+ return new Promise((resolve) => {
+ finishSave = resolve
+ })
+ return Promise.resolve(
+ Response.json({
+ comments: savedRoot && target === "published Build" ? [savedRoot] : [],
+ hasMore: false,
+ nextCursor: null,
+ }),
+ )
+ })
+ vi.stubGlobal("fetch", fetch)
+ const onStatusChange = vi
+ .fn<() => Promise>()
+ .mockRejectedValue(new Error("Background status refresh is unavailable."))
+ const status: HubStatus = {
+ ...publicationHub,
+ state: "connected",
+ prototype:
+ target === "draft revision" ? { ...importedPrototype, build: null } : importedPrototype,
+ reviewRevision: originalRevision,
+ }
+ const view = renderPrototypeCanvasHubPanel(
+ {
+ frameRef,
+ onStatusChange,
+ status: {
+ ...status,
+ reviewRevision:
+ target === "draft revision"
+ ? { ...originalRevision, id: 10, treeSha: "e".repeat(40) }
+ : originalRevision,
+ },
+ },
+ ,
+ )
+ fireEvent.click(await screen.findByRole("button", { name: /^Comments, 0/ }))
+ await waitFor(() => expect(onFrameLoad).toHaveBeenCalled())
+ act(() => {
+ window.dispatchEvent(
+ new MessageEvent("message", {
+ origin: "http://localhost:4321",
+ source: frameRef.current?.contentWindow,
+ data: {
+ type: "replica:canvas:ready",
+ nonce,
+ protocolVersion: 1,
+ route: { pathname: "/", search: "", hash: "" },
+ },
+ }),
+ )
+ })
+ fireEvent.click(screen.getByRole("button", { name: reviewCommentsCopy.commentMenuLabel }))
+ fireEvent.click(
+ await screen.findByRole("menuitem", { name: reviewCommentsCopy.commentOnElementLabel }),
+ )
+ if (target === "draft revision") {
+ await waitFor(() => expect(finishPreparation).toBeTypeOf("function"))
+ await act(async () => {
+ finishPreparation(Response.json(status))
+ await Promise.resolve()
+ })
+ }
+ await screen.findByRole("button", { name: reviewCommentsCopy.cancelSelectionLabel })
+ act(() => {
+ window.dispatchEvent(
+ new MessageEvent("message", {
+ origin: "http://localhost:4321",
+ source: frameRef.current?.contentWindow,
+ data: {
+ type: "replica:canvas:selected",
+ nonce,
+ anchor: octocatRootComment.anchor,
+ },
+ }),
+ )
+ })
+ fireEvent.change(screen.getByRole("textbox", { name: reviewCommentsCopy.composerLabel }), {
+ target: { value: "Keep the comment on the source I selected." },
+ })
+ view.rerender({
+ status: {
+ ...status,
+ commitSha: "c".repeat(40),
+ prototype: {
+ ...importedPrototype,
+ build: { ...importedPrototype.build!, number: 2, commitSha: "c".repeat(40) },
+ },
+ reviewRevision: {
+ ...originalRevision,
+ id: 12,
+ buildNumber: null,
+ treeSha: "d".repeat(40),
+ commitSha: "c".repeat(40),
+ clean: false,
+ },
+ },
+ })
+ fireEvent.load(frameRef.current!)
+ expect(screen.getByRole("textbox", { name: reviewCommentsCopy.composerLabel })).toHaveValue(
+ "Keep the comment on the source I selected.",
+ )
+ const submit = screen.getByRole("button", { name: reviewCommentsCopy.submitLabel })
+ fireEvent.click(submit)
+ await waitFor(() => expect(finishSave).toBeTypeOf("function"))
+ fireEvent.click(submit)
+ const saves = fetch.mock.calls.filter(
+ ([input, options]) => input === "/api/hub/comments" && options?.method === "POST",
+ )
+ expect(saves).toHaveLength(1)
+ expect(JSON.parse(saves[0]![1]!.body as string)).toEqual({
+ review_revision: originalRevision,
+ review_comment: {
+ body: "Keep the comment on the source I selected.",
+ anchor: octocatRootComment.anchor,
+ },
+ })
+ savedRoot = {
+ ...octocatRootComment,
+ id: 22,
+ draftRevisionId: originalRevision.id,
+ buildNumber: originalRevision.buildNumber,
+ buildPath: target === "draft revision" ? null : octocatRootComment.buildPath,
+ body: "Keep the comment on the source I selected.",
+ }
+ await act(async () => {
+ finishSave(
+ Response.json(
+ {
+ comments: [savedRoot],
+ },
+ { status: 201 },
+ ),
+ )
+ await Promise.resolve()
+ })
+ await waitFor(() =>
+ expect(
+ screen.queryByRole("dialog", { name: reviewCommentsCopy.composerHeading }),
+ ).not.toBeInTheDocument(),
+ )
+ if (target === "published Build") {
+ const sidebar = screen.getByRole("complementary", { name: reviewCommentsCopy.heading })
+ expect(await within(sidebar).findByText(savedRoot.body!)).toBeVisible()
+ } else {
+ expect(screen.queryByText(savedRoot.body!)).not.toBeInTheDocument()
+ await waitFor(() =>
+ expect(screen.getByRole("button", { name: /^Comments, 0/ })).toHaveFocus(),
+ )
+ }
+ expect(screen.queryByText(reviewCommentsCopy.createErrorLabel)).not.toBeInTheDocument()
+ expect(
+ fetch.mock.calls.filter(
+ ([input, options]) => input === "/api/hub/comments" && options?.method === "POST",
+ ),
+ ).toHaveLength(1)
+ view.unmount()
+ },
+ )
+})
+
it("does not mix conversations from two Hubs for the same repository and branch", async () => {
let requests = 0
vi.stubGlobal(
@@ -1235,25 +1323,11 @@ it("does not mix conversations from two Hubs for the same repository and branch"
}
const props = {
config: { name: "First", prototypeUrl: "http://localhost:4321/", token: "local" },
- frameRef: createRef(),
- onStatusChange: async () => {},
- onSelectHub: async () => {},
- open: true,
- onConnect: () => {},
- onClose: () => {},
}
- const view = render(
-
-
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({ ...props, status })
await screen.findByRole("button", { name: /^Comments, 1/ })
- view.rerender(
-
-
- ,
- )
+ view.rerender({ ...props, status: { ...status, hubOrigin: "https://second.example.com" } })
await screen.findByRole("button", { name: /^Comments, 0/ })
expect(requests).toBeGreaterThan(1)
@@ -1261,20 +1335,10 @@ it("does not mix conversations from two Hubs for the same repository and branch"
})
it("offers the shared connection dialog instead of guessing a Hub URL", () => {
- const view = render(
-
- ()}
- status={{ state: "unconfigured" }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- open
- onConnect={() => {}}
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "Example", prototypeUrl: "http://localhost:6006/", token: "local" },
+ status: { state: "unconfigured" },
+ })
expect(screen.queryByRole("textbox", { name: "Hub URL" })).not.toBeInTheDocument()
expect(screen.queryByText(/replica\.localhost/)).not.toBeInTheDocument()
@@ -1285,25 +1349,16 @@ it("offers the shared connection dialog instead of guessing a Hub URL", () => {
it("changes the selected Hub before connecting", async () => {
vi.stubGlobal("fetch", vi.fn().mockResolvedValue(Response.json({ state: "disconnected" })))
const onSelectHub = vi.fn().mockResolvedValue(undefined)
- const view = render(
-
- ()}
- status={{
- state: "unavailable",
- hubOrigin: "http://replica.localhost:19500",
- repository: "github/prototype",
- branch: "prototype/welcome",
- }}
- onStatusChange={async () => {}}
- onSelectHub={onSelectHub}
- open
- onConnect={() => {}}
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "Example", prototypeUrl: "http://localhost:6006/", token: "local" },
+ status: {
+ state: "unavailable",
+ hubOrigin: "http://replica.localhost:19500",
+ repository: "github/prototype",
+ branch: "prototype/welcome",
+ },
+ onSelectHub,
+ })
expect(screen.getByText("http://replica.localhost:19500")).toBeInTheDocument()
fireEvent.click(screen.getByRole("button", { name: "Disconnect Hub" }))
@@ -1333,20 +1388,11 @@ it("resets only the editable URL and preserves the selected Hub until saved", as
),
)
vi.stubGlobal("fetch", fetch)
- const view = render(
-
- ()}
- status={{ state: "unavailable", hubOrigin: "https://selected.example.com" }}
- onStatusChange={async () => {}}
- onSelectHub={onSelectHub}
- onConnect={() => {}}
- open
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "Example", prototypeUrl: "http://localhost:6006/", token: "local" },
+ status: { state: "unavailable", hubOrigin: "https://selected.example.com" },
+ onSelectHub,
+ })
vi.stubGlobal("fetch", fetch.mockResolvedValueOnce(Response.json({ state: "disconnected" })))
fireEvent.click(screen.getByRole("button", { name: "Disconnect Hub" }))
await screen.findByRole("textbox", { name: "Hub URL" })
@@ -1377,20 +1423,11 @@ it.each(["absent", "unreachable"])(
vi.fn().mockResolvedValue(new Response(JSON.stringify({ discovery: { state } }))),
)
const onSelectHub = vi.fn()
- const view = render(
-
- ()}
- status={{ state: "unavailable", hubOrigin: "https://selected.example.com" }}
- onStatusChange={async () => {}}
- onSelectHub={onSelectHub}
- onConnect={() => {}}
- open
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "Example", prototypeUrl: "http://localhost:6006/", token: "local" },
+ status: { state: "unavailable", hubOrigin: "https://selected.example.com" },
+ onSelectHub,
+ })
const fetch = vi.mocked(globalThis.fetch)
fetch.mockResolvedValueOnce(Response.json({ state: "disconnected" }))
fireEvent.click(screen.getByRole("button", { name: "Disconnect Hub" }))
@@ -1411,26 +1448,17 @@ it.each(["absent", "unreachable"])(
it("uses one primary connection action without inline Hub configuration", () => {
const onConnect = vi.fn()
- const view = render(
-
- ()}
- status={{
- state: "disconnected",
- repository: "github/prototype",
- branch: "prototype/welcome",
- hubOrigin: "https://hub.example.com",
- discovery: { state: "absent" },
- }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={onConnect}
- open
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "Example", prototypeUrl: "http://localhost:6006/", token: "local" },
+ status: {
+ state: "disconnected",
+ repository: "github/prototype",
+ branch: "prototype/welcome",
+ hubOrigin: "https://hub.example.com",
+ discovery: { state: "absent" },
+ },
+ onConnect,
+ })
const button = screen.getByRole("button", { name: "Connect to the Hub" })
expect(screen.queryByRole("button", { name: "Retry discovery" })).not.toBeInTheDocument()
diff --git a/hub/app/javascript/features/prototype-canvas-hub-panel/index.tsx b/hub/app/javascript/features/prototype-canvas-hub-panel/index.tsx
index 26ba4f4d..e0e6d10c 100644
--- a/hub/app/javascript/features/prototype-canvas-hub-panel/index.tsx
+++ b/hub/app/javascript/features/prototype-canvas-hub-panel/index.tsx
@@ -32,19 +32,19 @@ import type { ReviewComment, ReviewReactionContent } from "@utils/review-comment
import type { ReviewCommentMutation } from "@hooks/use-review-comments/types"
import { reviewThreadMatchesFilters } from "@utils/review-thread-matches-filters"
import { MENTION_CANDIDATES_SCHEMA } from "@utils/mention-candidate/schemas"
-
import { request } from "@utils/prototype-canvas-request"
import { copy } from "@utils/prototype-canvas/en"
import { BranchPublication } from "@components/prototype-branch-publication"
import { CommentingRecovery } from "@components/prototype-commenting-recovery"
-import { CanvasReviewOverlays } from "../prototype-review-overlays"
import { useCommentingRecovery } from "@hooks/use-canvas-commenting-recovery"
import type { Publication } from "@utils/resolve-prototype-publication"
import { publicationCopy } from "@utils/resolve-prototype-publication/en"
-import { PublishSettings } from "../prototype-publish-settings"
import type { usePublishPreference } from "@hooks/use-canvas-publish-preference"
import type { CanvasConfig, HubStatus } from "@utils/prototype-canvas/types"
+import { CanvasReviewOverlays } from "../prototype-review-overlays"
+import { PublishSettings } from "../prototype-publish-settings"
+
import "./styles.css"
type Props = {
@@ -83,7 +83,7 @@ function reviewRoute(value: unknown): ReviewRoute | null {
return { pathname: value.pathname, search: value.search, hash: value.hash }
}
-export function HubPanel({
+export function PrototypeCanvasHubPanel({
config,
frameRef,
onRouteChange,
@@ -140,6 +140,7 @@ export function HubPanel({
const [previewRoute, setPreviewRoute] = useState(null)
const [selected, setSelected] = useState(null)
const [error, setError] = useState("")
+ const [createError, setCreateError] = useState("")
const [rateLimitMessage, setRateLimitMessage] = useState("")
const [disconnectWarning, setDisconnectWarning] = useState("")
const [loading, setLoading] = useState(false)
@@ -169,6 +170,7 @@ export function HubPanel({
const [bridgeReady, setBridgeReady] = useState(false)
const [bridgeProblem, setBridgeProblem] = useState("")
const [selectionMode, setSelectionMode] = useState<"element" | "area" | null>(null)
+ const [preparingSelection, setPreparingSelection] = useState(false)
const [selectedAnchor, setSelectedAnchor] = useState(null)
const [selectionFailure, setSelectionFailure] = useState<
"element-unavailable" | "area-too-small" | "area-unavailable" | null
@@ -178,12 +180,21 @@ export function HubPanel({
const mutationRef = useRef(false)
const commentMutationRevisionRef = useRef(0)
const commentMutationPendingRef = useRef(false)
+ const commentLoadRevisionRef = useRef(0)
+ const commentIdentityRef = useRef("")
const bridgeNonceRef = useRef("")
+ const selectionRevisionRef = useRef(undefined)
+ const selectionRequestRef = useRef(0)
const closeButtonRef = useRef(null)
+ const commentsButtonRef = useRef(null)
+ const restoreReviewFocusRef = useRef(false)
const identityRef = useRef("")
const previousOpenRef = useRef(open)
const refreshTimer = useRef(undefined)
const identity = `${status?.hubOrigin ?? ""}/${status?.repository ?? ""}/${status?.branch ?? ""}/${status?.state === "connected" ? (status.prototype?.id ?? "") : ""}`
+ const reviewRevision = status?.reviewRevision
+ const draftRevisionId = reviewRevision?.id
+ const commentIdentity = `${identity}/revision/${draftRevisionId ?? ""}`
const selectedHubOrigin = status
? (status.discovery?.mismatch && status.discovery.origin) || status.hubOrigin || ""
: null
@@ -220,8 +231,8 @@ export function HubPanel({
token: config.token,
})
const comments = useMemo(
- () => (commentState.identity === identity ? commentState.items : []),
- [commentState, identity],
+ () => (commentState.identity === commentIdentity ? commentState.items : []),
+ [commentState, commentIdentity],
)
const threads = useMemo(() => groupReviewCommentsIntoThreads(comments), [comments])
const participants = useMemo(() => {
@@ -262,8 +273,7 @@ export function HubPanel({
}
return resolutions
}, [bridgeReady, markers, previewRoute, threads])
- const active =
- status?.state === "connected" ? threads.find((thread) => thread.root.id === selected) : null
+ const active = threads.find((thread) => thread.root.id === selected)
const prototype = status?.state === "connected" ? status.prototype : null
const needsConnection =
status?.state === "disconnected" ||
@@ -282,26 +292,30 @@ export function HubPanel({
const canManage = prototype?.canEdit && prototype.registered
const prototypeId = prototype?.id
const currentBuild = prototype?.build ?? null
+ const viewerLogin = prototype?.viewerLogin || status?.viewerLogin
const visibleThreads = useMemo(
() =>
- prototype
+ viewerLogin
? threads.filter((thread) =>
reviewThreadMatchesFilters(thread, {
filters,
- viewerLogin: prototype.viewerLogin,
- selectedBuildNumber: currentBuild?.number,
+ viewerLogin,
+ selectedBuildNumber: draftRevisionId ? null : currentBuild?.number,
+ selectedDraftRevisionId: draftRevisionId,
route: previewRoute,
}),
)
: threads,
- [currentBuild?.number, filters, previewRoute, prototype, threads],
+ [currentBuild?.number, draftRevisionId, filters, previewRoute, viewerLogin, threads],
)
const visibleThreadCount = visibleThreads.length
const hasUnreadVisibleThreads = visibleThreads.some((thread) => thread.unread)
- const canCreateComment = Boolean(
- currentBuild && status?.commitSha && status.commitSha === currentBuild.commitSha,
- )
- const selectionBlocked = selectedAnchor !== null || draftActive || mutation !== null
+ const canCreateComment = Boolean(reviewRevision && !status?.reviewError)
+ const canLoadComments =
+ Boolean(status?.repositoryAuthorized && status.branch && status.viewerLogin) ||
+ Boolean(prototype)
+ const selectionBlocked =
+ selectedAnchor !== null || draftActive || mutation !== null || preparingSelection
const hubVisible = open && !commentsOpen
const reviewControlsTarget =
typeof document === "undefined" ? null : document.getElementById("canvas-review-controls")
@@ -326,11 +340,23 @@ export function HubPanel({
: null
useLayoutEffect(() => {
identityRef.current = identity
+ selectionRequestRef.current += 1
+ restoreReviewFocusRef.current = false
return () => window.clearTimeout(refreshTimer.current)
}, [identity])
+ useLayoutEffect(() => {
+ commentIdentityRef.current = commentIdentity
+ commentLoadRevisionRef.current += 1
+ }, [commentIdentity])
useLayoutEffect(() => {
if (open) closeButtonRef.current?.focus({ preventScroll: true })
}, [open])
+ useLayoutEffect(() => {
+ if (!selectedAnchor && !mutation && !draftActive && restoreReviewFocusRef.current) {
+ restoreReviewFocusRef.current = false
+ commentsButtonRef.current?.focus({ preventScroll: true })
+ }
+ }, [selectedAnchor, mutation, draftActive])
useEffect(() => {
const wasOpen = previousOpenRef.current
previousOpenRef.current = open
@@ -367,27 +393,42 @@ export function HubPanel({
)
const loadComments = useCallback(async () => {
- if (!prototypeId || commentMutationPendingRef.current) return
- const requestedIdentity = identity
+ if (
+ !canLoadComments ||
+ commentMutationPendingRef.current ||
+ commentIdentityRef.current !== commentIdentity
+ )
+ return
+ const requestedIdentity = commentIdentity
+ const loadRevision = ++commentLoadRevisionRef.current
const commentMutationRevision = commentMutationRevisionRef.current
setLoading(true)
+ setCommentsLoadFailed(false)
try {
const loaded: ReviewComment[] = []
let nextCursor: string | null = null
for (let pageNumber = 0; pageNumber < 100; pageNumber += 1) {
const page = REVIEW_COMMENT_PAGE_SCHEMA.parse(
await request(
- `/api/hub/comments${nextCursor ? `?cursor=${encodeURIComponent(nextCursor)}` : ""}`,
+ `/api/hub/comments${
+ nextCursor || draftRevisionId
+ ? `?${new URLSearchParams({
+ ...(nextCursor ? { cursor: nextCursor } : {}),
+ ...(draftRevisionId ? { local_revision_id: String(draftRevisionId) } : {}),
+ })}`
+ : ""
+ }`,
config.token,
),
)
loaded.push(...page.comments)
nextCursor = page.nextCursor
if (!nextCursor) break
- if (pageNumber === 99) throw new Error("Too many review comment pages.")
+ if (pageNumber === 99) throw new Error(copy.commentPagesExceeded)
}
if (
- identityRef.current !== requestedIdentity ||
+ commentIdentityRef.current !== requestedIdentity ||
+ commentLoadRevisionRef.current !== loadRevision ||
commentMutationRevisionRef.current !== commentMutationRevision
)
return
@@ -396,7 +437,8 @@ export function HubPanel({
setError("")
} catch (cause) {
if (
- identityRef.current === requestedIdentity &&
+ commentIdentityRef.current === requestedIdentity &&
+ commentLoadRevisionRef.current === loadRevision &&
commentMutationRevisionRef.current === commentMutationRevision
) {
setCommentsLoadFailed(true)
@@ -404,17 +446,22 @@ export function HubPanel({
}
} finally {
if (
- identityRef.current === requestedIdentity &&
+ commentIdentityRef.current === requestedIdentity &&
+ commentLoadRevisionRef.current === loadRevision &&
commentMutationRevisionRef.current === commentMutationRevision
) {
setLoading(false)
}
}
- }, [config.token, prototypeId, identity])
+ }, [config.token, draftRevisionId, canLoadComments, commentIdentity])
+ const loadCommentsRef = useRef(loadComments)
+ useLayoutEffect(() => {
+ loadCommentsRef.current = loadComments
+ }, [loadComments])
useEffect(() => {
const initial = window.setTimeout(() => {
- setCommentState({ identity, items: [] })
+ setCommentState({ identity: commentIdentityRef.current, items: [] })
setCommentsOpen(false)
setFilters(DEFAULT_REVIEW_COMMENT_FILTERS)
setShowPins(true)
@@ -432,20 +479,27 @@ export function HubPanel({
setMarkers(new Map())
setBridgeReady(false)
setSelectionMode(null)
+ setPreparingSelection(false)
setSelectedAnchor(null)
setSelectionFailure(null)
+ setCreateError("")
setRateLimitMessage("")
setCommentsLoadFailed(false)
- if (prototypeId) void loadComments()
}, 0)
return () => window.clearTimeout(initial)
- }, [identity, prototypeId, loadComments])
+ }, [identity])
+
+ useEffect(() => {
+ if (!canLoadComments) return
+ const initial = window.setTimeout(() => void loadComments(), 0)
+ return () => window.clearTimeout(initial)
+ }, [canLoadComments, loadComments])
useEffect(() => {
- if (!prototypeId) return
+ if (!canLoadComments) return
const interval = window.setInterval(() => void loadComments(), 30_000)
return () => window.clearInterval(interval)
- }, [prototypeId, loadComments])
+ }, [canLoadComments, loadComments])
useEffect(() => {
if (!prototypeId) return
@@ -506,27 +560,76 @@ export function HubPanel({
)
const startSelection = useCallback(
- (mode: "element" | "area") => {
+ async (mode: "element" | "area") => {
if (!bridgeReady || !canCreateComment || selectionBlocked) return
+ const requestedIdentity = identity
+ const selectionRequest = ++selectionRequestRef.current
+ selectionRevisionRef.current = undefined
+ setPreparingSelection(true)
+ setCreateError("")
setSelected(null)
setSelectionFailure(null)
setSelectionMode(mode)
onClose()
- sendBridge("replica:canvas:select", { mode })
+ try {
+ const next = await request("/api/hub/status", config.token)
+ if (
+ identityRef.current !== requestedIdentity ||
+ selectionRequestRef.current !== selectionRequest
+ )
+ return
+ if (
+ (!next.repositoryAuthorized && next.state !== "connected") ||
+ next.prototype?.id !== prototypeId ||
+ next.hubOrigin !== status?.hubOrigin ||
+ next.repository !== status?.repository ||
+ next.branch !== status?.branch ||
+ !next.reviewRevision
+ )
+ throw new Error(next.reviewError || copy.commentPreparationFailed)
+ selectionRevisionRef.current = next.reviewRevision
+ sendBridge("replica:canvas:select", { mode })
+ } catch (cause) {
+ if (
+ identityRef.current === requestedIdentity &&
+ selectionRequestRef.current === selectionRequest
+ ) {
+ setSelectionMode(null)
+ setCreateError(cause instanceof Error ? cause.message : String(cause))
+ }
+ } finally {
+ if (selectionRequestRef.current === selectionRequest) setPreparingSelection(false)
+ }
},
- [bridgeReady, canCreateComment, onClose, selectionBlocked, sendBridge],
+ [
+ bridgeReady,
+ canCreateComment,
+ config.token,
+ identity,
+ onClose,
+ prototypeId,
+ selectionBlocked,
+ sendBridge,
+ status,
+ ],
)
const cancelSelection = useCallback(() => {
if (!selectionMode) return
+ selectionRequestRef.current += 1
+ selectionRevisionRef.current = undefined
+ setPreparingSelection(false)
sendBridge("replica:canvas:cancel-selection")
setSelectionMode(null)
}, [selectionMode, sendBridge])
const clearSelection = useCallback(() => {
+ selectionRequestRef.current += 1
+ selectionRevisionRef.current = undefined
sendBridge("replica:canvas:clear-selection")
setSelectedAnchor(null)
setSelectionFailure(null)
+ setCreateError("")
}, [sendBridge])
useEffect(() => {
@@ -689,8 +792,9 @@ export function HubPanel({
}
}
function onFrameLoad() {
+ selectionRequestRef.current += 1
+ setPreparingSelection(false)
setSelectionMode(null)
- setSelectedAnchor(null)
setSelectionFailure(null)
requestBridgeState()
}
@@ -731,6 +835,7 @@ export function HubPanel({
action?: ReviewCommentMutation,
) {
const requestedIdentity = identity
+ const requestedCommentIdentity = commentIdentity
const updatesImmediately =
action?.kind === "add-reaction" ||
action?.kind === "remove-reaction" ||
@@ -754,15 +859,15 @@ export function HubPanel({
if (updatesImmediately) {
const changed = REVIEW_COMMENT_MUTATION_SCHEMA.parse(result)
setCommentState((previous) => {
- if (previous.identity !== requestedIdentity) return previous
+ if (previous.identity !== requestedCommentIdentity) return previous
const merged = new Map(previous.items.map((comment) => [comment.id, comment]))
for (const comment of changed.comments) merged.set(comment.id, comment)
- return { identity: requestedIdentity, items: [...merged.values()] }
+ return { identity: requestedCommentIdentity, items: [...merged.values()] }
})
}
// Let the conversation clear its saved draft before updating the thread.
if (!updatesImmediately)
- refreshTimer.current = window.setTimeout(() => void loadComments(), 0)
+ refreshTimer.current = window.setTimeout(() => void loadCommentsRef.current(), 0)
return true
} catch (cause) {
if (identityRef.current === requestedIdentity) {
@@ -776,7 +881,7 @@ export function HubPanel({
if (updatesImmediately) {
commentMutationPendingRef.current = false
commentMutationRevisionRef.current += 1
- refreshTimer.current = window.setTimeout(() => void loadComments(), 0)
+ refreshTimer.current = window.setTimeout(() => void loadCommentsRef.current(), 0)
}
mutationRef.current = false
setMutation(null)
@@ -785,18 +890,21 @@ export function HubPanel({
}
async function createComment(body: string) {
- if (!currentBuild || !selectedAnchor || mutationRef.current) return false
+ const selectedRevision = selectionRevisionRef.current
+ if (!selectedRevision || !selectedAnchor || mutationRef.current) return false
const requestedIdentity = identity
+ const requestedCommentIdentity = commentIdentity
mutationRef.current = true
setMutation({ kind: "create" })
setRateLimitMessage("")
+ setCreateError("")
try {
const result = REVIEW_COMMENT_MUTATION_SCHEMA.parse(
await request("/api/hub/comments", config.token, {
method: "POST",
body: JSON.stringify({
+ review_revision: selectedRevision,
review_comment: {
- build_number: currentBuild.number,
body,
anchor: selectedAnchor,
},
@@ -806,18 +914,35 @@ export function HubPanel({
if (identityRef.current !== requestedIdentity) return false
const root = result.comments.find((comment) => comment.kind === "root")
if (!root) return false
- setCommentState((previous) => {
- if (previous.identity !== requestedIdentity) return previous
- const merged = new Map(previous.items.map((comment) => [comment.id, comment]))
- for (const comment of result.comments) merged.set(comment.id, comment)
- return { identity: requestedIdentity, items: [...merged.values()] }
- })
+ const visibleHere = root.buildNumber !== null || root.draftRevisionId === draftRevisionId
+ if (visibleHere) {
+ setCommentState((previous) => {
+ if (previous.identity !== requestedCommentIdentity) return previous
+ const merged = new Map(previous.items.map((comment) => [comment.id, comment]))
+ for (const comment of result.comments) merged.set(comment.id, comment)
+ return { identity: requestedCommentIdentity, items: [...merged.values()] }
+ })
+ }
+ const openThread = visibleHere && commentIdentityRef.current === requestedCommentIdentity
+ restoreReviewFocusRef.current = !openThread
clearSelection()
- setSelected(root.id)
+ if (openThread) setSelected(root.id)
+ void onStatusChange()
+ .then(() => {
+ if (identityRef.current === requestedIdentity) return loadCommentsRef.current()
+ })
+ .catch((cause: unknown) => {
+ if (identityRef.current === requestedIdentity) {
+ const message = cause instanceof Error ? cause.message : String(cause)
+ setError(copy.commentRefreshFailed(message))
+ }
+ })
return true
} catch (cause) {
if (identityRef.current === requestedIdentity) {
- setError(cause instanceof Error ? cause.message : String(cause))
+ const message = cause instanceof Error ? cause.message : String(cause)
+ setError(message)
+ setCreateError(message)
if (cause instanceof Error && "statusCode" in cause && cause.statusCode === 429)
setRateLimitMessage(cause.message)
}
@@ -980,7 +1105,7 @@ export function HubPanel({
return (
{commentingRecovery.visible ? : null}
- {prototype && reviewControlsTarget
+ {canLoadComments && reviewControlsTarget
? createPortal(
startSelection("area")}
- onStartElementSelection={() => startSelection("element")}
+ onStartAreaSelection={() => void startSelection("area")}
+ onStartElementSelection={() => void startSelection("element")}
/>
{visibleThreadCount}
@@ -1027,7 +1153,7 @@ export function HubPanel({
reviewControlsTarget,
)
: null}
- {showPins && visibleThreads.length && bridgeReady ? (
+ {showPins && visibleThreads.length && bridgeReady && !selectionMode ? (
) : null}
- {prototype ? (
+ {canLoadComments ? (
{liveError ? (
- Live updates paused; checking every 30 seconds.
+ {copy.commentLiveUpdatesPaused}
) : null}
- {currentBuild && !canCreateComment ? (
-
- New comments are available when the local checkout matches Build #
- {currentBuild.number}.
+ {status?.reviewError ? (
+
{status.reviewError}
+ ) : null}
+ {status?.localCommentsError ? (
+
+ {status.localCommentsError}
) : null}
+ {draftRevisionId ? (
+ {copy.localCommentsSaved}
+ ) : null}
) : null
}
@@ -1408,7 +1539,9 @@ export function HubPanel({
: reviewCommentsCopy.selectionFailedLabel
: null
}
- rateLimitNotice={rateLimitMessage && !hubVisible ? rateLimitMessage : null}
+ rateLimitNotice={
+ !hubVisible ? rateLimitMessage || (!selectedAnchor && createError) || null : null
+ }
composer={
selectedAnchor && selectedAnchorPoint
? {
@@ -1416,6 +1549,7 @@ export function HubPanel({
bodyMaximumBytes: 10_000,
copy: reviewCommentsCopy,
creating: mutation?.kind === "create",
+ submitError: createError,
onSubmit: createComment,
onDiscard: clearSelection,
}
diff --git a/hub/app/javascript/features/prototype-canvas-hub-panel/reaction-updates.test.tsx b/hub/app/javascript/features/prototype-canvas-hub-panel/reaction-updates.test.tsx
index dd15fde6..9ab412dd 100644
--- a/hub/app/javascript/features/prototype-canvas-hub-panel/reaction-updates.test.tsx
+++ b/hub/app/javascript/features/prototype-canvas-hub-panel/reaction-updates.test.tsx
@@ -1,25 +1,15 @@
-import { ThemeProvider } from "@primer/react-brand"
-import { act, fireEvent, render, screen, waitFor } from "@testing-library/react"
-import { createRef } from "react"
-import { afterEach, describe, expect, it, vi } from "vitest"
+import { act, fireEvent, screen, waitFor } from "@testing-library/react"
+import { describe, expect, it, vi } from "vitest"
import { octocatRootComment } from "@/storybook/fixtures/review/comments"
-
import { importedPrototype, publicationHub } from "@utils/resolve-prototype-publication/fixtures"
-import { HubPanel } from "."
-
-afterEach(() => {
- document.getElementById("canvas-review-controls")?.remove()
-})
+import { renderPrototypeCanvasHubPanel } from "./test-support/render-prototype-canvas-hub-panel"
-describe("HubPanel() reactions", () => {
+describe("PrototypeCanvasHubPanel() reactions", () => {
it.each([true, false])(
"retains optimistic reactions through invalidation and reconciles a successful save %s",
async (successful) => {
- const controls = document.createElement("div")
- controls.id = "canvas-review-controls"
- document.body.append(controls)
const initial = {
...octocatRootComment,
viewerLastSeenActivityVersion: octocatRootComment.activityVersion,
@@ -66,20 +56,11 @@ describe("HubPanel() reactions", () => {
)
})
vi.stubGlobal("fetch", fetchMock)
- const view = render(
-
- ()}
- status={{ ...publicationHub, state: "connected", prototype: importedPrototype }}
- onStatusChange={async () => {}}
- onSelectHub={async () => {}}
- onConnect={() => {}}
- open={false}
- onClose={() => {}}
- />
- ,
- )
+ const view = renderPrototypeCanvasHubPanel({
+ config: { name: "Welcome", prototypeUrl: "http://localhost:4321/", token: "local" },
+ status: { ...publicationHub, state: "connected", prototype: importedPrototype },
+ open: false,
+ })
fireEvent.click(await screen.findByRole("button", { name: /^Comments, 1/ }))
fireEvent.click(screen.getByRole("button", { name: /Please align this control/ }))
await act(async () => {
diff --git a/hub/app/javascript/features/prototype-canvas-hub-panel/stories.tsx b/hub/app/javascript/features/prototype-canvas-hub-panel/stories.tsx
index de6154f8..8d316c70 100644
--- a/hub/app/javascript/features/prototype-canvas-hub-panel/stories.tsx
+++ b/hub/app/javascript/features/prototype-canvas-hub-panel/stories.tsx
@@ -3,12 +3,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"
import { octocatRootComment } from "@/storybook/fixtures/review/comments"
import { reviewCommentsCopy } from "@utils/review-comment/en"
-
import type { HubStatus } from "@utils/prototype-canvas/types"
import { publicationCopy } from "@utils/resolve-prototype-publication/en"
import { importedPrototype, publicationHub } from "@utils/resolve-prototype-publication/fixtures"
-import { HubPanel } from "."
+import { PrototypeCanvasHubPanel } from "."
const canvasPreview = `
@@ -52,14 +51,23 @@ function ConnectedDemo({
preview = false,
rateLimited = false,
...props
-}: ComponentProps & { preview?: boolean; rateLimited?: boolean }) {
+}: ComponentProps & { preview?: boolean; rateLimited?: boolean }) {
const [ready, setReady] = useState(false)
const [open, setOpen] = useState(!preview)
const frameRef = useRef(null)
useEffect(() => {
const originalFetch = window.fetch.bind(window)
- let comments = [octocatRootComment]
+ const startingComment = props.status?.reviewRevision?.id
+ ? {
+ ...octocatRootComment,
+ buildNumber: null,
+ buildPath: null,
+ draftRevisionId: props.status.reviewRevision.id,
+ viewerLastSeenActivityVersion: octocatRootComment.activityVersion,
+ }
+ : octocatRootComment
+ let comments = [startingComment]
window.fetch = (input, init) => {
const path = typeof input === "string" ? input : input instanceof URL ? input.href : input.url
if (
@@ -88,7 +96,7 @@ function ConnectedDemo({
),
)
}
- if (path === "/api/hub/comments") {
+ if (path === "/api/hub/comments" || path.startsWith("/api/hub/comments?")) {
if (init?.method === "POST") {
if (typeof init.body !== "string")
return Promise.reject(new Error("Expected a JSON comment request."))
@@ -96,7 +104,7 @@ function ConnectedDemo({
review_comment: { body: string; anchor: typeof octocatRootComment.anchor }
}
const created = {
- ...octocatRootComment,
+ ...startingComment,
id: 2,
body: review_comment.body,
anchor: review_comment.anchor,
@@ -112,7 +120,7 @@ function ConnectedDemo({
}),
)
}
- if (path === "/api/hub/discovery") {
+ if (path === "/api/hub/discovery" || path === "/api/hub/status") {
return Promise.resolve(
new Response(JSON.stringify(props.status), {
status: 200,
@@ -151,7 +159,7 @@ function ConnectedDemo({
/>
) : null}
{ready ? (
- {},
},
-} satisfies Meta
+} satisfies Meta
export default meta
type Story = StoryObj
@@ -488,6 +496,7 @@ export const Connected: Story = {
repository: "local/example",
branch: "prototype/welcome",
commitSha: "a".repeat(40),
+ reviewRevision: publicationHub.reviewRevision,
hubOrigin: "http://replica.localhost:19500",
prototype: {
id: 1,
@@ -588,6 +597,65 @@ export const RateLimited: Story = {
render: (args) => ,
}
+export const LocalDraftComments: Story = {
+ ...PinWithCommentsClosed,
+ args: {
+ ...Connected.args,
+ status: {
+ ...publicationHub,
+ state: "connected",
+ reviewRevision: {
+ ...publicationHub.reviewRevision!,
+ id: 7,
+ buildNumber: null,
+ clean: false,
+ },
+ prototype: {
+ ...importedPrototype,
+ registered: false,
+ published: false,
+ build: null,
+ currentBuild: null,
+ buildState: null,
+ versionCount: 0,
+ },
+ },
+ },
+ play: async ({ canvas }) => {
+ await canvas.findByRole("button", { name: "Thread started by @octocat" })
+ },
+}
+
+export const LocalCommentsBeforeFirstPublish: Story = {
+ ...LocalDraftComments,
+ args: {
+ ...LocalDraftComments.args,
+ status: {
+ ...LocalDraftComments.args!.status!,
+ state: "undiscovered",
+ repositoryAuthorized: true,
+ viewerLogin: "octocat",
+ prototype: undefined,
+ reviewRevision: {
+ ...LocalDraftComments.args!.status!.reviewRevision!,
+ prototypeId: null,
+ },
+ },
+ },
+}
+
+export const LocalCommentUploadFailed: Story = {
+ ...LocalDraftComments,
+ args: {
+ ...LocalDraftComments.args,
+ status: {
+ ...LocalDraftComments.args!.status!,
+ localCommentsError:
+ "Local comments not synced: Hub is unavailable. Your drafts are kept on this device.",
+ },
+ },
+}
+
export const PostedCommentWithCommentsClosed: Story = {
...PinWithCommentsClosed,
play: async ({ canvas, canvasElement, userEvent }) => {
diff --git a/hub/app/javascript/features/prototype-canvas-hub-panel/test-support/render-prototype-canvas-hub-panel/index.tsx b/hub/app/javascript/features/prototype-canvas-hub-panel/test-support/render-prototype-canvas-hub-panel/index.tsx
new file mode 100644
index 00000000..efd79d7a
--- /dev/null
+++ b/hub/app/javascript/features/prototype-canvas-hub-panel/test-support/render-prototype-canvas-hub-panel/index.tsx
@@ -0,0 +1,34 @@
+import { ThemeProvider } from "@primer/react-brand"
+import { render } from "@testing-library/react"
+import { createRef, type ComponentProps, type ReactNode } from "react"
+
+import { PrototypeCanvasHubPanel } from "../.."
+
+type Props = ComponentProps
+
+export function renderPrototypeCanvasHubPanel(
+ props: Pick & Partial,
+ preview?: ReactNode,
+) {
+ render()
+ const defaults = {
+ config: { name: "Example", prototypeUrl: "http://localhost:4321/", token: "local" },
+ frameRef: createRef(),
+ onStatusChange: async () => {},
+ onSelectHub: async () => {},
+ onConnect: () => {},
+ onClose: () => {},
+ open: true,
+ ...props,
+ }
+ function panel(next: Partial) {
+ return (
+
+ {preview}
+
+
+ )
+ }
+ const view = render(panel({}))
+ return { ...view, rerender: (next: Partial) => view.rerender(panel(next)) }
+}
diff --git a/hub/app/javascript/features/review-comment-composer/index.tsx b/hub/app/javascript/features/review-comment-composer/index.tsx
index 18f241b1..fa26b4cf 100644
--- a/hub/app/javascript/features/review-comment-composer/index.tsx
+++ b/hub/app/javascript/features/review-comment-composer/index.tsx
@@ -23,6 +23,7 @@ export function ReviewCommentComposer({
bodyMaximumBytes,
copy,
creating,
+ submitError,
onSubmit,
onDiscard,
}: ReviewCommentComposerProps) {
@@ -33,7 +34,7 @@ export function ReviewCommentComposer({
const wasConfirmingDiscard = useRef(false)
const { cardRef, position } = useReviewCardPosition({
anchorPoint,
- layoutKey: `${confirmingDiscard}:${createFailed}`,
+ layoutKey: `${confirmingDiscard}:${createFailed}:${submitError ?? ""}`,
preserveVerticalSide: true,
})
const bodyBytes = TEXT_ENCODER.encode(draft).length
@@ -148,6 +149,7 @@ export function ReviewCommentComposer({
) : null}
diff --git a/hub/app/javascript/features/review-comment-composer/stories.tsx b/hub/app/javascript/features/review-comment-composer/stories.tsx
index 635206b9..1d5c1948 100644
--- a/hub/app/javascript/features/review-comment-composer/stories.tsx
+++ b/hub/app/javascript/features/review-comment-composer/stories.tsx
@@ -59,3 +59,17 @@ export const Creating: Story = {
creating: true,
},
}
+
+export const SubmissionFailed: Story = {
+ args: {
+ submitError: "Hub is temporarily unavailable. Your comment is still here. Try saving again.",
+ onSubmit: () => Promise.resolve(false),
+ },
+ play: async ({ canvas, userEvent }) => {
+ await userEvent.type(
+ canvas.getByRole("textbox", { name: reviewCommentsCopy.composerLabel }),
+ "Please align this control with the content above it.",
+ )
+ await userEvent.click(canvas.getByRole("button", { name: reviewCommentsCopy.submitLabel }))
+ },
+}
diff --git a/hub/app/javascript/features/review-comment-composer/types.ts b/hub/app/javascript/features/review-comment-composer/types.ts
index ecb3fa99..f5e68095 100644
--- a/hub/app/javascript/features/review-comment-composer/types.ts
+++ b/hub/app/javascript/features/review-comment-composer/types.ts
@@ -6,6 +6,7 @@ export interface ReviewCommentComposerProps {
bodyMaximumBytes: number
copy: ReviewCommentsCopy
creating: boolean
+ submitError?: string
onSubmit: (body: string) => Promise
onDiscard: () => void
}
diff --git a/hub/app/javascript/features/review-comment-row/index.tsx b/hub/app/javascript/features/review-comment-row/index.tsx
index c1d158c1..48555c83 100644
--- a/hub/app/javascript/features/review-comment-row/index.tsx
+++ b/hub/app/javascript/features/review-comment-row/index.tsx
@@ -23,8 +23,9 @@ export function ReviewCommentRow({
const { root } = thread
const author = root.author.name || `@${root.author.login}`
const selectionDisabled = selectionBlocked && !selected
- const buildLabel = copy.buildLabel.replace("%{number}", root.buildNumber.toString())
- const showBuildLink = root.buildNumber !== currentBuildNumber
+ const buildLabel = copy.buildLabel.replace("%{number}", root.buildNumber?.toString() ?? "")
+ const showBuildLink =
+ root.buildNumber !== null && root.buildPath !== null && root.buildNumber !== currentBuildNumber
const replyCountLabel =
thread.replies.length === 1
? copy.replyCountOneLabel
@@ -74,7 +75,7 @@ export function ReviewCommentRow({
(
diff --git a/hub/app/javascript/features/review-comments-sidebar/index.tsx b/hub/app/javascript/features/review-comments-sidebar/index.tsx
index 21f3ef78..a306d44d 100644
--- a/hub/app/javascript/features/review-comments-sidebar/index.tsx
+++ b/hub/app/javascript/features/review-comments-sidebar/index.tsx
@@ -70,7 +70,9 @@ export function ReviewCommentsSidebar({
thread={thread}
currentBuildNumber={currentBuildNumber}
buildHref={
- buildLinkOrigin ? new URL(thread.root.buildPath, buildLinkOrigin).href : undefined
+ buildLinkOrigin && thread.root.buildPath
+ ? new URL(thread.root.buildPath, buildLinkOrigin).href
+ : undefined
}
resolution={resolutions.get(thread.root.id)}
selected={selectedThreadId === thread.root.id}
diff --git a/hub/app/javascript/features/review-thread-conversation/index.tsx b/hub/app/javascript/features/review-thread-conversation/index.tsx
index 78457e22..5c717592 100644
--- a/hub/app/javascript/features/review-thread-conversation/index.tsx
+++ b/hub/app/javascript/features/review-thread-conversation/index.tsx
@@ -273,21 +273,23 @@ export function ReviewThreadConversation({
{copy.threadHeading}
-
+ {thread.root.buildNumber !== null ? (
+
+ ) : null}
{mutation &&
"commentId" in mutation &&
mutation.commentId === thread.root.id &&
@@ -415,36 +417,42 @@ export function ReviewThreadConversation({
onAddReaction={(content) => onAddReaction(comment.id, content)}
onRemoveReaction={(content) => onRemoveReaction(comment.id, content)}
onBurstReaction={burst}
- onMarkUnread={comment.kind === "root" ? () => void markUnread() : undefined}
+ onMarkUnread={
+ comment.kind === "root" && thread.root.buildNumber !== null
+ ? () => void markUnread()
+ : undefined
+ }
markUnreadDisabled={readPending || unreadPending || mutation !== null}
/>
))}
-
- {
- void actions.submitReply()
- }}
- onDraftChange={actions.changeReplyDraft}
- />
-
+ {thread.root.buildNumber !== null || state.confirmingDiscard ? (
+
+ {
+ void actions.submitReply()
+ }}
+ onDraftChange={actions.changeReplyDraft}
+ />
+
+ ) : null}
{canvas}
diff --git a/hub/app/javascript/features/review-thread-message/index.tsx b/hub/app/javascript/features/review-thread-message/index.tsx
index b2c923a5..0143be5e 100644
--- a/hub/app/javascript/features/review-thread-message/index.tsx
+++ b/hub/app/javascript/features/review-thread-message/index.tsx
@@ -276,7 +276,7 @@ export function ReviewThreadMessage({
)}
- {comment.body ? (
+ {comment.body && !(comment.kind === "root" && comment.buildNumber === null) ? (
+ `The comment was saved, but Hub could not be refreshed: ${detail}`,
+ commentLiveUpdatesPaused: "Live updates paused; checking every 30 seconds.",
mentionSuggestions: "Mention suggestions",
mentionSuggestionsError: "Mention suggestions are unavailable. Try again.",
mentionSuggestionsLoading: "Loading people...",
diff --git a/hub/app/javascript/utils/prototype-canvas/types.ts b/hub/app/javascript/utils/prototype-canvas/types.ts
index b6ff8343..a2d2b986 100644
--- a/hub/app/javascript/utils/prototype-canvas/types.ts
+++ b/hub/app/javascript/utils/prototype-canvas/types.ts
@@ -103,6 +103,7 @@ export type HubPrototype = {
export type HubStatus = {
repositoryAuthorized?: boolean
+ viewerLogin?: string
canPublish?: boolean
localStartPage?: string | null
localStartPageError?: string
@@ -127,6 +128,20 @@ export type HubStatus = {
repository?: string
branch?: string
commitSha?: string
+ reviewRevision?: {
+ id: number | null
+ treeSha: string
+ commitSha: string
+ clean: boolean
+ prototypeId: number | null
+ repository?: string
+ branch?: string
+ buildNumber: number | null
+ hubOrigin: string
+ connectionId: string
+ }
+ reviewError?: string
+ localCommentsError?: string
prototype?: HubPrototype
registrationError?: string
registrationReason?: string
diff --git a/hub/app/javascript/utils/resolve-prototype-publication/fixtures.ts b/hub/app/javascript/utils/resolve-prototype-publication/fixtures.ts
index d97cb1f2..09090249 100644
--- a/hub/app/javascript/utils/resolve-prototype-publication/fixtures.ts
+++ b/hub/app/javascript/utils/resolve-prototype-publication/fixtures.ts
@@ -40,6 +40,18 @@ export const publicationHub: HubStatus = {
branch: "prototype/welcome",
commitSha: sha,
hubOrigin: "https://hub.example.com",
+ reviewRevision: {
+ id: null,
+ treeSha: "c".repeat(40),
+ commitSha: sha,
+ clean: true,
+ prototypeId: 1,
+ repository: "github/example",
+ branch: "prototype/welcome",
+ buildNumber: 1,
+ hubOrigin: "https://hub.example.com",
+ connectionId: "fixture-review-connection",
+ },
discovery: { state: "valid", origin: "https://hub.example.com", defaultBranch: "main" },
}
export const importedPrototype: NonNullable = {
diff --git a/hub/app/javascript/utils/review-comment/schemas.ts b/hub/app/javascript/utils/review-comment/schemas.ts
index c23ba701..5344b5a0 100644
--- a/hub/app/javascript/utils/review-comment/schemas.ts
+++ b/hub/app/javascript/utils/review-comment/schemas.ts
@@ -43,8 +43,9 @@ const COMMON_COMMENT_FIELDS = {
const ROOT_COMMENT_SCHEMA = z.object({
...COMMON_COMMENT_FIELDS,
kind: z.literal("root"),
- buildNumber: IDENTIFIER_SCHEMA,
- buildPath: z.string().startsWith("/"),
+ buildNumber: IDENTIFIER_SCHEMA.nullable(),
+ buildPath: z.string().startsWith("/").nullable(),
+ draftRevisionId: IDENTIFIER_SCHEMA.nullable().optional(),
anchor: REVIEW_ANCHOR_SCHEMA,
resolvedAt: NULLABLE_DATE_TIME_SCHEMA,
resolvedBy: AUTHOR_SCHEMA.nullable(),
diff --git a/hub/app/javascript/utils/review-thread-matches-filters/index.test.ts b/hub/app/javascript/utils/review-thread-matches-filters/index.test.ts
index 07e9ddd3..a5cb67a2 100644
--- a/hub/app/javascript/utils/review-thread-matches-filters/index.test.ts
+++ b/hub/app/javascript/utils/review-thread-matches-filters/index.test.ts
@@ -4,79 +4,119 @@ import type { ReviewThread } from "@utils/review-comment/types"
import { reviewThreadMatchesFilters } from "."
-const THREAD: ReviewThread = {
- root: {
- id: 1,
- kind: "root",
- buildNumber: 2,
- buildPath: "/repositories/2001/prototypes/1?build=2",
- body: "Align the save button.",
- anchor: {
- schemaVersion: 1,
- kind: "element",
- route: { pathname: "/settings", search: "?tab=profile", hash: "" },
- selector: "#save",
- accessibleName: "Save",
- tagName: "button",
- selectedText: "",
- rect: { x: 20, y: 30, width: 100, height: 32 },
- viewport: { width: 1_280, height: 720, scrollX: 0, scrollY: 0 },
- elementOffset: { x: 0.5, y: 0.5 },
- },
- createdAt: "2026-09-14T12:00:00Z",
- updatedAt: "2026-09-14T12:00:00Z",
- editedAt: null,
- deletedAt: null,
- resolvedAt: null,
- resolvedBy: null,
- activityVersion: 1,
- viewerLastSeenActivityVersion: 1,
- author: { login: "octocat", name: "The Octocat", avatarUrl: null },
- viewerCanEdit: true,
- viewerCanDelete: true,
- reactions: [],
- },
- replies: [
- {
- id: 2,
- kind: "reply",
- rootId: 1,
- body: "Updated in the latest build.",
- createdAt: "2026-09-14T13:00:00Z",
- updatedAt: "2026-09-14T13:00:00Z",
+function fixture() {
+ const THREAD: ReviewThread = {
+ root: {
+ id: 1,
+ kind: "root",
+ buildNumber: 2,
+ buildPath: "/repositories/2001/prototypes/1?build=2",
+ body: "Align the save button.",
+ anchor: {
+ schemaVersion: 1,
+ kind: "element",
+ route: { pathname: "/settings", search: "?tab=profile", hash: "" },
+ selector: "#save",
+ accessibleName: "Save",
+ tagName: "button",
+ selectedText: "",
+ rect: { x: 20, y: 30, width: 100, height: 32 },
+ viewport: { width: 1_280, height: 720, scrollX: 0, scrollY: 0 },
+ elementOffset: { x: 0.5, y: 0.5 },
+ },
+ createdAt: "2026-09-14T12:00:00Z",
+ updatedAt: "2026-09-14T12:00:00Z",
editedAt: null,
deletedAt: null,
- author: { login: "mona", name: "Mona Lisa", avatarUrl: null },
- viewerCanEdit: false,
- viewerCanDelete: false,
+ resolvedAt: null,
+ resolvedBy: null,
+ activityVersion: 1,
+ viewerLastSeenActivityVersion: 1,
+ author: { login: "octocat", name: "The Octocat", avatarUrl: null },
+ viewerCanEdit: true,
+ viewerCanDelete: true,
reactions: [],
},
- ],
- participants: [
- { login: "octocat", name: "The Octocat", avatarUrl: null },
- { login: "mona", name: "Mona Lisa", avatarUrl: null },
- ],
- lastActivityAt: "2026-09-14T13:00:00Z",
- unread: false,
-}
+ replies: [
+ {
+ id: 2,
+ kind: "reply",
+ rootId: 1,
+ body: "Updated in the latest build.",
+ createdAt: "2026-09-14T13:00:00Z",
+ updatedAt: "2026-09-14T13:00:00Z",
+ editedAt: null,
+ deletedAt: null,
+ author: { login: "mona", name: "Mona Lisa", avatarUrl: null },
+ viewerCanEdit: false,
+ viewerCanDelete: false,
+ reactions: [],
+ },
+ ],
+ participants: [
+ { login: "octocat", name: "The Octocat", avatarUrl: null },
+ { login: "mona", name: "Mona Lisa", avatarUrl: null },
+ ],
+ lastActivityAt: "2026-09-14T13:00:00Z",
+ unread: false,
+ }
-const DEFAULT_CONTEXT = {
- filters: {
- search: "",
- currentBuildOnly: false,
- currentPageOnly: false,
- showResolved: false,
- showRead: true,
- onlyMine: false,
- participant: null,
- },
- viewerLogin: "hubot",
- selectedBuildNumber: 2,
- route: { pathname: "/settings", search: "?tab=profile", hash: "" },
+ const DEFAULT_CONTEXT = {
+ filters: {
+ search: "",
+ currentBuildOnly: false,
+ currentPageOnly: false,
+ showResolved: false,
+ showRead: true,
+ onlyMine: false,
+ participant: null,
+ },
+ viewerLogin: "hubot",
+ selectedBuildNumber: 2,
+ route: { pathname: "/settings", search: "?tab=profile", hash: "" },
+ }
+ return { THREAD, DEFAULT_CONTEXT }
}
describe("reviewThreadMatchesFilters()", () => {
+ it("matches only the selected local revision when filtering to the current source", () => {
+ const { THREAD, DEFAULT_CONTEXT } = fixture()
+ const context = {
+ ...DEFAULT_CONTEXT,
+ selectedBuildNumber: null,
+ selectedDraftRevisionId: 11,
+ filters: { ...DEFAULT_CONTEXT.filters, currentBuildOnly: true },
+ }
+ expect(
+ reviewThreadMatchesFilters(
+ { ...THREAD, root: { ...THREAD.root, draftRevisionId: 11, buildNumber: null } },
+ context,
+ ),
+ ).toBe(true)
+ expect(
+ reviewThreadMatchesFilters(
+ { ...THREAD, root: { ...THREAD.root, draftRevisionId: 12, buildNumber: null } },
+ context,
+ ),
+ ).toBe(false)
+ expect(reviewThreadMatchesFilters(THREAD, context)).toBe(false)
+ })
+
+ it("continues filtering published comments by the selected Build without a draft revision", () => {
+ const { THREAD, DEFAULT_CONTEXT } = fixture()
+ const context = {
+ ...DEFAULT_CONTEXT,
+ selectedDraftRevisionId: null,
+ filters: { ...DEFAULT_CONTEXT.filters, currentBuildOnly: true },
+ }
+ expect(reviewThreadMatchesFilters(THREAD, context)).toBe(true)
+ expect(
+ reviewThreadMatchesFilters({ ...THREAD, root: { ...THREAD.root, buildNumber: 3 } }, context),
+ ).toBe(false)
+ })
+
it("searches root comments, replies, authors, and saved anchor context", () => {
+ const { THREAD, DEFAULT_CONTEXT } = fixture()
for (const search of ["save", "latest", "mona", "button"]) {
expect(
reviewThreadMatchesFilters(THREAD, {
@@ -88,6 +128,7 @@ describe("reviewThreadMatchesFilters()", () => {
})
it("hides resolved threads until the reviewer includes them", () => {
+ const { THREAD, DEFAULT_CONTEXT } = fixture()
const resolved = {
...THREAD,
root: {
@@ -107,6 +148,7 @@ describe("reviewThreadMatchesFilters()", () => {
})
it("matches any participant in the conversation", () => {
+ const { THREAD, DEFAULT_CONTEXT } = fixture()
expect(
reviewThreadMatchesFilters(THREAD, {
...DEFAULT_CONTEXT,
@@ -122,6 +164,7 @@ describe("reviewThreadMatchesFilters()", () => {
})
it("shows only unread conversations when Show read is off", () => {
+ const { THREAD, DEFAULT_CONTEXT } = fixture()
const context = {
...DEFAULT_CONTEXT,
filters: { ...DEFAULT_CONTEXT.filters, showRead: false },
@@ -131,6 +174,7 @@ describe("reviewThreadMatchesFilters()", () => {
})
it("includes threads the viewer started or replied to when Only your threads is on", () => {
+ const { THREAD, DEFAULT_CONTEXT } = fixture()
const context = {
...DEFAULT_CONTEXT,
filters: { ...DEFAULT_CONTEXT.filters, onlyMine: true },
diff --git a/hub/app/javascript/utils/review-thread-matches-filters/index.ts b/hub/app/javascript/utils/review-thread-matches-filters/index.ts
index e2c5d273..2411114b 100644
--- a/hub/app/javascript/utils/review-thread-matches-filters/index.ts
+++ b/hub/app/javascript/utils/review-thread-matches-filters/index.ts
@@ -18,7 +18,13 @@ export function reviewThreadMatchesFilters(
) {
return false
}
- if (filters.currentBuildOnly && root.buildNumber !== context.selectedBuildNumber) return false
+ if (
+ filters.currentBuildOnly &&
+ (context.selectedDraftRevisionId != null
+ ? root.draftRevisionId !== context.selectedDraftRevisionId
+ : root.buildNumber !== context.selectedBuildNumber)
+ )
+ return false
if (
filters.participant !== null &&
!thread.participants.some(
@@ -55,7 +61,7 @@ export function reviewThreadMatchesFilters(
root.body ?? "",
root.author.login,
root.author.name ?? "",
- root.buildNumber.toString(),
+ root.buildNumber?.toString() ?? "",
...thread.replies.flatMap((reply) => [
reply.body ?? "",
reply.author.login,
diff --git a/hub/app/javascript/utils/review-thread-matches-filters/types.ts b/hub/app/javascript/utils/review-thread-matches-filters/types.ts
index 46534f5a..8147bb49 100644
--- a/hub/app/javascript/utils/review-thread-matches-filters/types.ts
+++ b/hub/app/javascript/utils/review-thread-matches-filters/types.ts
@@ -4,6 +4,7 @@ import type { ReviewCommentFilters } from "@utils/review-comment/types"
export interface ReviewThreadFilterContext {
filters: ReviewCommentFilters
viewerLogin: string
- selectedBuildNumber?: number
+ selectedBuildNumber?: number | null
+ selectedDraftRevisionId?: number | null
route: ReviewRoute | null
}
diff --git a/hub/docs/prototype-canvas.md b/hub/docs/prototype-canvas.md
index bf4bde55..4ec7af47 100644
--- a/hub/docs/prototype-canvas.md
+++ b/hub/docs/prototype-canvas.md
@@ -364,7 +364,19 @@ Authors can use **Edit details** to change the required name, optional descripti
To test without a GitHub App in local mode, open the example checkout under Hub's `.local/prototypes/` and pass `repository: "local/example"` as a canvas input; the extension accepts that hint only when the directory name matches and Hub uses a loopback origin.
-The canvas header reuses Hub's **Add a comment** control and comment-count button. The count opens a dedicated comments sidebar with Hub's search, build/page/participant/read/resolved filters, unread state, pin visibility, rows, and conversation UI; comments are not duplicated in the Hub metadata sidebar. The renderer reads all pages of Hub's canonical conversations. Preview markers reuse Hub's participant avatars, overflow, unread, resolved, focus, and accessible-label behavior, and follow the active sidebar filters. Selecting a marker or row opens the thread beside its resolved target, with a docked fallback when no marker is available. Posting an anchored comment or selecting a marker preserves the sidebar's current open or closed state. Starting element or region selection also preserves it. When the sidebar is closed, only the individual conversation opens at its pin. The count explicitly toggles the sidebar. When the local checkout SHA exactly matches the selected successful Build, root comments can target an element or highlighted area and are saved to that Build in Hub. Replies, edits, deletes, reactions, read marks, and resolution actions use the same Hub model operations as the browser review page. A small Action Cable invalidation asks the canvas to reload comments, without sending comment content over the channel. The extension exchanges its grant for a short-lived signed WebSocket ticket and relays change notices to the renderer through its protected loopback server. When the live channel is down, the renderer retries and refreshes every 30 seconds. See [Review collaboration](review-collaboration.md).
+The canvas header reuses Hub's **Add a comment** control and comment-count button. The count opens a dedicated comments sidebar with Hub's search, build/page/participant/read/resolved filters, unread state, pin visibility, rows, and conversation UI; comments are not duplicated in the Hub metadata sidebar. The renderer reads all pages of Hub's canonical conversations. Preview markers reuse Hub's participant avatars, overflow, unread, resolved, focus, and accessible-label behavior, and follow the active sidebar filters. Selecting a marker or row opens the thread beside its resolved target, with a docked fallback when no marker is available. Posting an anchored comment or selecting a marker preserves the sidebar's current open or closed state. Starting element or region selection also preserves it. When the sidebar is closed, only the individual conversation opens at its pin. The count explicitly toggles the sidebar.
+
+### Local preview comments
+
+Authors can comment before publishing, including with uncommitted edits. A clean checkout matching the published Build saves directly to Hub. Other comments create no Hub records or registration and stay in private files under `~/.config/replica/canvas/local-comments/`, scoped by checkout, Hub, repository, branch and reviewer. They survive restarts on that device. Local comments support edits and deletion; replies, reactions and resolution require upload.
+
+Selection requires a named branch with an initial commit. Source capture includes tracked changes and nonignored untracked files without changing staged files; active Git clean filters and changed submodules block it with an error. The canvas shows published conversations and local comments for the current source. Source edits, commits and reloads preserve a selection's original source or Build and composed text. Changing the Hub, connection, repository, branch or Prototype requires a new selection. Failed saves retain the text beside the error; background refresh failures cannot undo a confirmed save.
+
+While open, the canvas uploads comments only when Hub's latest successful imported Build contains matching source and was published after they were saved; commit IDs may differ. Hub applies its existing access checks, notifications and learning behavior. Confirmation removes the local copy; errors appear in the sidebar and retain it. Fetch missing Build commits before retrying. Uncertain uploads are checked against published comments, never blindly replayed. If confirmation remains unavailable, check Hub before discarding and resaving the local copy. Closing the canvas pauses uploads.
+
+### Published conversations
+
+Published replies, edits, deletes, reactions, read marks, and resolution actions use the same Hub model operations as the browser review page. A small Action Cable invalidation asks the canvas to reload comments, without sending comment content over the channel. The extension exchanges its grant for a short-lived signed WebSocket ticket and relays change notices to the renderer through its protected loopback server. When the live channel is down, the renderer retries and refreshes every 30 seconds. See [Review collaboration](review-collaboration.md).
Comment rows show a compact avatar beside the author's name and an earlier Build in parentheses immediately after it, using muted text with an underline on hover. The canvas opens that Build on the selected Hub in a new tab, not on its local renderer server. Comment text uses the full content width and shows up to three lines. Reply counts sit below the comment, aligned with its text. Read comments use muted author and body text with regular-weight names; unread names remain bold. Avatars and unread dots share a fixed left gutter, with each dot centered beneath its avatar and vertically centered beside the comment text. Read comments keep the same alignment without a dot. The row's hover background extends around this gutter, leaving 8px before the avatar without shifting the content. Its clickable area and keyboard focus ring cover the same bounds. The floating conversation's three-dot menu is a ghost button with the same muted background on hover. While the preview has not returned a result for the comment's saved target, the row shows no target-status badge. Once the preview reports a result, statuses such as **Not found** and **Saved on another page** remain visible. **Resolved** describes the conversation separately.
From e377a7c7abef4c349b477dfe926d1f84f4768803 Mon Sep 17 00:00:00 2001
From: Copilot <223556219+Copilot@users.noreply.github.com>
Date: Wed, 21 Oct 2026 01:16:38 +0000
Subject: [PATCH 4/4] refactor(hub): trim canvas demo scaffolding and visual
checks
Keep the live adapter and small presentation stories, replace cosmetic assertions with a functional renderer smoke, and minify the generated anchor validator through the existing Vite build.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.../renderer-improvement-notes-prototype.js | 2 +-
.../replica-prototype/assets/renderer.css | 2 +-
.../replica-prototype/assets/renderer.js | 10 +-
.../assets/review-anchor-validation.mjs | 4134 +----------------
docs/testing-and-review.md | 2 +
.../application/prototype-canvas/index.tsx | 4 +-
.../tests/improvement-notes.test.tsx | 28 +-
.../components/hub-counter/index.test.tsx | 9 -
.../index.test.tsx | 3 -
.../prototype-canvas-toolbar/index.test.tsx | 25 -
.../prototype-canvas-toolbar/index.tsx | 6 +-
.../prototype-controls-panel/index.test.tsx | 8 +-
.../capture/index.ts | 12 -
.../prototype-canvas-improvement-notes/en.ts | 85 +-
.../fixtures.ts | 103 -
.../index.test.tsx | 475 --
.../index.tsx | 1308 +-----
.../preview/index.tsx | 146 -
.../stories.tsx | 25 -
.../styles.css | 599 +--
.../thread-view/index.test.ts | 23 +-
.../types.ts | 13 +-
.../index.test.tsx | 14 +-
.../index.test.tsx | 50 +-
hub/docs/prototype-canvas.md | 8 +-
hub/docs/storybook.md | 2 +-
hub/script/build-prototype-preview-bridge.mjs | 2 +
.../check-prototype-canvas-renderer.mjs | 2054 +-------
28 files changed, 511 insertions(+), 8641 deletions(-)
delete mode 100644 hub/app/javascript/features/prototype-canvas-improvement-notes/capture/index.ts
delete mode 100644 hub/app/javascript/features/prototype-canvas-improvement-notes/fixtures.ts
delete mode 100644 hub/app/javascript/features/prototype-canvas-improvement-notes/index.test.tsx
delete mode 100644 hub/app/javascript/features/prototype-canvas-improvement-notes/preview/index.tsx
delete mode 100644 hub/app/javascript/features/prototype-canvas-improvement-notes/stories.tsx
diff --git a/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js b/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js
index 1e825f7d..e2d77626 100644
--- a/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js
+++ b/.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js
@@ -1 +1 @@
-import{n as e,r as t}from"./renderer-rolldown-runtime.js";import{E as n,K as r,L as i,M as a,X as o,Y as s,f as c,g as l,q as u,x as d,z as f}from"./renderer-vendor.js";import{a as p,c as m,f as h,m as g,o as _,p as ee,s as v}from"./renderer.js";import{t as y}from"./renderer-improvement-notes-vendor.js";import{t as te}from"./renderer-prototype-canvas-improvement-threads.js";var b=t(o(),1),ne=s(),x=r(),re=y(),S={title:`Pick & polish`,localAuthor:`Local author`,branch:`prototype/welcome`,demo:`UI prototype`,demoNotice:`Sample preview. Notes reset on reload. No Hub API calls or agent work.`,canvasDemoNotice:`UI-only notes over the live preview. Notes reset on canvas reload. Captures, Hub sync and agent results are simulated.`,canvasBatchSource:`Live preview · UI-only batch`,sampleBatchSource:`Local, uncommitted sample`,bridgeUnavailable:`Annotation needs the updated Replica preview bridge. Reconnect or reload the preview after updating the canvas.`,capturePlaceholder:`UI-only capture placeholder`,sourceUnavailable:`You can still save this improvement locally, but it cannot sync without a captured source.`,annotate:`Pick & polish`,fix:`Fix all`,openNotes:e=>`Open improvement notes (${e})`,fixAll:e=>`Fix all (${e})`,notes:`Pick & polish`,closeNotes:`Close pick & polish`,owner:`Only your notes appear here. Authorized API callers can request other authors' notes.`,selectHint:`Click an element or drag a rectangle. For a keyboard region, focus the preview, press Shift+Enter, then use arrows and Enter to choose two corners. Escape exits annotation mode.`,keyboardHint:`Click an element or drag a rectangle. Focus the preview and press Shift+Enter for keyboard region selection; arrows move the corner and Enter selects it.`,regionHint:`Choose two corners in the preview. Use arrow keys to move the corner, then Enter.`,firstCorner:`First corner selected. Choose the second corner.`,regionSmall:`Choose a larger region, at least 8 preview pixels wide and high.`,add:`Add improvement note`,edit:`Edit improvement note`,label:`What should change?`,placeholder:`Describe the improvement you want Copilot to make...`,save:`Save note`,saveEdit:`Save changes`,cancel:`Cancel`,discard:`Discard draft`,keep:`Keep writing`,discardTitle:`Discard your unsaved note?`,discardBody:`Your saved notes will stay unchanged.`,capture:`Captured target`,empty:`A little feedback goes a long way`,emptyBody:`Select an element or draw around an area. Collect notes across screens, then fix them together.`,emptyFilter:`No notes in this view.`,allActive:`Active notes`,readyFilter:`Ready to review`,resolvedFilter:`Resolved`,filter:`Filter improvement notes`,viewTarget:`View target`,noteActions:e=>`Note actions: ${e}`,editAction:`Edit`,deleteAction:`Delete`,deleteTitle:`Delete this improvement note?`,deleteBody:`This removes the note. It does not change the prototype.`,resolve:`Confirm resolved`,solution:`Solution`,solutionUnavailable:`The solution summary is not available in this canvas.`,readyReadOnly:`Ready notes are read-only. Add a new note to request further changes.`,reopen:`Reopen`,retryFix:`Retry fix`,noteSent:`Sent in the simulated batch. No real agent has started.`,noteReady:`Simulated change is ready. Review the target before resolving.`,noteBlocked:`Simulated agent could not safely identify the change. Edit the note or retry.`,handoff:`Demo handoff to Copilot`,handoffNotice:`This is the captured batch, not a live agent request. New notes stay out of this batch.`,complete:`Simulate ready to review`,block:`Simulate blocked`,closeHandoff:`Continue annotating`,sent:`Demo batch captured. No code was changed.`,finished:`Simulated result received. Review each note before resolving.`,fixBusy:`Finish or close the current simulated batch before sending another.`,syncControls:`Demo connection`,offline:`Offline`,connected:`Connected`,syncFailure:`Sync failure`,syncRetry:`Retry demo sync`,syncFailed:`Demo sync failed. Your note remains in this demo; retry when connected.`,syncSuccess:`Demo sync completed.`,targetMissing:`This sample target is no longer available. The saved capture is still shown.`,previewUnavailable:`The demo preview is unavailable. Try selecting the target again.`,saved:`Note added.`,savedLocally:`Notes are saved locally.`,storageLoading:`Loading your notes...`,productionSent:`Notes sent to Copilot. Review the changes before confirming resolution.`,productionBusy:`Copilot is working on the captured batch.`,branchChanged:`The prototype branch changed. Close this draft and select the target again.`,workChanged:`The open improvements changed while syncing. Review them and select Fix all again.`,returnToActive:`Return to active`,regionTarget:`Selected region`,closeComposer:`Close note composer`,closeDiscard:`Close discard confirmation`,closeDelete:`Close delete confirmation`,closeBatch:`Close demo handoff`,exit:`Exit annotation mode`,sampleScreens:`Sample prototype screens`,sampleWorkspace:`Octocat's workspace`,projects:`Projects`,settings:`Settings`,navigationHint:`Navigate between screens. Your notes stay together.`,authorContext:`Across this prototype · Demo author: octocat`,batchHint:`Fix only this batch. Do not commit, push, or publish. Report per-note results for the author to review.`,perNoteResult:`Simulate a result for this note`,batchLabel:e=>`View demo batch (${e})`,statuses:{open:`Open`,sent:`Sent to Copilot`,ready:`Ready to review`,resolved:`Resolved`,blocked:`Needs attention`},sync:{local:`Demo: local only`,synced:`Demo: synced`,failed:`Demo: sync failed`}};function ie(e,t){let n=[e.thread?.originalStatus??e.status,...e.thread?.messages.filter(e=>e.role===`author`).map(e=>e.status)??[]];return{id:e.id,revision:e.revision,body:e.body,capture:e.capture,author:e.thread?.originalAuthor?`@${e.thread.originalAuthor.login}`:e.author===`local`?S.localAuthor:`@${e.author}`,avatarUrl:(e.thread?.originalAuthor??e.authorProfile)?.avatarUrl,target:e.target,path:e.route,status:e.status,originalPending:(e.thread?.originalStatus??e.status)===`open`,...n.includes(`sent`)?{retryStatus:`sent`}:n.includes(`blocked`)?{retryStatus:`blocked`}:{},messages:e.thread?.messages.map(e=>({...e,...e.role===`author`&&e.author?{author:`@${e.author.login}`,avatarUrl:e.author.avatarUrl}:{author:void 0},pending:e.role===`author`&&e.status===`open`}))??(e.result?[{id:`legacy-result`,role:`copilot`,body:e.result,status:e.status===`blocked`?`blocked`:`ready`}]:[]),...t&&(t.status===`resolved`||t.status===`moved`)?{point:t.point}:{}}}function ae(e,t){let n=e.cloneNode(!0);if(!(n instanceof SVGSVGElement))throw Error(`The demo preview could not be captured.`);return n.setAttribute(`viewBox`,`${t.x} ${t.y} ${t.width} ${t.height}`),n.setAttribute(`width`,String(t.width)),n.setAttribute(`height`,String(t.height)),n.removeAttribute(`class`),`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(n))}`}var oe=[{id:`projects-heading`,label:`Projects heading`,route:`/projects`,rect:{x:40,y:35,width:640,height:78}},{id:`new-project`,label:`New project button`,route:`/projects`,rect:{x:764,y:42,width:156,height:42}},{id:`activity`,label:`Activity summary`,route:`/projects`,rect:{x:40,y:144,width:880,height:100}},{id:`welcome-card`,label:`Welcome project card`,route:`/projects`,rect:{x:40,y:285,width:420,height:230}},{id:`onboarding-card`,label:`Onboarding project card`,route:`/projects`,rect:{x:500,y:285,width:420,height:230}},{id:`settings-heading`,label:`Settings heading`,route:`/settings`,rect:{x:40,y:35,width:700,height:78}},{id:`workspace-name`,label:`Workspace name field`,route:`/settings`,rect:{x:40,y:152,width:880,height:138}},{id:`notifications`,label:`Notifications settings`,route:`/settings`,rect:{x:40,y:318,width:880,height:130}},{id:`save-settings`,label:`Save settings button`,route:`/settings`,rect:{x:40,y:478,width:166,height:42}}],se=[{id:1,kind:`improvement_note`,author:`octocat`,body:`Make the primary action more prominent and shorten the label to 'New project'.`,route:`/projects`,target:`New project button`,selector:`[data-improvement-target="new-project"]`,rect:{x:764,y:42,width:156,height:42},capture:``,status:`open`,sync:`local`,revision:1},{id:2,kind:`improvement_note`,author:`octocat`,body:`Give the two cards a little more breathing room and align their metadata.`,route:`/projects`,target:`Selected region`,selector:null,rect:{x:28,y:273,width:904,height:250},capture:``,status:`open`,sync:`local`,revision:1},{id:3,kind:`improvement_note`,author:`octocat`,body:`Explain what notifications this switch controls before asking me to enable it.`,route:`/settings`,target:`Notifications settings`,selector:`[data-improvement-target="notifications"]`,rect:{x:40,y:318,width:880,height:130},capture:``,status:`ready`,sync:`synced`,revision:1}],C=u();function ce({route:e}){return(0,C.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 960 560`,className:`improvement-demo__scene`,role:`group`,"aria-label":`Sample prototype ${e}`,fontFamily:`system-ui, sans-serif`,children:[(0,C.jsx)(`rect`,{width:`960`,height:`560`,fill:`#f8fafc`}),oe.filter(t=>t.route===e).map(t=>(0,C.jsxs)(`g`,{"data-improvement-target":t.id,children:[(0,C.jsx)(`rect`,{...t.rect,rx:`10`,fill:t.id.includes(`heading`)?`#f8fafc`:t.id===`new-project`||t.id===`save-settings`?`#155d3d`:`#ffffff`,stroke:t.id.includes(`heading`)?`none`:`#dce3e9`}),t.id.includes(`heading`)?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`40`,y:`67`,fill:`#172b24`,fontSize:`28`,fontWeight:`650`,children:e===`/projects`?`Your projects`:`Workspace settings`}),(0,C.jsx)(`text`,{x:`40`,y:`99`,fill:`#596b65`,fontSize:`15`,children:e===`/projects`?`A home for your team's next great idea.`:`Make this space work for your team.`})]}):t.id===`new-project`||t.id===`save-settings`?(0,C.jsx)(`text`,{x:t.rect.x+t.rect.width/2,y:t.rect.y+26,textAnchor:`middle`,fill:`#ffffff`,fontSize:`14`,fontWeight:`600`,children:t.id===`new-project`?`+ Create project`:`Save settings`}):t.id===`activity`?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`64`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`THIS WEEK`}),(0,C.jsx)(`text`,{x:`64`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`12 prototypes`}),(0,C.jsx)(`text`,{x:`348`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`IN REVIEW`}),(0,C.jsx)(`text`,{x:`348`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`4 conversations`}),(0,C.jsx)(`text`,{x:`642`,y:`179`,fill:`#596b65`,fontSize:`13`,children:`YOUR TEAM`}),(0,C.jsx)(`text`,{x:`642`,y:`214`,fill:`#172b24`,fontSize:`23`,fontWeight:`600`,children:`Making things happen`})]}):t.id.includes(`card`)?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`rect`,{x:t.rect.x+16,y:`301`,width:`388`,height:`100`,rx:`6`,fill:t.id===`welcome-card`?`#e3efe9`:`#eee9f7`}),(0,C.jsx)(`rect`,{x:t.rect.x+40,y:`323`,width:`100`,height:`10`,rx:`4`,fill:`#ffffff`}),(0,C.jsx)(`rect`,{x:t.rect.x+40,y:`345`,width:`196`,height:`6`,rx:`3`,fill:`#ffffff`}),(0,C.jsx)(`rect`,{x:t.rect.x+40,y:`363`,width:`156`,height:`6`,rx:`3`,fill:`#ffffff`}),(0,C.jsx)(`text`,{x:t.rect.x+24,y:`437`,fill:`#172b24`,fontSize:`18`,fontWeight:`600`,children:t.id===`welcome-card`?`Welcome experience`:`A better onboarding`}),(0,C.jsx)(`text`,{x:t.rect.x+24,y:`463`,fill:`#596b65`,fontSize:`13`,children:t.id===`welcome-card`?`prototype/welcome`:`prototype/onboarding`}),(0,C.jsx)(`circle`,{cx:t.rect.x+30,cy:`490`,r:`5`,fill:`#2a7954`}),(0,C.jsx)(`text`,{x:t.rect.x+44,y:`495`,fill:`#596b65`,fontSize:`12`,children:`Updated today · The Octocat`})]}):t.id===`workspace-name`?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`64`,y:`184`,fill:`#172b24`,fontSize:`17`,fontWeight:`600`,children:`Workspace name`}),(0,C.jsx)(`text`,{x:`64`,y:`209`,fill:`#596b65`,fontSize:`13`,children:`This is how your workspace appears to your team.`}),(0,C.jsx)(`rect`,{x:`64`,y:`230`,width:`600`,height:`38`,rx:`6`,fill:`#f8fafc`,stroke:`#dce3e9`}),(0,C.jsx)(`text`,{x:`78`,y:`255`,fill:`#172b24`,fontSize:`14`,children:`Octocat's workspace`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`text`,{x:`64`,y:`351`,fill:`#172b24`,fontSize:`17`,fontWeight:`600`,children:`Notifications`}),(0,C.jsx)(`text`,{x:`64`,y:`385`,fill:`#596b65`,fontSize:`14`,children:`Keep me in the loop`}),(0,C.jsx)(`rect`,{x:`824`,y:`366`,width:`48`,height:`26`,rx:`13`,fill:`#155d3d`}),(0,C.jsx)(`circle`,{cx:`857`,cy:`379`,r:`9`,fill:`#ffffff`})]})]},t.id))]})}function le(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ue({frameRef:e,prototypeUrl:t,previewUrl:n,notes:r,annotating:i,composing:a,onSelect:o,onRoute:s,onCancel:c,onProblem:l}){let u=n??t,[d,f]=(0,b.useState)(null),[p,h]=(0,b.useState)(new Map),g=JSON.stringify(r.filter(e=>e.anchor).slice(0,200).map(e=>({id:e.id,anchor:e.anchor}))),ee=(0,b.useEffectEvent)(e=>{if(!i||a)return;let t=v.safeParse(e);t.success?o(t.data):(c(),l(S.previewUnavailable))}),y=(0,b.useCallback)((t,n={})=>{u&&d&&e?.current?.contentWindow&&e.current.contentWindow.postMessage({type:t,nonce:d.nonce,...n},new URL(u).origin)},[d,e,u]);return(0,b.useEffect)(()=>{let t=e?.current;if(!t||!u)return;let n=new URL(u).origin,r=crypto.randomUUID(),i=Date.now(),a=JSON.parse(g);function o(){t?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:r},n),t?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:r,anchors:a},n)}function d(){r=crypto.randomUUID(),i=Date.now(),f({nonce:r,ready:!1}),h(new Map),c(),o()}function p(e){let a=e.data;if(e.source===t?.contentWindow&&e.origin===n&&le(a)&&a.nonce===r){if(a.type===`replica:canvas:ready`){let e=m.safeParse(a.route);if(a.protocolVersion!==1||a.improvementSelection!==!0||!e.success){f({nonce:r,ready:!1}),l(S.bridgeUnavailable);return}i=Date.now(),f(e=>e?.nonce===r&&e.ready?e:{nonce:r,ready:!0}),s(e.data.pathname+e.data.search+e.data.hash)}else if(a.type===`replica:canvas:selected`)ee(a.anchor);else if(a.type===`replica:canvas:resolved`&&Array.isArray(a.results)){let e=new Map;for(let t of a.results){if(!le(t))continue;let n=_.safeParse({commentId:t.id,status:`resolved`,point:{x:t.x,y:t.y},rect:t.rect??{x:t.x,y:t.y,width:1,height:1}});n.success&&e.set(n.data.commentId,n.data)}h(e)}else a.type===`replica:canvas:selection-failed`||a.type===`replica:canvas:bridge-error`?(c(),l(a.reason===`area-too-small`?S.regionSmall:S.bridgeUnavailable)):a.type===`replica:canvas:selection-cancelled`?a.reason!==`command`&&c():a.type===`replica:canvas:conversation-dismiss-requested`&&window.dispatchEvent(new Event(`replica:review-dismiss`))}}t.addEventListener(`load`,d),window.addEventListener(`message`,p),f({nonce:r,ready:!1}),o();let v=window.setInterval(()=>{Date.now()-i>2e4&&(f({nonce:r,ready:!1}),h(new Map),c(),l(S.bridgeUnavailable)),o()},2e3);return()=>{t.removeEventListener(`load`,d),window.removeEventListener(`message`,p),window.clearInterval(v),t.contentWindow?.postMessage({type:`replica:canvas:cancel-selection`,nonce:r},n),t.contentWindow?.postMessage({type:`replica:canvas:clear-selection`,nonce:r},n)}},[g,e,u,c,l,s]),(0,b.useEffect)(()=>{d?.ready&&(i&&!a?y(`replica:canvas:select`,{mode:`improvement`}):y(`replica:canvas:cancel-selection`),a||y(`replica:canvas:clear-selection`))},[i,a,d?.ready,y]),{ready:d?.ready===!0,resolutions:p}}function de(e){let[t,n]=(0,b.useState)(null),[r,i]=(0,b.useState)(``),[a,o]=(0,b.useState)(``),[s,c]=(0,b.useState)(!1),l=(0,b.useRef)(null),u=(0,b.useRef)(!1),d=(0,b.useRef)(null),f=(0,b.useRef)(!1),m=(0,b.useRef)(0);function h(e){f.current&&(l.current=e,n(e))}(0,b.useEffect)(()=>{if(!e)return;f.current=!0;let t=!1,r=!1,a=0;async function s(){if(u.current||r)return;r=!0;let s=m.current;try{let n=await p(`/api/improvement-notes`,e);if(u.current||s!==m.current||t)return;if(h(n),Date.now()-a>15e3){a=Date.now();let r=p(`/api/improvement-notes/sync`,e,{method:`POST`,body:JSON.stringify({identity:n.identity,revision:n.revision})}).then(e=>{t||h(e)});d.current=r;try{await r}finally{d.current===r&&(d.current=null)}}t||o(``)}catch(e){t||(e instanceof Error&&`statusCode`in e&&e.statusCode===403&&(l.current=null,n(null),i(``)),o(e instanceof Error?e.message:String(e)))}finally{r=!1}}s();let c=window.setInterval(()=>void s(),3e3);return()=>{f.current=!1,t=!0,window.clearInterval(c)}},[e]);async function g(t,n={}){if(!e||!l.current||u.current)return!1;let r=l.current.identity,a=l.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`);u.current=!0,m.current++,c(!0),i(``);try{if(await d.current,!f.current)return!1;if(!l.current||l.current.identity!==r)throw Error(S.branchChanged);if(t===`fix`&&l.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`)!==a)throw Error(S.workChanged);return h(await p(t===`fix`?`/api/improvement-notes/fix`:`/api/improvement-notes`,e,{method:`POST`,body:JSON.stringify({identity:l.current.identity,revision:l.current.revision,operation:t,...n})})),!0}catch(e){return f.current&&i(e instanceof Error?e.message:String(e)),!1}finally{u.current=!1,f.current&&c(!1)}}async function _(){if(!e)return null;i(``);try{return await p(`/api/improvement-notes/capture`,e,{method:`POST`})}catch(e){return i(`${e instanceof Error?e.message:String(e)} ${S.sourceUnavailable}`),null}}return{state:t,error:r||a,busy:s,change:g,capture:_}}var fe=e({ImprovementNotesPrototype:()=>pe});function pe({initial:e=`empty`,canvas:t}){let[r,o]=(0,b.useState)(()=>se.slice(0,e===`empty`?0:e===`single`?1:3).map(e=>{let t=new DOMParser().parseFromString((0,re.renderToStaticMarkup)((0,C.jsx)(ce,{route:e.route})),`image/svg+xml`).documentElement;if(!(t instanceof SVGSVGElement))throw Error(`The sample preview could not be captured.`);return{...e,capture:ae(t,e.rect)}})),s=de(t?.token),u=s.state?.syncError===`Notes are saved locally until Hub discovers this branch.`?null:s.state?.syncError,p=t?.token?s.state?.notes??[]:r,[m,_]=(0,b.useState)(`/projects`),[v,y]=(0,b.useState)(!1),[le,fe]=(0,b.useState)(!1),[pe,me]=(0,b.useState)(null),he=(0,b.useRef)(0),[ge,w]=(0,b.useState)(!0),[T,E]=(0,b.useState)(null),[D,O]=(0,b.useState)(null),[k,A]=(0,b.useState)(``),[_e,ve]=(0,b.useState)(!1),[j,ye]=(0,b.useState)(null),[M,N]=(0,b.useState)(`active`),[P,be]=(0,b.useState)(`offline`),[F,xe]=(0,b.useState)([]),[Se,I]=(0,b.useState)(!1),[Ce,L]=(0,b.useState)(``),[we,R]=(0,b.useState)(null),[z,B]=(0,b.useState)(!1),[V,Te]=(0,b.useState)({x:160,y:160}),[H,U]=(0,b.useState)(null),[Ee,De]=(0,b.useState)(null),[W,G]=(0,b.useState)(null),K=(0,b.useRef)(null),Oe=(0,b.useRef)(null),q=(0,b.useRef)(null),ke=(0,b.useRef)(null),J=(0,b.useRef)(null),Ae=(0,b.useRef)(e===`empty`?1:e===`single`?2:4),Y=p.filter(e=>e.status===`open`),X=!t?.token||s.state!==null,je=T!==null&&!_e&&X;(0,b.useLayoutEffect)(()=>{je&&ke.current?.focus()},[je]);let Me=!!t?.token&&T!==null&&T.identity!==s.state?.identity,Ne=D!==null&&p.some(e=>e.id===D&&e.status===`ready`),Pe=p.filter(e=>e.status!==`resolved`).length,Fe=M===`ready`?S.readyFilter:M===`resolved`?S.resolvedFilter:S.allActive,Ie=p.filter(e=>M===`resolved`?e.status===`resolved`:M===`ready`?e.status===`ready`:e.status!==`resolved`),Le=!!s.state?.activeBatch||F.some(e=>p.some(t=>t.id===e.id&&t.revision===e.revision&&t.status===`sent`)),Re=p.filter(e=>e.route===m&&e.status!==`resolved`),ze=p.find(e=>e.id===we&&e.route===m),Be=(0,b.useCallback)(e=>{let t=e.kind===`element`?e.accessibleName||e.tagName:S.regionTarget;E({identity:pe?.identity??s.state?.identity,sourceId:pe?.sourceId,anchor:e,route:e.route.pathname+e.route.search+e.route.hash,target:t,selector:e.kind===`element`?e.selector:null,rect:e.rect,capture:``,capturePlaceholder:!0}),O(null),A(``)},[s.state?.identity,pe]),Ve=(0,b.useCallback)(()=>{he.current++,fe(!1),q.current?.getAttribute(`aria-pressed`)===`true`&&q.current.focus(),y(!1)},[]);async function He(){let e=++he.current;fe(!0);let n=t?.token?await s.capture():null;e===he.current&&(fe(!1),me(n),y(!0),w(!1),L(S.selectHint),B(!1),U(null),G(null))}let Ue=t?.frameRef,Z=ue({frameRef:Ue,prototypeUrl:t?.prototypeUrl,previewUrl:t?.previewUrl,notes:p,annotating:v,composing:T!==null,onSelect:Be,onRoute:_,onCancel:Ve,onProblem:L}),Q=!!t;(0,b.useLayoutEffect)(()=>{Ue&&De(Ue.current?.closest(`.canvas-shell`)?.querySelector(`#canvas-improvement-controls`)??null)},[Ue]);function We(){w(!0),t?.onOpenNotes()}function Ge(e,t){let n=Oe.current?.querySelector(`svg`);n?(E({route:m,target:t?.label??S.regionTarget,selector:t?`[data-improvement-target="${t.id}"]`:null,rect:e,capture:ae(n,e)}),A(``),O(null),G(null),U(null),B(!1)):L(S.previewUnavailable)}function Ke(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),width:Math.abs(t.x-e.x),height:Math.abs(t.y-e.y)}}function qe(e){let t=Oe.current?.getBoundingClientRect();return!t?.width||!t.height?(L(S.previewUnavailable),null):{x:Math.max(0,Math.min(960,(e.clientX-t.left)/t.width*960)),y:Math.max(0,Math.min(560,(e.clientY-t.top)/t.height*560))}}function Je(e,t){let n=Ke(e,t);G(null),U(null),n.width<8||n.height<8?L(S.regionSmall):Ge(n)}function Ye(){let e=T?.originalBody??``;k===e?(E(null),O(null),t?.token&&Ve()):ve(!0)}async function Xe(){if(Ne){L(S.readyReadOnly);return}if(!T||!k.trim()||s.busy||Me)return;if(t?.token){if(!await s.change(D===null?`create`:`edit`,{id:D,identity:T.identity,sourceId:T.sourceId,expectedNoteRevision:T.noteRevision,body:k.trim(),anchor:T.anchor,capture:T.capturePlaceholder?``:T.capture}))return;N(`active`),We(),Ve(),E(null),O(null),L(S.saved);return}let e=P===`connected`?`synced`:P===`failed`?`failed`:`local`;if(D!==null)o(t=>t.map(t=>t.id===D?{...t,body:k.trim(),revision:t.revision+1,status:`open`,sync:e}:t));else{let t={...T,id:Ae.current++,body:k.trim(),kind:`improvement_note`,author:`octocat`,status:`open`,sync:e,revision:1};o(e=>[...e,t]),R(t.id)}N(`active`),We(),E(null),O(null),L(P===`failed`?S.syncFailed:S.saved)}async function Ze(){Y.length&&!Le&&(t?.token?await s.change(`fix`)&&L(S.productionSent):(xe(Y.map(e=>({...e}))),o(e=>e.map(e=>e.status===`open`?{...e,status:`sent`}:e)),I(!0),L(S.sent)))}function Qe(e){o(t=>t.map(t=>F.some(e=>e.id===t.id&&e.revision===t.revision)&&t.status===`sent`?{...t,status:e}:t)),I(!1),w(!0),L(S.finished)}async function $(e,n){t?.token?await s.change(`status`,{id:e.id,status:n,identity:s.state?.identity,expectedNoteRevision:e.revision})&&J.current?.focus():(o(t=>t.map(t=>t.id===e.id?{...t,status:n,sync:P===`connected`?`synced`:P===`failed`?`failed`:`local`}:t)),J.current?.focus())}let $e=(0,C.jsx)(`div`,{className:`improvement-demo__actions`,children:(0,C.jsxs)(`div`,{role:`group`,"aria-label":S.title,className:`improvement-demo__split`,children:[(0,C.jsx)(x.Button,{ref:q,size:`small`,variant:`secondary`,className:`canvas-toolbar-compact-button`,"aria-label":S.annotate,title:S.annotate,leadingVisual:(0,C.jsx)(a,{}),"aria-pressed":v,disabled:le||Q&&(!Z.ready||!!t?.token&&!s.state),onClick:()=>{v?Ve():He()},children:(0,C.jsx)(`span`,{className:`canvas-toolbar-button-label`,children:S.annotate})}),(0,C.jsx)(x.Button,{ref:J,size:`small`,variant:`secondary`,"aria-label":S.openNotes(Pe),"aria-expanded":ge&&!t?.hubOpen,onClick:We,children:(0,C.jsx)(ee,{children:Pe})})]})});return(0,C.jsxs)(`section`,{"aria-label":S.title,className:`improvement-demo${Q?` improvement-demo--embedded`:``}`,onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||T||j!==null||Se||(y(!1),B(!1),U(null),G(null),K.current=null,v&&q.current?.focus())},children:[Q?null:(0,C.jsxs)(`header`,{className:`improvement-demo__browser`,children:[(0,C.jsx)(`span`,{className:`improvement-demo__browser-dot`}),(0,C.jsxs)(`code`,{children:[`localhost:5173`,m]}),(0,C.jsx)(`span`,{className:`improvement-demo__badge`,children:S.demo})]}),Q?Ee&&(0,ne.createPortal)($e,Ee):(0,C.jsxs)(`header`,{className:`improvement-demo__toolbar`,children:[(0,C.jsxs)(`div`,{className:`improvement-demo__identity`,children:[(0,C.jsx)(`strong`,{children:S.branch}),(0,C.jsx)(`span`,{children:S.title})]}),$e]}),Q?null:(0,C.jsx)(`div`,{className:`improvement-demo__disclaimer`,children:S.demoNotice}),(0,C.jsxs)(`div`,{className:`improvement-demo__workspace`,children:[Q?null:(0,C.jsxs)(`section`,{className:`improvement-demo__preview`,"aria-label":`Prototype preview`,children:[(0,C.jsxs)(`nav`,{className:`improvement-demo__pages`,"aria-label":S.sampleScreens,children:[(0,C.jsx)(`span`,{className:`improvement-demo__app-name`,children:S.sampleWorkspace}),[`/projects`,`/settings`].map(e=>(0,C.jsx)(`button`,{type:`button`,"aria-current":m===e?`page`:void 0,onClick:()=>{_(e),R(null),U(null),G(null)},children:e===`/projects`?S.projects:S.settings},e))]}),(0,C.jsxs)(`div`,{ref:Oe,className:`improvement-demo__stage${v?` improvement-demo__stage--selecting`:``}`,role:z?`button`:`group`,tabIndex:v?0:-1,"aria-describedby":`improvement-selection-hint`,"aria-label":z?`Choose region corners`:`Selectable preview`,onKeyDown:e=>{if(e.key===`Escape`)e.preventDefault(),y(!1),B(!1),U(null),G(null),K.current=null,q.current?.focus();else if(v&&e.shiftKey&&e.key===`Enter`)e.preventDefault(),B(!z),U(null),G(null),L(z?S.selectHint:S.regionHint);else if(z&&[`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Enter`,` `].includes(e.key)){if(e.preventDefault(),e.key===`Enter`||e.key===` `)H?Je(H,V):(U(V),L(S.firstCorner));else{let t={x:Math.max(0,Math.min(960,V.x+(e.key===`ArrowRight`?10:e.key===`ArrowLeft`?-10:0))),y:Math.max(0,Math.min(560,V.y+(e.key===`ArrowDown`?10:e.key===`ArrowUp`?-10:0)))};Te(t),H&&G(Ke(H,t))}}},onPointerDown:e=>{if(!v||e.button!==0||e.target instanceof Element&&e.target.closest(`[data-note-pin]`))return;e.preventDefault();let t=qe(e);if(!t)return;if(z){Te(t),K.current={start:t,target:void 0,pointerId:e.pointerId},e.currentTarget.setPointerCapture(e.pointerId);return}let n=e.target instanceof Element?e.target.closest(`[data-improvement-target]`):null;K.current={start:t,target:oe.find(e=>e.id===n?.getAttribute(`data-improvement-target`)),pointerId:e.pointerId},e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:e=>{if(!K.current||K.current.pointerId!==e.pointerId)return;let t=qe(e);if(!t)return;if(z){Te(t),H&&G(Ke(H,t));return}let n=Ke(K.current.start,t);Math.hypot(n.width,n.height)>=8&&G(n)},onPointerUp:e=>{let t=K.current;if(!t||t.pointerId!==e.pointerId)return;K.current=null,e.currentTarget.releasePointerCapture(e.pointerId);let n=qe(e);if(!n)return;if(z){Te(n),H?Je(H,n):(U(n),L(S.firstCorner));return}let r=Ke(t.start,n);Math.hypot(r.width,r.height)>=8?Je(t.start,n):t.target&&Ge(t.target.rect,t.target),G(null)},onPointerCancel:()=>{K.current=null,G(null)},onLostPointerCapture:()=>{K.current=null,G(null)},children:[(0,C.jsx)(ce,{route:m}),v&&!z?oe.filter(e=>e.route===m).map(e=>(0,C.jsx)(`button`,{type:`button`,"data-improvement-target":e.id,className:`improvement-demo__element-target`,"aria-label":e.label,style:{left:`${e.rect.x/960*100}%`,top:`${e.rect.y/560*100}%`,width:`${e.rect.width/960*100}%`,height:`${e.rect.height/560*100}%`},onClick:()=>{T||Ge(e.rect,e)}},e.id)):null,W?(0,C.jsx)(`div`,{className:`improvement-demo__outline`,style:{left:`${W.x/960*100}%`,top:`${W.y/560*100}%`,width:`${W.width/960*100}%`,height:`${W.height/560*100}%`}}):null,z?(0,C.jsx)(`span`,{className:`improvement-demo__corner`,style:{left:`${V.x/960*100}%`,top:`${V.y/560*100}%`}}):null,Re.map(e=>(0,C.jsx)(`button`,{"data-note-pin":!0,type:`button`,className:`improvement-demo__pin${we===e.id?` improvement-demo__pin--selected`:``}`,style:{left:`${Math.min(e.rect.x+e.rect.width,930)/960*100}%`,top:`${e.rect.y/560*100}%`},"aria-label":`Open improvement note ${e.id}: ${e.target}`,onClick:()=>{R(e.id),w(!0),N(`active`)},children:e.id},e.id)),ze?(0,C.jsx)(`div`,{className:`improvement-demo__outline improvement-demo__outline--saved`,style:{left:`${ze.rect.x/960*100}%`,top:`${ze.rect.y/560*100}%`,width:`${ze.rect.width/960*100}%`,height:`${ze.rect.height/560*100}%`}}):null]}),(0,C.jsxs)(`footer`,{className:`improvement-demo__preview-footer`,children:[(0,C.jsx)(`span`,{id:`improvement-selection-hint`,children:v?S.keyboardHint:S.navigationHint}),(0,C.jsx)(`span`,{children:`960 × 560`})]})]}),Q&&!t?.token?(0,C.jsx)(`div`,{className:`canvas-improvement-markers`,children:Re.map(e=>{let t=Z.resolutions.get(e.id);return!t||t.status!==`resolved`&&t.status!==`moved`?null:(0,C.jsx)(`button`,{type:`button`,className:`improvement-demo__pin`,style:{left:t.point.x,top:t.point.y},"aria-label":`Open improvement note ${e.id}: ${e.target}`,onClick:()=>{R(e.id),N(e.status===`ready`?`ready`:`active`),We()},children:e.id},e.id)})}):null,t?.token?(0,C.jsx)(te,{identity:s.state?.identity??``,controls:!1,returnFocusRef:J,open:ge&&!t.hubOpen&&!T,active:(ge||v)&&!t.hubOpen&&!T,onOpen:We,onClose:()=>{w(!1),J.current?.focus()},threads:p.map(e=>ie(e,Z.resolutions.get(e.id))),busy:s.busy||!s.state,activeBatch:!!s.state?.activeBatch,error:s.error||u||s.state?.profileError||(s.state?Z.ready?``:S.bridgeUnavailable:S.storageLoading),onSelect:e=>{let n=p.find(t=>t.id===e);n&&n.route!==m&&t.onNavigate(new URL(n.route,t.prototypeUrl).href)},onFollowUp:(e,t)=>s.change(`follow-up`,{id:e.id,expectedNoteRevision:e.revision,body:t}),onResolve:e=>s.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`resolved`}),onDelete:e=>s.change(`delete`,{id:e.id,expectedNoteRevision:e.revision}),onFix:()=>s.change(`fix`),onRetry:e=>s.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`open`})}):(0,C.jsxs)(h,{className:`improvement-notes-sidebar`,contentClassName:`improvement-demo__panel`,title:S.notes,open:ge&&!t?.hubOpen,closeLabel:S.closeNotes,onClose:()=>{w(!1),J.current?.focus()},children:[s.error&&(!T||!X)?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:s.error}):null,u?(0,C.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:u}):null,t?.token&&!s.state?(0,C.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:S.storageLoading}):null,Q&&!Z.ready?(0,C.jsx)(`p`,{role:`status`,className:`improvement-demo__notice`,children:S.bridgeUnavailable}):null,(0,C.jsxs)(`div`,{className:`improvement-demo__filters`,children:[(0,C.jsxs)(x.ActionMenu,{size:`small`,selectionVariant:`single`,menuAlignment:`start`,onSelect:N,children:[(0,C.jsx)(x.ActionMenu.Button,{size:`small`,variant:`secondary`,"aria-label":`${S.filter}: ${Fe}`,children:Fe}),(0,C.jsx)(x.ActionMenu.Overlay,{"aria-label":S.filter,children:[{value:`active`,label:S.allActive},{value:`ready`,label:S.readyFilter},{value:`resolved`,label:S.resolvedFilter}].map(e=>(0,C.jsx)(x.ActionMenu.Item,{value:e.value,selected:M===e.value,role:`menuitemradio`,onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:e.label},e.value))})]}),M===`active`?(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,className:`improvement-demo__fix-all`,leadingVisual:(0,C.jsx)(l,{}),"aria-label":S.fixAll(Y.length),disabled:!Y.length||Le||s.busy,title:Le?Q?S.productionBusy:S.fixBusy:void 0,onClick:()=>void Ze(),children:(0,C.jsxs)(`span`,{className:`improvement-demo__fix-label`,children:[S.fix,(0,C.jsx)(ee,{children:Y.length})]})}):null]}),(0,C.jsxs)(`div`,{className:`improvement-demo__note-list`,children:[Ie.length?null:(0,C.jsxs)(`div`,{className:`improvement-demo__empty`,children:[(0,C.jsx)(d,{size:28}),(0,C.jsx)(`h2`,{children:p.length?S.emptyFilter:S.empty}),p.length?null:(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{children:S.emptyBody}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,leadingVisual:(0,C.jsx)(a,{}),disabled:le||Q&&(!Z.ready||!X),onClick:()=>{He(),q.current?.focus()},children:S.annotate})]})]}),Ie.map(e=>(0,C.jsxs)(`article`,{"aria-label":`Improvement note ${e.id}`,className:`improvement-demo__note${we===e.id?` improvement-demo__note--focused`:``}`,children:[(0,C.jsxs)(`div`,{className:`improvement-demo__note-header`,children:[e.status===`ready`?(0,C.jsx)(`span`,{className:`improvement-demo__status improvement-demo__status--ready`,children:S.statuses.ready}):null,(0,C.jsx)(`p`,{className:`improvement-demo__body`,children:e.body}),(0,C.jsx)(`div`,{className:`improvement-demo__note-menu`,children:(0,C.jsxs)(x.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,children:[(0,C.jsx)(x.ActionMenu.Button,{className:`improvement-demo__menu-trigger`,variant:`subtle`,"aria-label":S.noteActions(e.target),leadingVisual:(0,C.jsx)(n,{size:16}),children:``}),(0,C.jsxs)(x.ActionMenu.Overlay,{"aria-label":S.noteActions(e.target),children:[(0,C.jsx)(x.ActionMenu.Item,{value:`edit`,className:`improvement-demo__menu-item`,leadingVisual:(0,C.jsx)(d,{size:16}),disabled:e.status===`ready`,title:e.status===`ready`?S.readyReadOnly:void 0,onClick:()=>{e.status===`ready`?L(S.readyReadOnly):(E({...e,identity:s.state?.identity,noteRevision:e.revision,originalBody:e.body}),O(e.id),A(e.body))},onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:S.editAction}),(0,C.jsx)(x.ActionMenu.Item,{value:`delete`,className:`improvement-demo__menu-item improvement-demo__delete-item`,leadingVisual:(0,C.jsx)(c,{size:16}),onClick:()=>ye({id:e.id,revision:e.revision,body:e.body,identity:s.state?.identity}),onKeyDownCapture:e=>{(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())},children:S.deleteAction})]})]})})]}),(0,C.jsxs)(`div`,{className:`improvement-demo__note-meta`,children:[(0,C.jsx)(`span`,{children:e.target}),(0,C.jsx)(`span`,{className:`improvement-demo__note-separator`,"aria-hidden":`true`}),(0,C.jsx)(`button`,{className:`improvement-demo__note-route`,type:`button`,"aria-label":`${S.viewTarget}: ${e.target} (${e.route})`,onClick:()=>{if(t&&e.anchor){let n=new URL(t.prototypeUrl);n.pathname=e.anchor.route.pathname,n.search=e.anchor.route.search,n.hash=e.anchor.route.hash,t.onNavigate(n.href)}else _(e.route);R(e.id)},children:(0,C.jsx)(`code`,{children:e.route})})]}),e.status!==`open`&&e.status!==`ready`?(0,C.jsx)(`span`,{className:`improvement-demo__status improvement-demo__status--${e.status}`,children:S.statuses[e.status]}):null,e.status===`ready`?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`details`,{className:`improvement-demo__solution`,children:[(0,C.jsxs)(`summary`,{children:[(0,C.jsx)(i,{size:14,"aria-hidden":`true`}),S.solution]}),(0,C.jsx)(`p`,{children:e.result||(Q?S.solutionUnavailable:S.noteReady)})]}),(0,C.jsx)(`p`,{className:`improvement-demo__read-only`,children:S.readyReadOnly})]}):e.result?(0,C.jsx)(`p`,{className:`improvement-demo__result`,children:e.result}):null,e.capture&&!e.capturePlaceholder?(0,C.jsx)(`img`,{className:`improvement-demo__thumbnail`,src:e.capture,alt:`${e.capturePlaceholder?S.capturePlaceholder:S.capture}: ${e.target}`}):null,!Q&&(e.status===`sent`||e.status===`blocked`)?(0,C.jsx)(`p`,{className:`improvement-demo__result`,children:e.status===`sent`?S.noteSent:S.noteBlocked}):null,(0,C.jsxs)(`div`,{className:`improvement-demo__note-actions`,children:[Q&&e.status===`sent`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>void $(e,`open`),children:S.returnToActive}):null,e.status===`ready`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,leadingVisual:(0,C.jsx)(f,{}),onClick:()=>$(e,`resolved`),children:S.resolve}):null,e.status===`resolved`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`open`),children:S.reopen}):null,e.status===`blocked`?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`open`),children:S.retryFix}):null]}),!Q&&e.status===`sent`?(0,C.jsxs)(`details`,{className:`improvement-demo__simulation`,children:[(0,C.jsx)(`summary`,{children:S.perNoteResult}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`ready`),children:S.complete}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>$(e,`blocked`),children:S.block})]}):null,Q?null:(0,C.jsx)(`small`,{className:e.sync===`failed`?`improvement-demo__sync-error`:``,children:S.sync[e.sync]})]},e.id))]}),!Q&&Le?(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>I(!0),children:S.batchLabel(F.length)}):null,Q?null:(0,C.jsxs)(`footer`,{className:`improvement-demo__connection`,children:[(0,C.jsxs)(`label`,{children:[S.syncControls,(0,C.jsxs)(`select`,{value:P,onChange:e=>{let t=e.target.value;(t===`offline`||t===`connected`||t===`failed`)&&(be(t),t!==`offline`&&o(e=>e.map(e=>({...e,sync:t===`connected`?`synced`:`failed`}))))},children:[(0,C.jsx)(`option`,{value:`offline`,children:S.offline}),(0,C.jsx)(`option`,{value:`connected`,children:S.connected}),(0,C.jsx)(`option`,{value:`failed`,children:S.syncFailure})]})]}),p.some(e=>e.sync===`failed`)?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`p`,{children:S.syncFailed}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>{be(`connected`),o(e=>e.map(e=>({...e,sync:`synced`}))),L(S.syncSuccess)},children:S.syncRetry})]}):null]})]})]}),(0,C.jsx)(`p`,{className:`improvement-demo__announcement${Q?` visually-hidden`:``}`,role:`status`,children:Ce}),je?(0,C.jsxs)(g,{title:D===null?S.add:S.edit,closeLabel:S.closeComposer,returnFocusRef:q,onClose:Ye,className:`improvement-demo__composer`,children:[s.error?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:s.error}):null,Me?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:S.branchChanged}):null,Ne?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:S.readyReadOnly}):null,(0,C.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),Xe()},children:[(0,C.jsxs)(x.FormControl,{fullWidth:!0,children:[(0,C.jsx)(x.FormControl.Label,{children:S.label}),(0,C.jsx)(x.Textarea,{ref:ke,value:k,maxLength:1e4,rows:4,placeholder:S.placeholder,readOnly:Ne,onChange:e=>A(e.target.value),required:!0})]}),(0,C.jsx)(`div`,{className:`improvement-demo__dialog-actions`,children:(0,C.jsx)(x.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!k.trim()||s.busy||Me||Ne,children:D===null?S.save:S.saveEdit})})]})]}):null,_e&&X?(0,C.jsxs)(g,{title:S.discardTitle,closeLabel:S.closeDiscard,returnFocusRef:q,onClose:()=>ve(!1),children:[(0,C.jsx)(`p`,{children:S.discardBody}),(0,C.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>ve(!1),children:S.keep}),(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,onClick:()=>{ve(!1),E(null),O(null),A(``),t?.token&&Ve()},children:S.discard})]})]}):null,j!==null&&X?(0,C.jsxs)(g,{title:S.deleteTitle,closeLabel:S.closeDelete,returnFocusRef:J,onClose:()=>ye(null),children:[(0,C.jsx)(`p`,{children:S.deleteBody}),(0,C.jsx)(`blockquote`,{className:`improvement-demo__delete-preview`,children:j.body}),(0,C.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>ye(null),children:S.cancel}),(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,className:`improvement-demo__delete-confirm`,onClick:async()=>{(!t?.token||await s.change(`delete`,{id:j.id,identity:j.identity,expectedNoteRevision:j.revision}))&&(o(e=>e.filter(e=>e.id!==j.id)),ye(null),R(null))},children:S.deleteAction})]})]}):null,Se?(0,C.jsxs)(g,{title:S.handoff,closeLabel:S.closeBatch,returnFocusRef:J,onClose:()=>I(!1),className:`improvement-demo__handoff`,children:[(0,C.jsx)(`p`,{children:S.handoffNotice}),(0,C.jsxs)(`div`,{className:`improvement-demo__batch-context`,children:[(0,C.jsx)(`code`,{children:t?.branch??S.branch}),(0,C.jsxs)(`span`,{children:[Q?S.canvasBatchSource:S.sampleBatchSource,` · `,F.length,` notes`]})]}),(0,C.jsx)(`ol`,{children:F.map(e=>(0,C.jsxs)(`li`,{children:[(0,C.jsxs)(`strong`,{children:[`#`,e.id,` · `,e.target]}),(0,C.jsxs)(`code`,{children:[e.route,` · revision `,e.revision]}),(0,C.jsx)(`p`,{children:e.body}),(0,C.jsx)(`img`,{className:`improvement-demo__thumbnail`,src:e.capture,alt:`${e.capturePlaceholder?S.capturePlaceholder:S.capture}: ${e.target}`}),(0,C.jsx)(`code`,{children:e.selector??`Region: ${e.rect.x}, ${e.rect.y}, ${e.rect.width} × ${e.rect.height}`})]},`${e.id}-${e.revision}`))}),(0,C.jsx)(`p`,{className:`improvement-demo__form-hint`,children:S.batchHint}),(0,C.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>I(!1),children:S.closeHandoff}),(0,C.jsx)(x.Button,{size:`small`,variant:`secondary`,onClick:()=>Qe(`blocked`),children:S.block}),(0,C.jsx)(x.Button,{size:`small`,variant:`primary`,onClick:()=>Qe(`ready`),children:S.complete})]})]}):null]})}export{fe as t};
\ No newline at end of file
+import{n as e,r as t}from"./renderer-rolldown-runtime.js";import{K as n,M as r,X as i,Y as a,q as o}from"./renderer-vendor.js";import{a as s,c,m as l,o as u,p as d,s as f}from"./renderer.js";import{t as p}from"./renderer-prototype-canvas-improvement-threads.js";var m=t(i(),1),h=a(),g=n(),_={title:`Pick & polish`,localAuthor:`Local author`,bridgeUnavailable:`Annotation needs the updated Replica preview bridge. Reconnect or reload the preview after updating the canvas.`,sourceUnavailable:`You can still save this improvement locally, but it cannot sync without a captured source.`,annotate:`Pick & polish`,openNotes:e=>`Open improvement notes (${e})`,notes:`Pick & polish`,selectHint:`Click an element or drag a rectangle. For a keyboard region, focus the preview, press Shift+Enter, then use arrows and Enter to choose two corners. Escape exits annotation mode.`,regionSmall:`Choose a larger region, at least 8 preview pixels wide and high.`,add:`Add improvement note`,label:`What should change?`,placeholder:`Describe the improvement you want Copilot to make...`,save:`Save note`,cancel:`Cancel`,discard:`Discard draft`,keep:`Keep writing`,discardTitle:`Discard your unsaved note?`,discardBody:`Your saved notes will stay unchanged.`,capture:`Captured target`,editAction:`Edit`,previewUnavailable:`The preview selection is unavailable. Try selecting the target again.`,saved:`Note added.`,storageLoading:`Loading your notes...`,branchChanged:`The prototype branch changed. Close this draft and select the target again.`,workChanged:`The open improvements changed while syncing. Review them and select Fix all again.`,closeComposer:`Close note composer`,closeDiscard:`Close discard confirmation`};function v(e,t){let n=[e.thread?.originalStatus??e.status,...e.thread?.messages.filter(e=>e.role===`author`).map(e=>e.status)??[]];return{id:e.id,revision:e.revision,body:e.body,capture:e.capture,author:e.thread?.originalAuthor?`@${e.thread.originalAuthor.login}`:e.author===`local`?_.localAuthor:`@${e.author}`,avatarUrl:(e.thread?.originalAuthor??e.authorProfile)?.avatarUrl,target:e.target,path:e.route,status:e.status,originalPending:(e.thread?.originalStatus??e.status)===`open`,...n.includes(`sent`)?{retryStatus:`sent`}:n.includes(`blocked`)?{retryStatus:`blocked`}:{},messages:e.thread?.messages.map(e=>({...e,...e.role===`author`&&e.author?{author:`@${e.author.login}`,avatarUrl:e.author.avatarUrl}:{author:void 0},pending:e.role===`author`&&e.status===`open`}))??(e.result?[{id:`legacy-result`,role:`copilot`,body:e.result,status:e.status===`blocked`?`blocked`:`ready`}]:[]),...t&&(t.status===`resolved`||t.status===`moved`)?{point:t.point}:{}}}function y(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function b({frameRef:e,prototypeUrl:t,previewUrl:n,notes:r,annotating:i,composing:a,onSelect:o,onRoute:s,onCancel:l,onProblem:d}){let p=n??t,[h,g]=(0,m.useState)(null),[v,b]=(0,m.useState)(new Map),x=JSON.stringify(r.filter(e=>e.anchor).slice(0,200).map(e=>({id:e.id,anchor:e.anchor}))),S=(0,m.useEffectEvent)(e=>{if(!i||a)return;let t=f.safeParse(e);t.success?o(t.data):(l(),d(_.previewUnavailable))}),C=(0,m.useCallback)((t,n={})=>{p&&h&&e?.current?.contentWindow&&e.current.contentWindow.postMessage({type:t,nonce:h.nonce,...n},new URL(p).origin)},[h,e,p]);return(0,m.useEffect)(()=>{let t=e?.current;if(!t||!p)return;let n=new URL(p).origin,r=crypto.randomUUID(),i=Date.now(),a=JSON.parse(x);function o(){t?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:r},n),t?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:r,anchors:a},n)}function f(){r=crypto.randomUUID(),i=Date.now(),g({nonce:r,ready:!1}),b(new Map),l(),o()}function m(e){let a=e.data;if(e.source===t?.contentWindow&&e.origin===n&&y(a)&&a.nonce===r){if(a.type===`replica:canvas:ready`){let e=c.safeParse(a.route);if(a.protocolVersion!==1||a.improvementSelection!==!0||!e.success){g({nonce:r,ready:!1}),d(_.bridgeUnavailable);return}i=Date.now(),g(e=>e?.nonce===r&&e.ready?e:{nonce:r,ready:!0}),s(e.data.pathname+e.data.search+e.data.hash)}else if(a.type===`replica:canvas:selected`)S(a.anchor);else if(a.type===`replica:canvas:resolved`&&Array.isArray(a.results)){let e=new Map;for(let t of a.results){if(!y(t))continue;let n=u.safeParse({commentId:t.id,status:`resolved`,point:{x:t.x,y:t.y},rect:t.rect??{x:t.x,y:t.y,width:1,height:1}});n.success&&e.set(n.data.commentId,n.data)}b(e)}else a.type===`replica:canvas:selection-failed`||a.type===`replica:canvas:bridge-error`?(l(),d(a.reason===`area-too-small`?_.regionSmall:_.bridgeUnavailable)):a.type===`replica:canvas:selection-cancelled`?a.reason!==`command`&&l():a.type===`replica:canvas:conversation-dismiss-requested`&&window.dispatchEvent(new Event(`replica:review-dismiss`))}}t.addEventListener(`load`,f),window.addEventListener(`message`,m),g({nonce:r,ready:!1}),o();let h=window.setInterval(()=>{Date.now()-i>2e4&&(g({nonce:r,ready:!1}),b(new Map),l(),d(_.bridgeUnavailable)),o()},2e3);return()=>{t.removeEventListener(`load`,f),window.removeEventListener(`message`,m),window.clearInterval(h),t.contentWindow?.postMessage({type:`replica:canvas:cancel-selection`,nonce:r},n),t.contentWindow?.postMessage({type:`replica:canvas:clear-selection`,nonce:r},n)}},[x,e,p,l,d,s]),(0,m.useEffect)(()=>{h?.ready&&(i&&!a?C(`replica:canvas:select`,{mode:`improvement`}):C(`replica:canvas:cancel-selection`),a||C(`replica:canvas:clear-selection`))},[i,a,h?.ready,C]),{ready:h?.ready===!0,resolutions:v}}function x(e){let[t,n]=(0,m.useState)(null),[r,i]=(0,m.useState)(``),[a,o]=(0,m.useState)(``),[c,l]=(0,m.useState)(!1),u=(0,m.useRef)(null),d=(0,m.useRef)(!1),f=(0,m.useRef)(null),p=(0,m.useRef)(!1),h=(0,m.useRef)(0);function g(e){p.current&&(u.current=e,n(e))}(0,m.useEffect)(()=>{if(!e)return;p.current=!0;let t=!1,r=!1,a=0;async function c(){if(d.current||r)return;r=!0;let c=h.current;try{let n=await s(`/api/improvement-notes`,e);if(d.current||c!==h.current||t)return;if(g(n),Date.now()-a>15e3){a=Date.now();let r=s(`/api/improvement-notes/sync`,e,{method:`POST`,body:JSON.stringify({identity:n.identity,revision:n.revision})}).then(e=>{t||g(e)});f.current=r;try{await r}finally{f.current===r&&(f.current=null)}}t||o(``)}catch(e){t||(e instanceof Error&&`statusCode`in e&&e.statusCode===403&&(u.current=null,n(null),i(``)),o(e instanceof Error?e.message:String(e)))}finally{r=!1}}c();let l=window.setInterval(()=>void c(),3e3);return()=>{p.current=!1,t=!0,window.clearInterval(l)}},[e]);async function v(t,n={}){if(!e||!u.current||d.current)return!1;let r=u.current.identity,a=u.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`);d.current=!0,h.current++,l(!0),i(``);try{if(await f.current,!p.current)return!1;if(!u.current||u.current.identity!==r)throw Error(_.branchChanged);if(t===`fix`&&u.current.notes.filter(e=>e.status===`open`).map(e=>`${e.id}:${e.revision}`).sort().join(`,`)!==a)throw Error(_.workChanged);return g(await s(t===`fix`?`/api/improvement-notes/fix`:`/api/improvement-notes`,e,{method:`POST`,body:JSON.stringify({identity:u.current.identity,revision:u.current.revision,operation:t,...n})})),!0}catch(e){return p.current&&i(e instanceof Error?e.message:String(e)),!1}finally{d.current=!1,p.current&&l(!1)}}async function y(){if(!e)return null;i(``);try{return await s(`/api/improvement-notes/capture`,e,{method:`POST`})}catch(e){return i(`${e instanceof Error?e.message:String(e)} ${_.sourceUnavailable}`),null}}return{state:t,error:r||a,busy:c,change:v,capture:y}}var S=e({ImprovementNotesPrototype:()=>w}),C=o();function w({canvas:e}){let t=x(e.token),n=t.state?.notes??[],[i,a]=(0,m.useState)(``),[o,s]=(0,m.useState)(!1),[c,u]=(0,m.useState)(!1),[f,y]=(0,m.useState)(null),[S,w]=(0,m.useState)(null),[T,E]=(0,m.useState)(``),[D,O]=(0,m.useState)(!1),[k,A]=(0,m.useState)(!0),[j,M]=(0,m.useState)(``),N=(0,m.useRef)(0),P=(0,m.useRef)(null),F=(0,m.useRef)(null),I=(0,m.useRef)(null),L=S!==null&&S.identity!==t.state?.identity,R=S!==null&&!D&&t.state!==null,z=n.filter(e=>e.status!==`resolved`).length,B=t.state?.syncError===`Notes are saved locally until Hub discovers this branch.`?null:t.state?.syncError,V=(0,m.useCallback)(e=>{w({identity:f?.identity??t.state?.identity,sourceId:f?.sourceId,anchor:e}),E(``)},[t.state?.identity,f]),H=(0,m.useCallback)(()=>{N.current++,u(!1),P.current?.getAttribute(`aria-pressed`)===`true`&&P.current.focus(),s(!1)},[]),U=b({frameRef:e.frameRef,prototypeUrl:e.prototypeUrl,previewUrl:e.previewUrl,notes:n,annotating:o,composing:S!==null,onSelect:V,onRoute:a,onCancel:H,onProblem:M});(0,m.useLayoutEffect)(()=>{R&&F.current?.focus()},[R]);function W(){A(!0),e.onOpenNotes()}async function G(){let e=++N.current;u(!0);let n=await t.capture();e===N.current&&(u(!1),y(n),s(!0),A(!1),M(_.selectHint))}function K(){T===``?(w(null),H()):O(!0)}async function q(){S&&T.trim()&&!t.busy&&!L&&await t.change(`create`,{identity:S.identity,sourceId:S.sourceId,body:T.trim(),anchor:S.anchor,capture:``})&&(W(),H(),w(null),M(_.saved))}return(0,C.jsxs)(`section`,{"aria-label":_.title,className:`improvement-demo`,onKeyDown:e=>{e.key===`Escape`&&!e.defaultPrevented&&!S&&H()},children:[e.toolbarTarget&&(0,h.createPortal)((0,C.jsxs)(`div`,{role:`group`,"aria-label":_.title,className:`improvement-demo__split`,children:[(0,C.jsx)(g.Button,{ref:P,size:`small`,variant:`secondary`,className:`canvas-toolbar-compact-button`,title:_.annotate,leadingVisual:(0,C.jsx)(r,{}),"aria-pressed":o,disabled:c||!U.ready||!t.state,onClick:()=>{o?H():G()},children:(0,C.jsx)(`span`,{className:`canvas-toolbar-button-label`,children:_.annotate})}),(0,C.jsx)(g.Button,{ref:I,size:`small`,variant:`secondary`,"aria-label":_.openNotes(z),"aria-expanded":k&&!e.hubOpen,onClick:W,children:(0,C.jsx)(d,{children:z})})]}),e.toolbarTarget),(0,C.jsx)(p,{identity:t.state?.identity??``,controls:!1,returnFocusRef:I,open:k&&!e.hubOpen&&!S,active:(k||o)&&!e.hubOpen&&!S,onOpen:W,onClose:()=>{A(!1),I.current?.focus()},threads:n.map(e=>v(e,U.resolutions.get(e.id))),busy:t.busy||!t.state,activeBatch:!!t.state?.activeBatch,error:t.error||B||t.state?.profileError||(t.state?U.ready?``:_.bridgeUnavailable:_.storageLoading),onSelect:t=>{let r=n.find(e=>e.id===t);r&&r.route!==i&&e.onNavigate(new URL(r.route,e.prototypeUrl).href)},onFollowUp:(e,n)=>t.change(`follow-up`,{id:e.id,expectedNoteRevision:e.revision,body:n}),onResolve:e=>t.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`resolved`}),onDelete:e=>t.change(`delete`,{id:e.id,expectedNoteRevision:e.revision}),onFix:()=>t.change(`fix`),onRetry:e=>t.change(`status`,{id:e.id,expectedNoteRevision:e.revision,status:`open`})}),(0,C.jsx)(`p`,{className:`visually-hidden`,role:`status`,children:j}),R?(0,C.jsxs)(l,{title:_.add,closeLabel:_.closeComposer,returnFocusRef:P,onClose:K,className:`improvement-demo__composer`,children:[t.error?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:t.error}):null,L?(0,C.jsx)(`p`,{role:`alert`,className:`improvement-demo__notice`,children:_.branchChanged}):null,(0,C.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),q()},children:[(0,C.jsxs)(g.FormControl,{fullWidth:!0,children:[(0,C.jsx)(g.FormControl.Label,{children:_.label}),(0,C.jsx)(g.Textarea,{ref:F,value:T,maxLength:1e4,rows:4,placeholder:_.placeholder,onChange:e=>E(e.target.value),required:!0})]}),(0,C.jsx)(`div`,{className:`improvement-demo__dialog-actions`,children:(0,C.jsx)(g.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!T.trim()||t.busy||L,children:_.save})})]})]}):null,D&&t.state?(0,C.jsxs)(l,{title:_.discardTitle,closeLabel:_.closeDiscard,returnFocusRef:P,onClose:()=>O(!1),children:[(0,C.jsx)(`p`,{children:_.discardBody}),(0,C.jsxs)(`div`,{className:`improvement-demo__dialog-actions`,children:[(0,C.jsx)(g.Button,{size:`small`,variant:`secondary`,onClick:()=>O(!1),children:_.keep}),(0,C.jsx)(g.Button,{size:`small`,variant:`primary`,onClick:()=>{O(!1),w(null),E(``),H()},children:_.discard})]})]}):null]})}export{S as t};
\ No newline at end of file
diff --git a/.github/extensions/replica-prototype/assets/renderer.css b/.github/extensions/replica-prototype/assets/renderer.css
index 4dcced1c..58914887 100644
--- a/.github/extensions/replica-prototype/assets/renderer.css
+++ b/.github/extensions/replica-prototype/assets/renderer.css
@@ -1,2 +1,2 @@
-.hub-spinner{vertical-align:middle;border:2px solid color-mix(in srgb, currentColor 23%, transparent);border-block-start-color:currentColor;border-radius:50%;flex:none;width:1.25rem;height:1.25rem;display:inline-block}.hub-spinner--small{width:1rem;height:1rem}@media (prefers-reduced-motion:no-preference){.hub-spinner{animation:.75s linear infinite hub-spinner-turn}}@keyframes hub-spinner-turn{to{transform:rotate(360deg)}}.hub-visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.hub-icon-button:is(button,a){width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);flex:none;gap:0;padding:0}.hub-icon-button.hub-icon-button--danger:not(:disabled):not([aria-disabled=true]){color:var(--hub-fg-danger)}.hub-icon-button.hub-icon-button--invisible:is(button,a){box-shadow:none;background-color:#0000;border:0}.canvas-dialog{box-sizing:border-box;width:min(32rem,100% - 2rem);max-height:calc(100% - 2rem);color:var(--hub-fg-default);background:var(--hub-canvas-default);border:1px solid var(--hub-border-default);box-shadow:var(--hub-shadow-floating);border-radius:.75rem;padding:1.25rem}.canvas-dialog::backdrop{background:#00000080}.canvas-dialog-header{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.canvas-dialog-header h2{margin:0}.canvas-dialog>p{margin:.75rem 0}.build-details-list{gap:1.25rem;margin:0;display:grid}.build-details-list dt{color:var(--brand-color-text-muted,#656d76);margin-bottom:.375rem;font-weight:600}.build-details-list dd{min-width:0;font-size:var(--brand-text-size-200,1rem);align-items:center;gap:.5rem;margin:0;display:flex}.build-details-list code{overflow-wrap:anywhere;min-width:0;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace}.build-details-list dd>svg{color:var(--brand-color-text-muted,#656d76);flex:none}.build-details-list button{flex-shrink:0}.build-details-copy-error{color:var(--brand-color-danger-fg,#cf222e);margin-top:1rem;display:block}.hub-connection-approval{gap:var(--base-size-16);margin-block:1rem 0;display:grid}.hub-connection-approval p{margin:0}.hub-connection-approval-actions{border:1px solid var(--brand-button-primary-bgColor-rest);border-radius:var(--base-size-6);justify-self:start;align-items:stretch;gap:0;display:inline-flex}.hub-connection-approval-actions>:is(a,button){box-shadow:none;border:0;border-radius:0;margin:0}.hub-connection-approval-actions>a{overflow-wrap:anywhere;border-start-start-radius:calc(var(--base-size-6) - 1px);border-end-start-radius:calc(var(--base-size-6) - 1px)}.hub-connection-approval-actions>.hub-connection-approval-copy{--hub-approval-separator:var(--brand-button-primary-borderColor-active);--brand-button-secondary-bgColor-rest:var(--brand-button-primary-bgColor-rest);--brand-button-secondary-bgColor-hover:var(--brand-button-primary-bgColor-hover);--brand-button-secondary-bgColor-active:var(--brand-button-primary-bgColor-active);--brand-button-secondary-fgColor-rest:var(--brand-button-primary-fgColor-rest);--brand-button-secondary-borderColor-rest:var(--hub-approval-separator);--brand-button-secondary-borderColor-hover:var(--hub-approval-separator);--brand-button-secondary-borderColor-active:var(--hub-approval-separator);width:var(--brand-control-medium-size);min-width:var(--brand-control-medium-size);border-inline-start:1px solid var(--hub-approval-separator);border-start-end-radius:calc(var(--base-size-6) - 1px);border-end-end-radius:calc(var(--base-size-6) - 1px);height:auto}.hub-connection-approval-actions>:focus-visible{z-index:1;position:relative}.hub-connection-origin{align-items:center;gap:.5rem;margin-bottom:1rem;display:flex}.hub-connection-origin a{min-width:0;color:inherit;overflow-wrap:anywhere;text-decoration:none}.hub-connection-origin a:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px}.hub-connection-origin-field{justify-items:start;gap:.5rem;margin-bottom:1rem;display:grid}.hub-connection-origin-input{align-items:center;gap:.5rem;width:100%;display:flex}.hub-alert{--hub-alert-accent:var(--hub-attention);min-width:0;padding:var(--hub-space-16);align-items:center;gap:var(--hub-space-12);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);border-inline-start:var(--brand-borderWidth-thicker) solid var(--hub-alert-accent);border-radius:var(--hub-radius-small);background:var(--hub-canvas-default);color:var(--hub-fg-default);grid-template-columns:auto minmax(0,1fr) auto;display:grid}.hub-alert--critical{--hub-alert-accent:var(--hub-fg-danger)}.hub-alert--info{--hub-alert-accent:var(--hub-accent)}.hub-alert--success{--hub-alert-accent:var(--hub-fg-success)}.hub-alert--compact{padding:var(--hub-space-12) var(--hub-space-16)}.hub-alert__icon{color:var(--hub-alert-accent);flex:none}.hub-alert__content{min-width:0}.hub-alert__message{overflow-wrap:anywhere;min-width:0;margin:0}.hub-alert__title{font-weight:var(--brand-text-weight-bold)}.hub-alert__description{margin-block-start:var(--hub-space-4);display:block}.hub-alert__action{justify-self:end;align-items:center;gap:var(--hub-space-8);display:flex}@media (width<=48rem){.hub-alert__action{grid-column:2/-1;justify-self:start}}.publish-changes-dialog__actions{gap:var(--base-size-8);flex-wrap:wrap;display:flex}.publish-changes-dialog p{margin:0}.publish-changes-dialog__files{max-height:10rem;padding-left:var(--base-size-20);overflow-wrap:anywhere;margin:0;overflow-y:auto}.copyable-text-input{width:100%;min-width:0}.copyable-text-input__control{min-width:0;position:relative}.copyable-text-input__input{min-width:0;text-overflow:ellipsis;padding-inline-end:calc(var(--brand-control-small-size) + var(--hub-space-12))}.copyable-text-input:not(.copyable-text-input--compact) .copyable-text-input__input{text-overflow:clip;padding-inline-end:var(--hub-space-12)}.copyable-text-input .copyable-text-input__button{position:absolute;inset-block-start:50%;inset-inline-end:var(--hub-space-4);transform:translateY(-50%)}.copyable-text-input:not(.copyable-text-input--compact) .copyable-text-input__button:is(button){--brand-button-subtle-bgColor-hover:color-mix(in srgb, var(--hub-fg-default) 12%, var(--hub-canvas-default));--brand-button-subtle-bgColor-active:color-mix(in srgb, var(--hub-fg-default) 18%, var(--hub-canvas-default));width:calc(var(--brand-control-medium-size) - var(--hub-space-8));min-width:0;height:calc(var(--brand-control-medium-size) - var(--hub-space-8));background-color:var(--hub-canvas-default);min-height:0;color:var(--hub-fg-default);border-color:#0000}.copyable-text-input:not(.copyable-text-input--compact) .copyable-text-input__button:before{background:linear-gradient(to right, transparent, var(--hub-canvas-default));content:"";pointer-events:none;width:1rem;position:absolute;inset-block:0;inset-inline-end:100%}.copyable-text-input__button:focus-visible{outline:2px solid var(--hub-focus);outline-offset:-2px}.copyable-text-input__error{color:var(--hub-fg-danger);margin-block-start:var(--hub-space-8);display:block}.copyable-text-input--compact .copyable-text-input__control{align-items:center;gap:1px;display:flex}.copyable-text-input--compact .copyable-text-input__input{min-width:0;height:var(--brand-control-small-size);padding:0 var(--hub-space-12);border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);color:var(--hub-fg-default);font-size:var(--brand-text-size-100);flex:1}.copyable-text-input--compact .copyable-text-input__input:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.copyable-text-input--compact .copyable-text-input__button{position:static;transform:none}.prototype-workspace__body{width:min(100%,68rem);padding:var(--hub-space-32) var(--hub-space-24);margin:0 auto}@container (width<=48rem){.prototype-workspace__body{padding:var(--hub-space-24) var(--hub-space-16)}}.hub-content-page-header{gap:var(--hub-space-8);display:grid}.hub-content-page-header__top{align-items:center;gap:var(--hub-space-8) var(--hub-space-16);flex-wrap:wrap;min-height:2.5rem;display:flex}.hub-content-page-header__top h2{overflow-wrap:anywhere;margin:0}.hub-content-page-header__description{color:var(--hub-fg-muted);margin:0}.share-links__empty{padding:var(--hub-space-16) 0}.share-links__empty-description{color:var(--hub-fg-muted);margin:0}.share-links__list{margin:0;padding:0;list-style:none;display:grid}.share-link-item{padding:var(--hub-space-16) 0}.share-link-item+.share-link-item{border-top:1px solid var(--hub-border-muted)}.share-link-item__metadata{color:var(--hub-fg-muted)}.share-link-item__layout,.share-link-item__details{flex-direction:column;gap:.5rem;display:flex}.share-link-item__layout{gap:1rem}.share-link-item__actions{align-items:center;gap:var(--hub-space-8);flex-wrap:wrap;display:flex}.share-link-item__details h3{overflow-wrap:anywhere;margin:0;font-size:1rem}.share-link-item__actions{gap:.5rem}.share-link-item__actions>:first-child{flex:16rem;min-width:0}.share-link-item__actions .hub-icon-button{width:var(--brand-control-medium-size);min-width:var(--brand-control-medium-size);height:var(--brand-control-medium-size);min-height:var(--brand-control-medium-size)}.share-link-item--created{outline:1px solid var(--hub-accent);outline-offset:-1px}.share-links-form{gap:var(--hub-space-8);flex-direction:column;display:flex}.share-links__form{padding:var(--hub-space-16) 0;border-top:1px solid var(--hub-border-muted)}.share-links__form-row{gap:var(--hub-space-16);max-width:48rem;display:grid}.share-links__form-options{max-width:48rem;margin-block-start:var(--hub-space-8)}@container (width>=48rem){.share-links__form-row{grid-template-rows:auto auto auto;grid-template-columns:minmax(12rem,1fr) minmax(10rem,12rem) auto;row-gap:0}.share-links__form-row>.share-links__field{grid-row:1/span 3;grid-template-columns:minmax(0,1fr);grid-template-rows:subgrid;align-items:start;row-gap:0;display:grid}.share-links__field>*{grid-column:1}.share-links__field>label{padding-bottom:var(--hub-space-8)}.share-links__validation{padding-top:var(--hub-space-8)}.share-links__form-actions{grid-area:2/3;align-self:start;min-height:2rem}}.share-control-settings{gap:var(--hub-space-12);flex-direction:column;max-width:48rem;display:flex}.share-control-settings__hint{gap:var(--hub-space-8);flex-direction:column;display:flex}.share-control-settings__description{color:var(--hub-fg-muted);margin:0;font-size:.875rem;line-height:1.5}.hub-alert.share-control-settings__warning{background:var(--hub-attention-subtle)}.canvas-share-page{background:var(--brand-color-canvas-subtle);width:100%;height:100%;color:var(--hub-fg-default);animation:canvas-share-fade-in var(--brand-animation-duration-fast) var(--brand-animation-easing-glide) both, canvas-share-slide-up .4s var(--brand-animation-easing-glide) both;flex-direction:column;display:flex;overflow-y:auto;container-type:inline-size}.canvas-share-build-details{color:var(--hub-fg-muted)}.canvas-share-internal{align-items:flex-start;gap:var(--hub-space-8);flex-direction:column;display:flex}.canvas-share-internal p,.canvas-share-public-header p{color:var(--hub-fg-muted);margin:0}.canvas-share-public-header{gap:var(--hub-space-8);border-top:1px solid var(--hub-border-muted);flex-direction:column;padding-block-start:var(--hub-space-24);display:flex}.canvas-share-page .copyable-text-input__input[readonly]{background-color:var(--hub-canvas-muted)}.canvas-share-internal-actions{width:100%}.canvas-share-build-details p{margin:0}.canvas-share-build-reference{border-radius:var(--hub-radius-small);color:inherit;font:inherit;text-underline-offset:.2em;cursor:help;background:0 0;border:0;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.canvas-share-build-reference:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px}.canvas-share-page .canvas-share-build-tooltip{white-space:pre-line;text-align:start;max-width:min(22rem,100vw - 2rem)}.canvas-share-page .canvas-share-link--older-build .share-link-item__details h3{color:var(--hub-fg-muted)}.canvas-share-list-actions{align-items:center;gap:var(--hub-space-8);flex-wrap:wrap;display:flex}.canvas-share-close{flex-shrink:0;margin-inline-start:auto}@keyframes canvas-share-fade-in{0%{opacity:0}to{opacity:1}}@keyframes canvas-share-slide-up{0%{transform:translateY(8rem)}to{transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.canvas-share-page{animation:none}}.canvas-branch-publication{overflow-wrap:anywhere;justify-items:start;gap:.75rem;display:grid}.canvas-branch-publication>p{margin:0}.canvas-branch-publication>.hub-alert{justify-self:stretch}.canvas-branch-publication__actions{flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.25rem;display:flex}.canvas-branch-publication>p{color:var(--hub-fg-muted)}.canvas-branch-publication .canvas-branch-publication__workflow-link{--brand-InlineLink-color-rest:var(--hub-accent);--brand-InlineLink-color-pressed:var(--hub-accent)}.canvas-branch-publication__actions [aria-busy=true] svg{animation:1s linear infinite canvas-publication-spin}@keyframes canvas-publication-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.canvas-branch-publication__actions [aria-busy=true] svg{animation:none}}.canvas-browser-theme{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.canvas-browser-theme[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html[data-color-mode=light] .canvas-browser-bar,body[data-color-mode=light] .canvas-browser-bar{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html[data-color-mode=dark] .canvas-browser-bar,body[data-color-mode=dark] .canvas-browser-bar{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.canvas-browser-bar{--hub-canvas-default:var(--background-color-default,var(--brand-color-canvas-default));--hub-fg-default:var(--text-color-default,var(--brand-color-text-default));--hub-fg-muted:var(--text-color-muted,var(--brand-color-text-muted));--hub-border-default:var(--border-color-default,var(--brand-color-border-default));--hub-focus:var(--color-focus-outline,var(--brand-color-focus));--hub-fg-danger:var(--true-color-red,var(--brand-color-danger-fg));--canvas-browser-gap:.375rem;--canvas-browser-control-radius:.375rem;--canvas-browser-control-size:1.75rem;--canvas-browser-surface:color-mix(in srgb, var(--hub-canvas-default) 94%, var(--hub-fg-default));z-index:51;align-items:center;gap:var(--canvas-browser-gap);min-width:0;height:var(--canvas-browser-bar-height,2.5rem);background:var(--hub-canvas-default);border-bottom:1px solid var(--hub-border-default);color:var(--hub-fg-muted);padding:.25rem .5rem;display:flex;position:relative}.canvas-browser-bar__navigation,.canvas-browser-bar__tools,.canvas-browser-bar__appearance{flex:none;align-items:center;gap:1px;display:flex}.canvas-browser-bar__tools{gap:var(--canvas-browser-gap)}.canvas-browser-bar button{width:var(--canvas-browser-control-size);height:var(--canvas-browser-control-size);border-radius:var(--canvas-browser-control-radius);color:inherit;cursor:pointer;background:0 0;border:1px solid #0000;place-items:center;padding:0;display:grid}.canvas-browser-bar button:hover:not(:disabled){background:color-mix(in srgb, var(--hub-fg-default) 12%, transparent);color:var(--hub-fg-default)}.canvas-browser-bar button:focus-visible,.canvas-browser-bar input:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.canvas-browser-bar button:disabled{cursor:default;opacity:.45}.canvas-browser-bar__address{flex:1;min-width:0;position:relative}.canvas-browser-bar__address input{width:100%;height:var(--canvas-browser-control-size);border-radius:var(--canvas-browser-control-radius);background:var(--canvas-browser-surface);color:var(--hub-fg-default);font:inherit;border:1px solid #0000;padding:0 .5rem;font-size:.8125rem;display:block}.canvas-browser-bar__address input[aria-invalid=true]{border-color:var(--hub-fg-danger)}.canvas-browser-bar__error{border:1px solid var(--hub-fg-danger);border-radius:var(--canvas-browser-control-radius);background:var(--hub-canvas-default);color:var(--hub-fg-danger);box-shadow:0 .25rem .75rem color-mix(in srgb, var(--hub-fg-default) 12%, transparent);padding:.375rem .5rem;font-size:.75rem;position:absolute;top:calc(100% + .375rem);left:0}.canvas-browser-bar__appearance{border-radius:var(--canvas-browser-control-radius);background:var(--canvas-browser-surface);gap:0;padding:0}.canvas-browser-bar__appearance button[aria-pressed=true]{border-color:var(--hub-border-default);background:var(--hub-canvas-default);color:var(--hub-fg-default)}@media (width<=32rem){.canvas-browser-bar{--canvas-browser-gap:.25rem;padding-inline:.375rem}.canvas-browser-bar__navigation{gap:0}}.controls-fields{--brand-text-size-100:.875rem;--brand-control-medium-size:1.75rem;--brand-control-small-size:1.75rem;--brand-control-medium-paddingBlock-normal:var(--hub-space-4);--brand-control-medium-paddingInline-condensed:var(--hub-space-8);--controls-selection-shadow:var(--hub-shadow-selection);font-size:var(--brand-text-size-100)}.controls-fields,.controls-scope{gap:var(--hub-space-8);min-width:0;color:var(--hub-fg-default);grid-template-columns:minmax(0,1fr);display:grid}.controls-options,.controls-action-field{gap:var(--hub-space-4);grid-template-columns:minmax(0,1fr);min-width:0;display:grid}.controls-field{--brand-control-color-border-default:var(--hub-border-muted);gap:var(--hub-space-4);min-width:0;max-width:100%}.controls-fields .controls-action-button{--brand-text-size-100:var(--hub-text-size-small)}.controls-fields .controls-action-button:not(:disabled){--brand-button-secondary-bgColor-rest:var(--hub-canvas-muted);--brand-button-secondary-fgColor-rest:var(--brand-control-color-fg-default);--brand-button-secondary-borderColor-rest:var(--brand-control-color-border-default)}.controls-field-heading,.controls-fields .controls-field--select{align-items:flex-start;gap:var(--hub-space-4);flex-direction:column;display:flex}.controls-field-heading{width:100%}.controls-field-heading>span:has(>input){min-width:0;max-width:100%}:is(.controls-field>span:has(>:is(input,textarea)),.controls-slider-row>span:has(>input)){min-width:0;max-width:100%}.controls-fields .controls-field-label,.controls-fields .controls-choice-group-label,.controls-fields .controls-choice-group-label>span{color:var(--hub-fg-muted);font-size:.6875rem;line-height:1.5}.controls-fields .controls-field-label{overflow-wrap:anywhere;max-width:100%}.controls-fields .controls-number-input{font-variant-numeric:tabular-nums;min-width:0;max-width:100%}.controls-slider-row{align-items:center;gap:var(--hub-space-8);width:100%;min-width:0;display:flex}.controls-slider-row>.controls-native-slider{flex:1;width:0;min-width:0}.controls-slider-row>span{flex:none;max-width:100%}.controls-number-input--slider{appearance:textfield}.controls-number-input--slider::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.controls-number-input--slider::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.controls-field--select>span:has(>select){width:max-content;min-width:0;max-width:100%}.controls-fields .controls-select-input{width:auto;min-width:0;max-width:100%}.controls-fields :is(input:not([type=range]):not([type=checkbox]):not([type=radio]),textarea,select):not(:disabled){background-color:var(--hub-canvas-muted)}.controls-fields :is(.controls-select-input,.controls-action-button):not(:disabled):not(:focus-visible){box-shadow:var(--hub-shadow-control-field)}.controls-field-validation{overflow-wrap:anywhere;width:100%;min-width:0}.controls-fields .controls-choice-row{align-items:center;column-gap:var(--hub-space-8);grid-template-columns:auto minmax(0,1fr)}.controls-choice-row>span:has(>.controls-choice-mark){align-items:center;display:flex}.controls-fields .controls-choice-label{min-height:var(--hub-space-24);line-height:1.5;font-size:var(--hub-text-size-small);overflow-wrap:anywhere;align-items:center;min-width:0;display:flex;top:0}.controls-fields .controls-choice-group-label{overflow-wrap:anywhere;max-width:100%;margin-block-end:var(--hub-space-4)}.controls-fields .controls-choice-mark{width:1rem;height:1rem;margin:0}.controls-fields .controls-choice-mark>svg{width:.75rem;height:.75rem}.controls-fields .controls-choice-mark--radio:before{width:1.5rem;height:1.5rem;inset:-.25rem}.controls-fields .controls-choice-mark--radio>span{width:.5rem;height:.5rem}.controls-scope-divider{border:0;border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted);width:100%;margin:0}.controls-group{--controls-group-heading-inset:var(--hub-space-8);--controls-group-heading-bottom-inset:var(--hub-space-8);gap:var(--hub-space-8);border:0;grid-template-columns:minmax(0,1fr);min-width:0;margin:0;padding:0;display:grid}.controls-group>legend{width:100%;min-width:0;max-width:100%;padding:0}.controls-scope>.controls-scope-divider+.controls-group{margin-top:calc(-1 * var(--controls-group-heading-inset))}.controls-scope>:is(.controls-field,.controls-group)+.controls-group>legend{border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted)}.controls-scope>.controls-group+.controls-field{padding-top:var(--hub-space-8);border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted)}.controls-scope-divider,.controls-scope>:is(.controls-field,.controls-group)+.controls-group>legend,.controls-scope>.controls-group+.controls-field{border-image-source:linear-gradient(var(--hub-border-muted), var(--hub-border-muted));border-image-slice:1;border-image-outset:0 var(--controls-group-heading-bleed,0px)}.controls-group-toggle:is(button){width:calc(100% + var(--controls-group-heading-bleed,0px) * 2);min-width:0;margin-left:calc(-1 * var(--controls-group-heading-bleed,0px));margin-bottom:calc(-1 * var(--controls-group-heading-bottom-inset));padding-left:var(--controls-group-heading-bleed,0px);padding-right:var(--controls-group-heading-bleed,0px);padding-block:0;padding-top:var(--controls-group-heading-inset);padding-bottom:var(--controls-group-heading-bottom-inset);min-height:calc(var(--hub-space-24) + var(--controls-group-heading-inset) + var(--controls-group-heading-bottom-inset));text-align:left;text-transform:none;color:var(--hub-fg-default);border-radius:0;justify-content:space-between}.controls-group-toggle .controls-group-label{font-size:var(--hub-text-size-small);color:var(--hub-fg-default);white-space:normal;overflow-wrap:anywhere}.controls-group-body{gap:var(--hub-space-8);min-width:0;padding-top:calc(var(--hub-space-4) + var(--controls-group-heading-bottom-inset));grid-template-columns:minmax(0,1fr);display:grid}.controls-group-body[hidden]{display:none}.controls-native-slider{--controls-slider-thumb-size:1rem;--controls-slider-track-size:.375rem;--controls-slider-fill:var(--hub-accent);--controls-slider-track-background:linear-gradient(to right, var(--controls-slider-fill) var(--controls-slider-progress), var(--hub-border-muted) var(--controls-slider-progress));appearance:none;width:100%;min-height:var(--brand-control-small-size);cursor:pointer;background:0 0;margin:0}.controls-native-slider::-webkit-slider-runnable-track{height:var(--controls-slider-track-size);border-radius:var(--controls-slider-track-size);background:var(--controls-slider-track-background)}.controls-native-slider::-webkit-slider-thumb{appearance:none;box-sizing:border-box;width:var(--controls-slider-thumb-size);height:var(--controls-slider-thumb-size);margin-top:calc((var(--controls-slider-track-size) - var(--controls-slider-thumb-size)) / 2);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);background:var(--hub-canvas-default);box-shadow:var(--controls-selection-shadow);border-radius:50%}.controls-native-slider::-moz-range-track{height:var(--controls-slider-track-size);border-radius:var(--controls-slider-track-size);background:var(--controls-slider-track-background);border:0}.controls-native-slider::-moz-range-thumb{box-sizing:border-box;width:var(--controls-slider-thumb-size);height:var(--controls-slider-thumb-size);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);background:var(--hub-canvas-default);box-shadow:var(--controls-selection-shadow);border-radius:50%}.controls-native-slider:disabled{--controls-slider-fill:var(--hub-fg-muted);cursor:not-allowed}@media (forced-colors:active){.controls-native-slider::-webkit-slider-runnable-track{background:canvastext}.controls-native-slider::-moz-range-track{background:canvastext}}.controls-native-color{width:var(--brand-control-small-size);height:var(--brand-control-small-size);padding:var(--hub-space-4);background:var(--hub-canvas-muted);border:var(--brand-borderWidth-thin) solid var(--hub-border-muted);border-radius:var(--hub-radius-medium);cursor:pointer}.controls-native-color:disabled{background:var(--hub-canvas-muted);cursor:not-allowed}.controls-segments{--brand-text-size-100:var(--hub-text-size-small);--controls-segment-inset:.125rem;width:100%;max-width:100%;padding:var(--controls-segment-inset);border:var(--brand-borderWidth-thin) solid var(--hub-border-muted);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-muted);display:flex}.controls-segment{min-width:0;min-height:calc(var(--brand-control-medium-size) - (var(--brand-borderWidth-thin) + var(--controls-segment-inset)) * 2);padding-inline:var(--hub-space-8);border:var(--brand-borderWidth-thin) solid transparent;border-radius:max(0px, calc(var(--hub-radius-medium) - var(--brand-borderWidth-thin) - var(--controls-segment-inset)));cursor:pointer;color:var(--hub-fg-muted);flex:1 1 0;justify-content:center;align-items:center;display:flex;position:relative}.controls-segment>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:inherit;overflow:hidden}.controls-segment:has(input:checked){background:var(--hub-canvas-default);border-color:var(--hub-border-muted);box-shadow:var(--controls-selection-shadow);color:var(--hub-fg-default)}.controls-segment:has(input:disabled){color:var(--hub-fg-muted);cursor:not-allowed}.controls-fields:focus-visible,.controls-native-slider:focus-visible,.controls-native-color:focus-visible{outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.controls-segment:has(input:focus-visible){outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.controls-ghost-button{--controls-ghost-background:transparent;--brand-button-subtle-bgColor-rest:var(--controls-ghost-background);--brand-button-subtle-bgColor-hover:var(--controls-ghost-background);--brand-button-subtle-bgColor-active:var(--controls-ghost-background);--brand-button-subtle-borderColor-rest:transparent;--brand-button-subtle-borderColor-hover:transparent;--brand-button-subtle-borderColor-active:transparent}.controls-ghost-button.controls-ghost-button:is(button){background:var(--controls-ghost-background);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;border:0}.controls-ghost-button:not(:disabled):hover{--controls-ghost-background:var(--hub-canvas-muted)}.canvas-controls-layer{z-index:40;inset:var(--canvas-preview-top,0) 0 0;pointer-events:none;position:absolute}.canvas-controls-panel{--brand-text-size-100:.875rem;--brand-control-small-size:1.75rem;top:var(--hub-space-16);left:var(--hub-space-16);width:min(18rem, calc(100% - var(--hub-space-16) * 2));max-height:calc(100% - var(--hub-space-16) * 2);background:var(--hub-canvas-default);color:var(--hub-fg-default);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);border-radius:var(--hub-radius-medium);box-shadow:var(--hub-shadow-floating);pointer-events:auto;font-size:var(--brand-text-size-100);flex-direction:column;display:flex;position:absolute;overflow:hidden}.canvas-controls-header{align-items:center;gap:var(--hub-space-4);padding:var(--hub-space-8);flex:none;display:flex}.canvas-controls-grab{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.canvas-controls-panel[data-dragging=true] .canvas-controls-grab{cursor:grabbing}.canvas-shell:has(.canvas-controls-panel[data-dragging=true]) .prototype-frame{pointer-events:none}.canvas-controls-header .canvas-controls-title{min-width:0;padding-inline:var(--hub-space-8);text-align:left;flex:1;justify-content:space-between}.canvas-controls-body{border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted);flex-direction:column;min-width:0;min-height:0;display:flex}.canvas-controls-body[hidden]{display:none}.canvas-controls-content{--controls-group-heading-bleed:var(--hub-space-8);gap:var(--hub-space-8);min-width:0;min-height:0;padding:var(--hub-space-8);scrollbar-gutter:stable;overscroll-behavior:contain;grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden scroll}.canvas-controls-content [role=alert]{color:var(--hub-fg-danger)}.canvas-controls-content:has(>.controls-fields:first-child>.controls-scope:first-child>.controls-group:first-child){padding-top:0}.canvas-controls-footer{gap:var(--hub-space-8);padding:var(--hub-space-8);background:var(--hub-canvas-subtle);border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted);flex:none;display:grid}.canvas-controls-footer button:not(:disabled):not(:focus-visible){box-shadow:var(--hub-shadow-control-raised)}.canvas-controls-footer .canvas-controls-learn-more{--brand-InlineLink-color-rest:var(--hub-fg-success);--brand-InlineLink-color-pressed:var(--hub-fg-success);justify-self:start;align-items:center;gap:var(--hub-space-4);text-decoration:none;display:inline-flex}.canvas-controls-learn-more:focus-visible{outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.canvas-controls-diagnostics{overflow-wrap:anywhere;color:var(--hub-fg-muted);font-size:var(--brand-text-size-100)}.canvas-controls-diagnostics summary{cursor:pointer;padding:var(--hub-space-8)}.canvas-controls-diagnostics h4{font-size:var(--brand-text-size-100)}.canvas-controls-diagnostics summary:focus-visible{outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.canvas-controls-diagnostics p{margin-top:var(--hub-space-8);white-space:pre-wrap}.hub-counter{background:var(--hub-counter-background,color-mix(in srgb, currentColor 10%, Canvas));min-width:1.25rem;min-height:1.25rem;color:inherit;font-variant-numeric:tabular-nums;border-radius:100rem;justify-content:center;align-items:center;padding:0 .375rem;font-size:.75rem;font-weight:600;line-height:1.25rem;display:inline-flex}.hub-sidebar{z-index:var(--hub-sidebar-z-index,30);inset:var(--hub-sidebar-top,0) 0 0 auto;width:min(var(--hub-sidebar-width,24rem), 100%);background:var(--hub-canvas-muted);min-height:0;color:var(--hub-fg-default);border-left:var(--brand-borderWidth-thin) solid var(--hub-border-muted);box-shadow:var(--hub-shadow-floating);visibility:hidden;pointer-events:none;flex-direction:column;transition:transform .16s cubic-bezier(.4,0,1,1),visibility 0s linear .16s;display:flex;position:absolute;transform:translate(calc(100% + 1.5rem))}.hub-sidebar[data-open=true]{visibility:visible;pointer-events:auto;transition:transform .24s ease-in,visibility;transform:translate(0)}.hub-sidebar__header{justify-content:space-between;align-items:center;gap:var(--hub-space-12);padding:var(--hub-space-8) var(--hub-space-16);background:var(--hub-canvas-subtle);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex:none;display:flex}.hub-sidebar__heading{align-items:center;gap:var(--hub-space-8);min-width:0;display:flex}.hub-sidebar__heading h2{color:var(--hub-fg-default);font-size:var(--brand-text-size-200);overflow-wrap:anywhere;margin:0}.hub-sidebar .hub-sidebar__close{--brand-button-subtle-bgColor-hover:var(--brand-color-border-muted);--brand-button-subtle-borderColor-hover:transparent;background:0 0;border-color:#0000}.hub-sidebar__close:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.hub-sidebar__content{flex:1;min-height:0;overflow:auto}@media (prefers-reduced-motion:reduce){.hub-sidebar,.hub-sidebar[data-open=true]{transition:none}}.hub-user-avatar.hub-user-avatar{width:var(--hub-avatar-size);height:var(--hub-avatar-size);object-fit:cover;flex:none;display:block}.hub-user-avatar--20{--hub-avatar-size:1.25rem}.hub-user-avatar--24{--hub-avatar-size:1.5rem}.hub-user-avatar--28{--hub-avatar-size:1.75rem}.hub-user-avatar--32{--hub-avatar-size:2rem}.review-participant-stack{align-items:center;display:inline-flex}.review-participant-stack__avatar{background:var(--hub-canvas-default);border:2px solid var(--hub-canvas-default);color:var(--hub-fg-muted);transform:translateX(calc(var(--review-avatar-index,0) * var(--review-avatar-spread,0px)));border-radius:50%;justify-content:center;align-items:center;display:inline-flex;position:relative}.review-participant-stack__avatar:first-child{z-index:4}.review-participant-stack__avatar:nth-child(2){z-index:3;--review-avatar-index:1}.review-participant-stack__avatar:nth-child(3){z-index:2;--review-avatar-index:2}.review-participant-stack__avatar:nth-child(4){z-index:1;--review-avatar-index:3}.review-participant-stack__avatar+.review-participant-stack__avatar{margin-inline-start:calc(-1 * var(--hub-space-8))}.review-participant-stack--small .review-participant-stack__avatar,.review-participant-stack--medium .review-participant-stack__avatar{width:1.75rem;height:1.75rem}.review-participant-stack__avatar--overflow{background:var(--hub-canvas-muted);color:var(--hub-fg-default);font-size:.625rem;font-weight:600}@media (prefers-reduced-motion:no-preference){.review-participant-stack__avatar{transition:transform .15s cubic-bezier(.77,0,.175,1)}}.review-comment-markers{z-index:10;pointer-events:none;position:absolute;inset:0;overflow:hidden}.review-comment-marker{width:auto;min-width:var(--hub-space-32);height:var(--hub-space-32);transform:translate(calc(-1 * var(--hub-space-16) + var(--review-marker-offset-x,0px)), -50%);box-shadow:none;pointer-events:auto;color:var(--hub-fg-muted);background:0 0;border:0;border-radius:50%;padding:.125rem .875rem .125rem .125rem;position:absolute}.review-comment-marker--resolved{opacity:.65}.review-comment-marker .review-participant-stack__avatar:first-child{box-shadow:var(--hub-shadow-review-marker)}.review-comment-marker--unread .review-participant-stack__avatar:first-child{border-color:var(--hub-accent)}.review-comment-marker--unread:after{background:var(--hub-accent);width:var(--hub-space-8);height:var(--hub-space-8);border:1px solid var(--hub-canvas-default);content:"";border-radius:50%;position:absolute;top:-.125rem;right:-.125rem}.review-comment-marker--blocked{cursor:not-allowed}.review-comment-area{pointer-events:none;position:absolute;inset:0;overflow:visible}.review-comment-area__path{fill:none;stroke:var(--hub-accent);stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.review-comment-area__path--selected{stroke:var(--hub-focus);stroke-width:4px}.review-comment-marker--selected,.review-comment-marker:focus-visible{outline:0}.review-comment-marker--selected .review-participant-stack__avatar:first-child,.review-comment-marker:focus-visible .review-participant-stack__avatar:first-child{outline:2px solid var(--hub-focus);outline-offset:.125rem}@media (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){.review-comment-marker:hover:not(:disabled) .review-participant-stack__avatar{--review-avatar-spread:.1875rem}}@media (prefers-reduced-motion:no-preference){.review-comment-marker:focus-visible .review-participant-stack__avatar{--review-avatar-spread:.1875rem;transition:none}}.hub-switch{width:var(--base-size-48);height:var(--base-size-40);cursor:pointer;vertical-align:middle;flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.hub-switch--small{width:var(--base-size-40);height:var(--base-size-32)}.hub-switch__native-control{opacity:0;pointer-events:none;position:absolute;inset:0}.hub-switch__track{width:var(--base-size-36);height:var(--base-size-24);padding:var(--base-size-4);border-radius:var(--base-size-24);background:var(--brand-color-neutral-emphasis);align-items:center;display:flex}.hub-switch--small .hub-switch__track{width:var(--base-size-28);height:var(--base-size-16);padding:var(--base-size-2)}.hub-switch__thumb{width:var(--base-size-16);height:var(--base-size-16);border-radius:var(--base-size-16);background:var(--brand-color-text-onEmphasis);transition:transform var(--brand-animation-duration-faster) var(--brand-animation-easing-default)}.hub-switch--small .hub-switch__thumb{width:var(--base-size-12);height:var(--base-size-12)}.hub-switch__track[data-checked=true]{background:var(--brand-color-success-fg)}.hub-switch__track[data-checked=true] .hub-switch__thumb{transform:translateX(var(--base-size-12))}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .hub-switch__track[data-checked=true] .hub-switch__thumb{transform:translateX(calc(-1 * var(--base-size-12)))}.hub-switch:has(:focus-visible) .hub-switch__track{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.hub-switch[data-disabled]{opacity:.5;cursor:not-allowed}@media (prefers-reduced-motion:reduce){.hub-switch__thumb{transition:none}}.review-comment-filter-controls{flex-direction:column;gap:.75rem;padding:0;display:flex}.review-comment-filter-controls__search{align-items:center;gap:.5rem;display:flex}.review-comment-filter-controls__search-field{flex:1;min-width:0;position:relative}.review-comment-filter-controls__input{box-sizing:border-box;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);width:100%;height:2.5rem;min-height:2.5rem;color:var(--hub-fg-default);font-size:var(--brand-text-size-100);padding:.5rem 1rem .625rem 2.5rem;line-height:1.25rem}.review-comment-filter-controls__input:focus{border-color:var(--hub-focus);outline:none}.review-comment-filter-controls__input::placeholder{color:var(--hub-fg-muted)}.review-comment-filter-controls__search-icon{z-index:1;color:var(--hub-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.review-comment-filter-controls .review-comment-filter-controls__button{border-color:#0000}.review-comment-filter-controls .review-comment-filter-controls__button--active,.review-comment-filter-controls .review-comment-filter-controls__button:hover:not(:disabled){background:var(--brand-color-border-muted)}.review-comment-filter-controls__button:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.review-comment-filter-controls__filters{flex-direction:column;gap:.5rem;padding-top:.25rem;display:flex}.review-comment-filter-controls__toggle,.review-comment-filter-controls__participant{justify-content:space-between;align-items:center;gap:.75rem;min-height:2rem;font-size:.875rem;display:flex}.review-comment-filter-controls__participant{gap:.5rem}.review-comment-filter-controls__participant [data-testid=ActionMenu],.review-comment-filter-controls__participant-trigger{max-width:12rem}.review-comment-filter-controls__participant-name{text-overflow:ellipsis;white-space:nowrap;max-width:8rem;display:block;overflow:hidden}.review-comment-filter-controls__participant [role=menu]{width:max-content;min-width:12rem;max-width:min(20rem,100vw - 1rem)}.review-comment-row{padding:var(--hub-space-8) var(--hub-space-12);border-radius:var(--brand-borderRadius-medium);isolation:isolate;font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);background:0 0;border:0;margin-inline-start:var(--hub-space-12);position:relative}.review-comment-row:before{content:"";inset-block:0;inset-inline:calc(-1 * var(--hub-space-16) - var(--hub-space-4)) calc(-1 * var(--hub-space-4));border-radius:inherit;pointer-events:none;z-index:-1;position:absolute}.review-comment-row:hover:before,.review-comment-row--selected:before{background:var(--brand-color-border-muted)}.review-comment-row__button{appearance:none;cursor:pointer;width:100%;min-height:0;font:inherit;text-align:left;color:inherit;background:0 0;border:0;margin:0;padding:0;display:block}.review-comment-row__button:after{content:"";inset-block:0;inset-inline:calc(-1 * var(--hub-space-16) - var(--hub-space-4)) calc(-1 * var(--hub-space-4));border-radius:var(--brand-borderRadius-medium);position:absolute}.review-comment-row__button:focus-visible{outline:none}.review-comment-row__button:focus-visible:after{outline:2px solid var(--hub-focus);outline-offset:-2px}.review-comment-row__button:disabled{cursor:not-allowed;opacity:.6}.review-comment-row .review-comment-row__avatar{width:1.25rem;height:1.25rem;inset-inline-start:calc(-1 * var(--hub-space-24));color:var(--hub-fg-muted);border-radius:50%;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.review-comment-row__content{min-width:0}.review-comment-row__metadata{min-width:0;color:var(--hub-fg-muted);flex-wrap:wrap}.review-comment-row__author{text-overflow:ellipsis;white-space:nowrap;color:var(--hub-fg-muted);font-weight:400;overflow:hidden}.review-comment-row--unread .review-comment-row__author{font-weight:600}.review-comment-row__author-and-build{align-items:center;gap:var(--hub-space-4);flex:1;min-width:0;display:flex;position:relative}.review-comment-row__metadata time{z-index:1;cursor:pointer;white-space:nowrap;font-size:.75rem;position:relative}.review-comment-row__unread{z-index:1;cursor:pointer;background:var(--hub-accent);width:var(--hub-space-8);height:var(--hub-space-8);top:50%;border-radius:50%;position:absolute;inset-inline-start:calc(-1 * var(--hub-space-24) + (1.25rem - var(--hub-space-8)) / 2);transform:translateY(-50%)}.review-comment-row__body-container{display:block;position:relative}.review-comment-row__body{overflow-wrap:anywhere;-webkit-line-clamp:3;color:var(--hub-fg-muted);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.review-comment-row--unread .review-comment-row__author,.review-comment-row--unread .review-comment-row__body{color:var(--hub-fg-default)}.review-comment-row__context{padding-block-start:var(--hub-space-4)}.review-comment-row__build{white-space:nowrap;flex-shrink:0;font-size:.75rem}.review-comment-row__build a{z-index:1;color:var(--hub-fg-muted);text-decoration:none;position:relative}.review-comment-row__build a:hover{text-decoration:underline}.review-comment-row__replies{white-space:nowrap;color:var(--hub-fg-muted)}.review-comment-row__layout,.review-comment-row__metadata,.review-comment-row__context{align-items:flex-start;gap:.5rem;display:flex}.review-comment-row__content,.review-comment-row__replies{flex:1;min-width:0}.review-comment-row__author{flex:0 auto}.review-comment-row__copy{flex-direction:column;gap:.25rem;display:flex}.review-comment-row__metadata{align-items:center}.review-comment-row__context{align-items:center;font-size:.75rem}.review-comment-row__status{white-space:nowrap;margin-inline-start:auto}.review-comments-sidebar{flex-direction:column;width:100%;height:100%;display:flex}.review-comments-sidebar__header{justify-content:space-between;align-items:center;gap:.75rem;min-height:3.5rem;padding:0;display:flex}.review-comments-sidebar__heading{align-items:center;gap:.5rem;display:flex}.review-comments-sidebar__heading h2{margin:0;font-size:1rem}.review-comments-sidebar .review-comments-sidebar__close{--brand-button-subtle-bgColor-hover:var(--brand-color-border-muted);--brand-button-subtle-borderColor-hover:transparent;background:0 0;border-color:#0000}.review-comments-sidebar__close:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.review-comments-sidebar__body{min-height:0;margin-inline:calc(-1 * var(--hub-space-8)) calc(-1 * var(--hub-space-4));padding-inline:var(--hub-space-8) var(--hub-space-4);flex-direction:column;flex:1;display:flex;overflow:auto}.review-comments-sidebar__state{text-align:center;min-height:12rem;color:var(--hub-fg-muted);flex-direction:column;justify-content:center;align-items:center;gap:.75rem;padding:1.5rem;display:flex}.review-comments-sidebar__threads{padding:var(--hub-space-8) 0 0;flex-direction:column;gap:.25rem;display:flex}.review-comments-sidebar__loading{border-top:1px solid var(--hub-border-muted);color:var(--hub-fg-muted);justify-content:center;align-items:center;gap:.5rem;margin-top:auto;padding:.75rem 1rem;display:flex}.review-comment-control__trigger{width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);gap:0;padding:0}.review-shell__comment-actions .review-comment-control__trigger{border-start-end-radius:0;border-end-end-radius:0}.review-comment-control__trigger>[data-testid=Button-trailing-visual],.review-comment-control__trigger>span:nth-child(2){display:none}.review-comment-control__trigger~div [role=menu]{max-height:min(460px, var(--review-comment-control-menu-height,460px))}.review-comment-control__menu-item{column-gap:var(--brand-control-medium-gap)}div:has(>[data-testid=ActionMenu] .review-comment-control__trigger[aria-expanded=true])+[role=tooltip]{display:none}.canvas-commenting-recovery__actions{flex-wrap:wrap;gap:.5rem;margin-top:1.25rem;display:flex}.review-confirmation-panel{background:var(--hub-attention-subtle);border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);flex-direction:column;gap:.75rem;padding:.75rem;display:flex}.review-confirmation-panel--compact{gap:.5rem;padding:.5rem}.review-confirmation-panel--condensed{flex-flow:wrap;justify-content:space-between;align-items:center;gap:.375rem .5rem;padding:.375rem;padding-inline-start:.625rem}.review-confirmation-panel--condensed .review-confirmation-panel__copy{flex:1 0 auto;max-width:100%}.review-confirmation-panel--condensed .review-confirmation-panel__copy strong{font-size:.8125rem;line-height:1.25rem}.review-confirmation-panel--condensed .review-confirmation-panel__actions{margin-inline-start:auto}.review-confirmation-panel--condensed .review-confirmation-panel__error{flex-basis:100%}.review-confirmation-panel__copy{flex-direction:column;gap:.25rem;display:flex}.review-confirmation-panel__copy span,.review-confirmation-panel__error{font-size:.875rem}.review-confirmation-panel__actions{justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.review-confirmation-panel__danger{border-color:var(--hub-danger-emphasis);background:var(--hub-danger-emphasis);color:var(--hub-fg-on-danger)}@media (hover:hover) and (pointer:fine){.review-confirmation-panel__danger:not(:disabled):hover{border-color:color-mix(in srgb, var(--hub-danger-emphasis) 85%, var(--hub-fg-default));background:color-mix(in srgb, var(--hub-danger-emphasis) 85%, var(--hub-fg-default))}}.review-confirmation-panel__error{color:var(--hub-fg-danger)}.mention-input{width:100%;position:relative}.mention-input textarea{box-sizing:border-box;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);width:100%;color:var(--hub-fg-default);font:inherit;resize:vertical;padding:.5rem}.mention-input textarea:focus-visible{outline:2px solid var(--hub-focus);outline-offset:-1px}.mention-input__suggestions{z-index:100;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);max-height:14rem;color:var(--hub-fg-default);padding:.25rem;position:fixed;overflow-y:auto}.mention-input__suggestions ul{margin:0;padding:0;list-style:none}.mention-input__suggestions button{width:100%;color:inherit;text-align:start;cursor:pointer;background:0 0;border:0;padding:.5rem}.mention-input__suggestions [aria-selected=true]{background:var(--hub-canvas-subtle)}.review-comment-composer-backdrop{z-index:39;background:0 0;border:0;position:absolute;inset:0}.review-comment-composer{width:min(20rem, calc(100% - var(--hub-space-16)));max-height:calc(100% - var(--hub-space-16));border:1px solid var(--hub-border-muted);background:var(--hub-canvas-subtle);z-index:40;box-shadow:var(--hub-shadow-review-overlay);border-radius:.5625rem;padding:.75rem 1rem 1rem;position:absolute;overflow:auto}.review-comment-composer__form{flex-direction:column;gap:.75rem;display:flex}.review-comment-composer__header,.review-comment-composer__actions{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.review-comment-composer__header h2{font-size:var(--brand-text-size-100);margin:0;font-weight:600}.review-comment-composer__actions{justify-content:flex-end}.review-comment-composer textarea{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.review-comment-composer__error{color:var(--hub-fg-danger)}.review-comment-composer__banner{margin:0}.review-thread-reply-form__blocked{padding:var(--hub-space-8) var(--hub-space-12);color:var(--hub-fg-muted);font-size:.75rem;display:block}.review-thread-reply-form__error{color:var(--hub-fg-danger)}.review-thread-reply-form{flex-direction:column;gap:.5rem;display:flex}.review-thread-reply-form__composer{align-items:flex-end;display:flex;position:relative}.review-thread-reply-form__composer textarea{resize:none;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);width:100%;min-height:2.5rem;max-height:min(7.5rem,20dvh);color:var(--hub-fg-default);font-size:var(--brand-text-size-100);padding:.5rem 2.75rem .625rem 1rem;line-height:1.25rem;display:block}.review-thread-reply-form__composer textarea:focus{border-color:var(--hub-focus);outline:none}.review-thread-reply-form__composer textarea::placeholder{color:var(--hub-fg-muted)}.review-thread-reply-form__composer textarea:placeholder-shown{white-space:nowrap}.review-thread-reply-form__submit{background:var(--brand-button-primary-bgColor-rest);width:1.875rem;height:1.875rem;color:var(--brand-button-primary-fgColor-rest);cursor:pointer;border:0;border-radius:.375rem;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;bottom:.3125rem;right:.3125rem}.review-thread-reply-form__submit:hover:not(:disabled){opacity:.85}.review-thread-reply-form__submit:disabled{background:var(--hub-border-default);color:var(--hub-fg-muted);cursor:default}.review-thread-reply-form__submit:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px}.review-thread-reply-form__error{font-size:.875rem}.mention-text{border-radius:var(--hub-radius-small);background:var(--hub-canvas-subtle);color:var(--hub-fg-default);padding-inline:.15em;font-weight:600}.review-thread-message__header{align-items:center;gap:.5rem;display:flex}.review-thread-message__byline{flex-wrap:wrap;flex:1;align-items:baseline;column-gap:.5rem;min-width:0;line-height:1.25rem;display:flex}.review-thread-message__byline time,.review-thread-message__byline>span:not(.review-thread-message__identity){color:var(--hub-fg-muted);font-size:.75rem}.review-thread-message__identity{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}.review-comment-reactions{gap:var(--hub-space-4);flex-wrap:wrap;align-items:center;display:flex}.review-comment-reactions>button{border-color:var(--hub-border-muted);border-radius:.375rem;gap:.25rem;height:1.625rem;min-height:1.625rem;padding-inline:.375rem;font-size:.75rem}.review-comment-reactions>button>span:first-child{font-size:.75rem;line-height:1}.review-comment-reactions>button .hub-counter{background:var(--hub-counter-background,transparent);min-width:0;min-height:0;padding:0;font-size:.75rem;line-height:1}.review-comment-reactions>button.review-comment-reaction--selected{background:var(--hub-accent-subtle);border-color:color-mix(in srgb, var(--hub-accent) 40%, var(--hub-border-muted));color:var(--hub-fg-default)}.review-comment-reactions__picker-emoji{font-size:1rem;line-height:1}.review-comment-reactions__error{color:var(--hub-fg-danger)}.review-comment-reactions__tooltip[popover][role=tooltip]{white-space:nowrap}.review-comment-reactions__layout{flex-direction:column;gap:.25rem;display:flex}.review-comment-reactions__menu-trigger{width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);background:0 0;border-color:#0000;gap:0;padding:0}.review-comment-reactions__menu-trigger>[data-testid=Button-trailing-visual],.review-comment-reactions__menu-trigger>span:nth-child(2),.review-comment-reactions__tooltip.review-comment-reactions__tooltip--suppressed[popover][role=tooltip]{display:none}.review-comment-reactions:has(.review-comment-reactions__menu-trigger[aria-expanded=true])>[role=tooltip]{display:none}.review-comment-reactions__layout [role=menu]{max-height:min(460px,100dvh - 2rem)}.review-comment-reactions__layout [role=menu] li{column-gap:var(--brand-control-medium-gap)}.review-thread-message{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);flex-direction:column;gap:.125rem;padding:.5rem 1rem 1rem;display:flex}.review-thread-message+.review-thread-message{padding-top:.5rem}.review-thread-message__actions{justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.review-thread-message__edit{flex-direction:column;gap:.5rem;display:flex}.review-thread-message__body{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);overflow-wrap:anywhere;white-space:pre-wrap;margin:0 0 0 2.25rem}.review-thread-message__edit,.review-thread-message>.review-comment-reactions__layout{margin-inline-start:2.25rem}.review-thread-message>.review-comment-reactions__layout{margin-block-start:.5rem}.review-thread-message__body--deleted{color:var(--hub-fg-muted);font-style:italic}.review-thread-message__error{color:var(--hub-fg-danger)}.review-thread-message .review-thread-message__menu-trigger:is(button){width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);box-shadow:none;background:0 0;border:0;gap:0;padding:0}.review-thread-message .review-thread-message__menu-trigger:not(:disabled):hover{background:var(--brand-color-border-muted)}.review-thread-message [role=menu] li{column-gap:var(--brand-control-medium-gap)}.review-thread-message__menu-trigger>[data-testid=Button-trailing-visual],.review-thread-message__menu-trigger>span:nth-child(2){display:none}.review-thread-message__header:has(.review-thread-message__menu-trigger[aria-expanded=true])>[role=tooltip]{display:none}.review-thread-message__delete-item{color:var(--hub-fg-danger)}.review-thread-message__menu-divider{border-top:1px solid var(--hub-border-muted);margin-block:var(--hub-space-4);list-style:none}.review-thread-message__delete-item span{color:var(--hub-fg-danger)}.review-thread-message[data-notification-target=true]{outline:2px solid var(--hub-focus);outline-offset:-2px;border-radius:var(--hub-radius-medium)}.review-thread-conversation{background:var(--hub-canvas-subtle);z-index:40;width:100%;height:100%;box-shadow:var(--hub-shadow-review-overlay);border:0;border-radius:0;display:flex;position:absolute;inset:0;overflow:visible}.review-thread-conversation__layout{max-height:inherit;flex-direction:column;flex:1;min-height:0;display:flex}@container (width>=48rem){.review-thread-conversation{width:min(20rem, calc(100% - var(--hub-space-16)));height:auto;max-height:calc(100% - var(--hub-space-16));border:1px solid var(--hub-border-default);border-radius:.75rem;inset:auto}.review-thread-conversation--anchored{top:var(--review-thread-top);left:var(--review-thread-left)}.review-thread-conversation--docked{top:var(--hub-space-12);right:var(--hub-space-12)}}.review-emoji-burst{z-index:50;pointer-events:none;width:100vw;height:100vh;position:fixed;inset:0}.review-thread-conversation__header{border-bottom:1px solid var(--hub-border-default);flex:none;align-items:center;gap:.5rem;min-height:3rem;padding:.5rem 1rem;display:flex}.review-thread-conversation__header h2{font-size:var(--brand-text-size-100);flex:1;margin:0;font-weight:600}.review-thread-conversation__close{background:0 0;border-color:#0000}.review-thread-conversation__banner{margin:var(--hub-space-8)}.review-thread-conversation__messages{flex:auto;min-height:0;overflow:auto}.review-thread-conversation__messages [data-testid=ActionMenu]{position:static}.review-thread-conversation__messages [data-testid=ActionMenu] [role=menu]{max-height:min(460px, var(--review-thread-menu-room-bottom,calc(100dvh - 2rem)))}.review-thread-conversation__messages [data-testid=ActionMenu] [role=menu][class*=ActionMenu__menu--pos-outside-top]{max-height:min(460px, var(--review-thread-menu-room-top,calc(100dvh - 2rem)))}.review-thread-conversation__footer{flex:none;padding:0 .25rem .25rem}.review-thread-conversation__footer--blocked{border-top:1px solid var(--hub-border-muted);padding:0}@container (width>=48rem){.review-thread-conversation__messages{min-height:5rem;max-height:20rem}}.canvas-hub-panel{--hub-sidebar-top:var(--canvas-preview-top,2.75rem)}.canvas-hub-content{padding:var(--hub-space-16);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);flex:1;overflow:auto}.canvas-hub-connection{margin-bottom:1.5rem}.canvas-hub-status{justify-items:start;gap:var(--hub-space-16);display:grid}.canvas-hub-status>.hub-alert{justify-self:stretch}.canvas-hub-content .canvas-hub-connection p{color:var(--hub-fg-default);margin-block-end:var(--base-size-8)}.canvas-hub-settings{margin-bottom:1rem}.canvas-hub-publication__title,.canvas-hub-section__heading{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.canvas-hub-publication__title{align-items:flex-start}.canvas-hub-publication__title h3,.canvas-hub-section h3{margin:0}.canvas-hub-publication__title h3{overflow-wrap:anywhere;min-width:0}.canvas-hub-publication__status{border:1px solid var(--hub-border-muted);color:var(--hub-fg-muted);border-radius:999px;flex:none;margin-top:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1}.canvas-hub-publication__branch{color:var(--hub-fg-muted);overflow-wrap:anywhere;align-items:center;gap:.375rem;margin:.5rem 0 0;text-decoration:none;display:inline-flex}a.canvas-hub-publication__branch:hover{color:var(--hub-accent);text-decoration:underline}.canvas-hub-publication__description{overflow-wrap:anywhere;margin:1rem 0}.canvas-hub-publication__start-page{margin-bottom:0}.canvas-hub-content .canvas-hub-publication__form label{margin:0}.canvas-hub-publication__name-field{flex:1;min-width:0}.canvas-hub-content .canvas-hub-publication__name-field input{box-sizing:border-box;min-height:1.75rem;font-size:var(--brand-text-size-200);font-weight:var(--brand-text-weight-semibold);margin:0;padding-block:.25rem;line-height:1.25rem}.canvas-hub-publication__description-field{margin-top:1rem}.canvas-hub-content .canvas-hub-publication__description-field textarea{resize:vertical;min-height:5rem;margin:0}.canvas-hub-publication__form .canvas-hub-form-actions,.canvas-hub-content .canvas-hub-publication__form .canvas-hub-publication__start-page-field{margin-top:1rem}.canvas-hub-publication__hint{color:var(--hub-fg-muted);margin:.375rem 0 0;font-size:.75rem}.canvas-hub-publication>button{margin-top:var(--hub-space-16)}.canvas-hub-section,.canvas-hub-publication--after-status{border-top:1px solid var(--hub-border-muted);margin-top:1.25rem;padding-top:1.25rem}.canvas-hub-section>p{color:var(--hub-fg-muted);margin:.75rem 0 0}.canvas-hub-build{margin-top:.75rem}.canvas-hub-build__identity{align-items:baseline;gap:var(--hub-space-8);display:flex}.canvas-hub-build__identity>code{color:var(--hub-fg-muted)}.canvas-hub-build>p{color:var(--hub-fg-muted);margin:.5rem 0 0}.canvas-hub-build a,.canvas-hub-build__history{color:var(--hub-accent)}.canvas-hub-build .canvas-hub-build__author{color:inherit;text-decoration:none}.canvas-hub-build .canvas-hub-build__author:hover{color:var(--hub-accent);text-decoration:underline}.canvas-hub-build__history{margin-top:var(--hub-space-12);display:inline-block}.canvas-hub-build>.canvas-hub-build__notice{color:var(--hub-fg-default)}.canvas-hub-disconnect{margin-top:var(--hub-space-16)}.canvas-hub-origin{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.25rem .5rem;display:grid}.canvas-hub-origin>a{min-width:0;color:var(--hub-accent);overflow-wrap:anywhere}.canvas-hub-origin button{white-space:nowrap;grid-area:1/2}.canvas-hub-origin+p,.canvas-hub-origin+.canvas-hub-publication,.canvas-hub-content>p+p{margin-top:1rem}.canvas-hub-origin-form{margin-block:.75rem}.canvas-hub-origin-form p{color:var(--hub-fg-muted)}.canvas-hub-origin-field{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:.5rem;display:grid}.canvas-hub-content .canvas-hub-origin-field label{margin:0}.canvas-hub-origin-form>p{margin:.5rem 0 0}.canvas-hub-origin-form>.canvas-hub-form-actions{margin-top:1rem}.canvas-hub-content form label{margin-block:.75rem;display:block}.canvas-hub-content input,.canvas-hub-content textarea{width:100%;margin-top:.25rem;display:block}.canvas-hub-form-actions{gap:.5rem;display:flex}.canvas-marker-layer{inset:var(--canvas-preview-top,2.75rem) 0 0;z-index:20;pointer-events:none;position:absolute}.canvas-review-controls{align-items:center;gap:0;display:inline-flex}.canvas-review-controls .review-comment-control__trigger{border-start-end-radius:0;border-end-end-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;overflow:visible}.canvas-review-controls .review-comment-control__trigger [data-testid=Button-leading-visual]{flex:0 0 1rem;overflow:visible}.canvas-review-controls .review-comment-control__trigger svg{overflow:visible}.canvas-review-controls .canvas-comments-toggle{--brand-button-secondary-bgColor-active:var(--brand-button-secondary-bgColor-rest);--brand-button-secondary-borderColor-active:var(--brand-button-secondary-borderColor-rest);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);padding-inline:var(--hub-space-8);gap:var(--hub-space-4);border-start-start-radius:0;border-end-start-radius:0;border-inline-start-width:0;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:0}.canvas-comments-toggle:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.canvas-comments-unread-badge{width:var(--hub-space-8);height:var(--hub-space-8);background:var(--hub-accent);border-radius:50%}.canvas-comments-sidebar-shell{--hub-sidebar-top:var(--canvas-preview-top,2.75rem);--hub-sidebar-z-index:35}.canvas-comments-sidebar-content{flex-direction:column;padding:0 1rem 1rem;display:flex;overflow:hidden}.canvas-comments-sidebar-shell .review-comment-filter-controls{padding-top:1rem}.canvas-comments-sidebar-shell .review-comment-filter-controls__filters{border-bottom:var(--brand-borderWidth-thin) solid var(--hub-border-muted);margin-inline:-1rem;padding:.25rem 1rem 1rem}.canvas-comments-live-notices{padding-top:.75rem}.canvas-comments-live-status{color:var(--hub-fg-muted);font-size:var(--brand-text-size-100);margin:0;padding:0}.canvas-comments-live-status+.canvas-comments-live-status{margin-top:.5rem}.canvas-conversation-shell{z-index:40;inset:var(--canvas-preview-top,2.75rem) 0 0;pointer-events:none;position:absolute;container-type:inline-size}.canvas-composer-shell{z-index:45;inset:var(--canvas-preview-top,2.75rem) 0 0;pointer-events:none;position:absolute;container-type:inline-size}.canvas-composer-shell .review-comment-composer,.canvas-composer-shell .review-comment-composer-backdrop{pointer-events:auto}.canvas-selection-notice{z-index:46;top:calc(var(--canvas-preview-top,2.75rem) + .75rem);border:1px solid var(--hub-danger-emphasis);border-radius:var(--brand-borderRadius-medium);background:var(--hub-canvas-default);max-width:min(30rem,100% - 2rem);color:var(--hub-fg-default);box-shadow:var(--hub-shadow-floating);padding:.75rem 1rem;position:absolute;left:50%;transform:translate(-50%)}.canvas-conversation-shell .review-thread-conversation{pointer-events:auto}.canvas-conversation-shell :is(.review-thread-message__menu-trigger,.review-comment-reactions__menu-trigger) [data-testid=Button-leading-visual]{flex:0 0 1rem;overflow:visible}.canvas-publish-settings__option{justify-content:space-between;align-items:center;gap:var(--hub-space-16);margin-top:var(--hub-space-12);display:flex}.canvas-publish-settings__option>label{min-width:0}.canvas-publish-settings__toggle:has([aria-disabled=true]){opacity:.5;cursor:not-allowed}.canvas-publish-settings__error{gap:var(--hub-space-12);margin-top:var(--hub-space-12);display:grid}.canvas-toolbar{--hub-toolbar-selected-bg:var(--brand-button-secondary-bgColor-hover);--hub-toolbar-selected-hover-bg:var(--brand-button-secondary-bgColor-active);z-index:50;background:var(--brand-color-canvas-subtle);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex-wrap:wrap;align-items:center;gap:.5rem;min-width:0;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem;display:flex;position:relative}.canvas-toolbar .canvas-publish-share{flex-direction:row;flex:none;align-items:center;gap:0;display:flex}.canvas-publish-share:has(.hub-icon-button) .canvas-publish-button{border-start-end-radius:0;border-end-end-radius:0}.canvas-publish-share .hub-icon-button{border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:-1px}.canvas-publish-share button:focus-visible{z-index:1;position:relative}.canvas-publish-share .hub-icon-button,.canvas-publish-share .canvas-publish-button{height:var(--brand-control-small-size);min-height:var(--brand-control-small-size)}.canvas-toolbar .canvas-title{width:fit-content;min-width:0;max-width:max-content;color:var(--brand-color-text-muted,#656d76);font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:var(--brand-text-size-100);letter-spacing:-.015em;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;flex:1 1 0;justify-content:flex-start;margin-right:auto;font-weight:700;line-height:1.25rem;overflow:hidden}.canvas-toolbar .canvas-title>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.canvas-toolbar .canvas-title:hover{background:var(--brand-button-subtle-bgColor-hover)}.canvas-toolbar .canvas-title:focus-visible{outline:2px solid var(--hub-accent);outline-offset:2px}.canvas-toolbar button{flex-shrink:0}.canvas-toolbar button:is([aria-pressed=true],[aria-expanded=true]):not(.canvas-title,.canvas-publish-button):not(:disabled):not([aria-disabled=true]){background-color:var(--hub-toolbar-selected-bg)}.canvas-toolbar button:is([aria-pressed=true],[aria-expanded=true]):not(.canvas-title,.canvas-publish-button):not(:disabled):not([aria-disabled=true]):is(:hover,:active){background-color:var(--hub-toolbar-selected-hover-bg)}.canvas-review-controls-slot{align-items:center;display:flex}.canvas-publish-button[aria-busy=true] svg{animation:1s linear infinite canvas-publish-spin}@keyframes canvas-publish-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.canvas-publish-button[aria-busy=true] svg{animation:none}}@media (width<=30rem){.canvas-toolbar{padding-inline:.625rem}}@media (width<1024px){.canvas-toolbar .canvas-toolbar-compact-button{width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);gap:0;padding-inline:0}.canvas-toolbar .canvas-toolbar-button-label{display:none}}*,:before,:after{box-sizing:border-box}body,h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd{margin:0}ul[role=list],ol[role=list]{list-style:none}html,html:focus-within{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html,html:focus-within{scroll-behavior:auto}}body{min-height:100vh;line-height:1.5}a:not([class]){-webkit-text-decoration-skip:ink;-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto}img,picture{max-width:100%}input,button,textarea,select{font-family:inherit}:root,[data-color-mode=light]{--base-color-scale-black-0:#000;--base-color-scale-transparent:#fff0;--base-color-scale-white-0:#fff;--base-color-scale-gray-0:#f2f5f3;--base-color-scale-gray-1:#e4ebe6;--base-color-scale-gray-2:#d2d9d4;--base-color-scale-gray-3:#c4ccc6;--base-color-scale-gray-4:#b6bfb8;--base-color-scale-gray-5:#96a199;--base-color-scale-gray-6:#77827a;--base-color-scale-gray-7:#58635b;--base-color-scale-gray-8:#353d37;--base-color-scale-gray-9:#191f1b;--base-color-scale-blue-0:#ddf4ff;--base-color-scale-blue-1:#bcecff;--base-color-scale-blue-2:#8dd6ff;--base-color-scale-blue-3:#5fb9ff;--base-color-scale-blue-4:#3094ff;--base-color-scale-blue-5:#0377ff;--base-color-scale-blue-6:#0055d5;--base-color-scale-blue-7:#0040a7;--base-color-scale-blue-8:#002f7a;--base-color-scale-blue-9:#001c4d;--base-color-scale-green-0:#ebf9f4;--base-color-scale-green-1:#bfffd1;--base-color-scale-green-2:#8cf2a6;--base-color-scale-green-3:#5fed83;--base-color-scale-green-4:#23ea57;--base-color-scale-green-5:#0fbf3e;--base-color-scale-green-6:#08872b;--base-color-scale-green-7:#0d6731;--base-color-scale-green-8:#0e4a2e;--base-color-scale-green-9:#0d3024;--base-color-scale-yellow-0:#fff8c5;--base-color-scale-yellow-1:#ffe777;--base-color-scale-yellow-2:#ffd743;--base-color-scale-yellow-3:#fabf21;--base-color-scale-yellow-4:#db9d00;--base-color-scale-yellow-5:#be7d00;--base-color-scale-yellow-6:#a06100;--base-color-scale-yellow-7:#824800;--base-color-scale-yellow-8:#653200;--base-color-scale-yellow-9:#471f00;--base-color-scale-orange-0:#fff1e5;--base-color-scale-orange-1:#fcceab;--base-color-scale-orange-2:#f4a876;--base-color-scale-orange-3:#f08a3a;--base-color-scale-orange-4:#da7210;--base-color-scale-orange-5:#b85b06;--base-color-scale-orange-6:#954502;--base-color-scale-orange-7:#703100;--base-color-scale-orange-8:#5c2300;--base-color-scale-orange-9:#471700;--base-color-scale-red-0:#ffebe9;--base-color-scale-red-1:#ffcecb;--base-color-scale-red-2:#ffaba8;--base-color-scale-red-3:#ff8182;--base-color-scale-red-4:#fa4549;--base-color-scale-red-5:#cf2230;--base-color-scale-red-6:#ae0b29;--base-color-scale-red-7:#860620;--base-color-scale-red-8:#730019;--base-color-scale-red-9:#420011;--base-color-scale-purple-0:#f0e5ff;--base-color-scale-purple-1:#dbbffd;--base-color-scale-purple-2:#c898fd;--base-color-scale-purple-3:#b870ff;--base-color-scale-purple-4:#9f51fa;--base-color-scale-purple-5:#8534f3;--base-color-scale-purple-6:#6619e1;--base-color-scale-purple-7:#43179e;--base-color-scale-purple-8:#26115f;--base-color-scale-purple-9:#160048;--base-color-scale-pink-0:#fff0fc;--base-color-scale-pink-1:#ffc9f2;--base-color-scale-pink-2:#f67ed2;--base-color-scale-pink-3:#ff80d2;--base-color-scale-pink-4:#ff4ac0;--base-color-scale-pink-5:#ef2aa4;--base-color-scale-pink-6:#ca2186;--base-color-scale-pink-7:#952866;--base-color-scale-pink-8:#651643;--base-color-scale-pink-9:#3d0a28;--base-color-scale-coral-0:#fff0eb;--base-color-scale-coral-1:#ffcab8;--base-color-scale-coral-2:#ffa387;--base-color-scale-coral-3:#ff7b56;--base-color-scale-coral-4:#fe4c25;--base-color-scale-coral-5:#e13f1b;--base-color-scale-coral-6:#c53211;--base-color-scale-coral-7:#a22710;--base-color-scale-coral-8:#801e0f;--base-color-scale-coral-9:#500a00;--base-color-scale-lemon-0:#fdf5b3;--base-color-scale-lemon-1:#f5e36b;--base-color-scale-lemon-2:#f2da3b;--base-color-scale-lemon-3:#e1c50f;--base-color-scale-lemon-4:#c7a60b;--base-color-scale-lemon-5:#a98906;--base-color-scale-lemon-6:#806803;--base-color-scale-lemon-7:#614d01;--base-color-scale-lemon-8:#413200;--base-color-scale-lemon-9:#322400;--base-color-scale-lime-0:#f3fec8;--base-color-scale-lime-1:#e8fc97;--base-color-scale-lime-2:#dcfa67;--base-color-scale-lime-3:#d1f441;--base-color-scale-lime-4:#b2de28;--base-color-scale-lime-5:#92c219;--base-color-scale-lime-6:#698e17;--base-color-scale-lime-7:#425e13;--base-color-scale-lime-8:#2c440b;--base-color-scale-lime-9:#182c01;--base-color-scale-teal-0:#daf9f5;--base-color-scale-teal-1:#a4efe8;--base-color-scale-teal-2:#6ee5dc;--base-color-scale-teal-3:#39dad2;--base-color-scale-teal-4:#23b1ae;--base-color-scale-teal-5:#197b7b;--base-color-scale-teal-6:#136061;--base-color-scale-teal-7:#024b4d;--base-color-scale-teal-8:#083d3d;--base-color-scale-teal-9:#052b2c;--base-color-scale-indigo-0:#eff2ff;--base-color-scale-indigo-1:#d4dbff;--base-color-scale-indigo-2:#b3c1fd;--base-color-scale-indigo-3:#8e9df7;--base-color-scale-indigo-4:#6b7bef;--base-color-scale-indigo-5:#4956e5;--base-color-scale-indigo-6:#2d3dd7;--base-color-scale-indigo-7:#262dae;--base-color-scale-indigo-8:#212183;--base-color-scale-indigo-9:#12144f}[data-color-mode=dark]{--base-color-scale-black-0:#000;--base-color-scale-transparent:#0000;--base-color-scale-white-0:#fff;--base-color-scale-gray-0:#d2d9d4;--base-color-scale-gray-1:#c4ccc6;--base-color-scale-gray-2:#a4aea6;--base-color-scale-gray-3:#7c8980;--base-color-scale-gray-4:#58635b;--base-color-scale-gray-5:#353d37;--base-color-scale-gray-6:#262c28;--base-color-scale-gray-7:#191f1b;--base-color-scale-gray-8:#0f1511;--base-color-scale-gray-9:#060907;--base-color-scale-blue-0:#c2edff;--base-color-scale-blue-1:#a2daff;--base-color-scale-blue-2:#78bafe;--base-color-scale-blue-3:#3094ff;--base-color-scale-blue-4:#0377ff;--base-color-scale-blue-5:#0a50db;--base-color-scale-blue-6:#1530b7;--base-color-scale-blue-7:#082a8f;--base-color-scale-blue-8:#052063;--base-color-scale-blue-9:#000839;--base-color-scale-green-0:#cdfcd9;--base-color-scale-green-1:#8cf2a6;--base-color-scale-green-2:#5fed83;--base-color-scale-green-3:#23ea57;--base-color-scale-green-4:#0fbf3e;--base-color-scale-green-5:#08872b;--base-color-scale-green-6:#0d6731;--base-color-scale-green-7:#0e422c;--base-color-scale-green-8:#0d3024;--base-color-scale-green-9:#0a241b;--base-color-scale-yellow-0:#f8e3a1;--base-color-scale-yellow-1:#f7d162;--base-color-scale-yellow-2:#fabf21;--base-color-scale-yellow-3:#db9d00;--base-color-scale-yellow-4:#be7d00;--base-color-scale-yellow-5:#a06100;--base-color-scale-yellow-6:#834800;--base-color-scale-yellow-7:#653200;--base-color-scale-yellow-8:#471f00;--base-color-scale-yellow-9:#2a1000;--base-color-scale-orange-0:#ffe2cc;--base-color-scale-orange-1:#fab580;--base-color-scale-orange-2:#f08a3a;--base-color-scale-orange-3:#ea7110;--base-color-scale-orange-4:#d56101;--base-color-scale-orange-5:#b35101;--base-color-scale-orange-6:#924100;--base-color-scale-orange-7:#703100;--base-color-scale-orange-8:#572400;--base-color-scale-orange-9:#3d1800;--base-color-scale-red-0:#ffd9d6;--base-color-scale-red-1:#feb2ae;--base-color-scale-red-2:#fd8986;--base-color-scale-red-3:#fc5c5d;--base-color-scale-red-4:#fa383d;--base-color-scale-red-5:#d31231;--base-color-scale-red-6:#ae0b29;--base-color-scale-red-7:#860620;--base-color-scale-red-8:#5e0217;--base-color-scale-red-9:#33000d;--base-color-scale-purple-0:#eadbff;--base-color-scale-purple-1:#d3b3fe;--base-color-scale-purple-2:#c08bfc;--base-color-scale-purple-3:#a665f9;--base-color-scale-purple-4:#8b40f5;--base-color-scale-purple-5:#6619e1;--base-color-scale-purple-6:#43179e;--base-color-scale-purple-7:#26115f;--base-color-scale-purple-8:#160048;--base-color-scale-purple-9:#0e022c;--base-color-scale-pink-0:#ffdbf7;--base-color-scale-pink-1:#fcabe7;--base-color-scale-pink-2:#f67ed2;--base-color-scale-pink-3:#ed55ba;--base-color-scale-pink-4:#e22d9f;--base-color-scale-pink-5:#ca2186;--base-color-scale-pink-6:#961c66;--base-color-scale-pink-7:#741550;--base-color-scale-pink-8:#520e39;--base-color-scale-pink-9:#30081f;--base-color-scale-coral-0:#ffd5c7;--base-color-scale-coral-1:#fdb7a1;--base-color-scale-coral-2:#fa9072;--base-color-scale-coral-3:#f66945;--base-color-scale-coral-4:#ef4319;--base-color-scale-coral-5:#c53211;--base-color-scale-coral-6:#a22710;--base-color-scale-coral-7:#801e0f;--base-color-scale-coral-8:#500a00;--base-color-scale-coral-9:#3c0000;--base-color-scale-lemon-0:#fcf2a5;--base-color-scale-lemon-1:#f9e76a;--base-color-scale-lemon-2:#f4da38;--base-color-scale-lemon-3:#e4c411;--base-color-scale-lemon-4:#c7a60b;--base-color-scale-lemon-5:#a98906;--base-color-scale-lemon-6:#876a04;--base-color-scale-lemon-7:#654d02;--base-color-scale-lemon-8:#423101;--base-color-scale-lemon-9:#241900;--base-color-scale-lime-0:#edffc9;--base-color-scale-lime-1:#dcff96;--base-color-scale-lime-2:#cdf041;--base-color-scale-lime-3:#b1e119;--base-color-scale-lime-4:#88b80f;--base-color-scale-lime-5:#608a10;--base-color-scale-lime-6:#3e5f0f;--base-color-scale-lime-7:#22360b;--base-color-scale-lime-8:#142a08;--base-color-scale-lime-9:#091d05;--base-color-scale-teal-0:#cff7f2;--base-color-scale-teal-1:#99f1e8;--base-color-scale-teal-2:#61eee3;--base-color-scale-teal-3:#26ede2;--base-color-scale-teal-4:#10dcd4;--base-color-scale-teal-5:#0bbab6;--base-color-scale-teal-6:#079695;--base-color-scale-teal-7:#047172;--base-color-scale-teal-8:#024b4d;--base-color-scale-teal-9:#052d2e;--base-color-scale-indigo-0:#dbe3ff;--base-color-scale-indigo-1:#b3c1fd;--base-color-scale-indigo-2:#8d9ff8;--base-color-scale-indigo-3:#6a7df0;--base-color-scale-indigo-4:#4a5ce5;--base-color-scale-indigo-5:#2d3dd7;--base-color-scale-indigo-6:#232fb3;--base-color-scale-indigo-7:#212183;--base-color-scale-indigo-8:#161962;--base-color-scale-indigo-9:#0d103f}:root{--base-size-128:8rem;--base-size-112:7rem;--base-size-96:6rem;--base-size-88:5.5rem;--base-size-80:5rem;--base-size-64:4rem;--base-size-60:3.75rem;--base-size-48:3rem;--base-size-44:2.75rem;--base-size-40:2.5rem;--base-size-36:2.25rem;--base-size-32:2rem;--base-size-28:1.75rem;--base-size-24:1.5rem;--base-size-20:1.25rem;--base-size-16:1rem;--base-size-12:.75rem;--base-size-8:.5rem;--base-size-6:.375rem;--base-size-4:.25rem;--base-size-2:.125rem;--base-text-weight-heavy:900;--base-text-weight-extrabold:800;--base-text-weight-bold:700;--base-text-weight-semibold:600;--base-text-weight-medium:500;--base-text-weight-normal:400;--base-text-weight-regular:400;--base-text-weight-light:300;--base-text-weight-extralight:200;--brand-animation-variant-scaleInLeft-end:1;--brand-animation-variant-scaleInLeft-start:.9;--brand-animation-variant-scaleInLeft-distance:1.25rem;--brand-animation-variant-scaleInRight-end:1;--brand-animation-variant-scaleInRight-start:.9;--brand-animation-variant-scaleInRight-distance:-1.25rem;--brand-animation-variant-scaleInTop-distance: ;--brand-animation-variant-scaleIn-end:1;--brand-animation-variant-scaleIn-start:.96;--brand-animation-variant-scaleInDown-end:1;--brand-animation-variant-scaleInDown-start:0;--brand-animation-variant-scaleInDown-distance:-3.125rem;--brand-animation-variant-scaleInUp-end:1;--brand-animation-variant-scaleInUp-start:.96;--brand-animation-variant-scaleInUp-distance:1.5rem;--brand-animation-variant-slideInRight-distance:-.9375rem;--brand-animation-variant-slideInLeft-distance:.9375rem;--brand-animation-variant-slideInDown-distance:-.9375rem;--brand-animation-variant-slideInUp-distance:.9375rem;--brand-animation-transition-default:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default);--brand-animation-easing-glide:cubic-bezier(.33, 1, .68, 1);--brand-animation-easing-default:cubic-bezier(.16, 1, .3, 1);--brand-animation-duration-extended:.7s;--brand-animation-duration-default:.6s;--brand-animation-duration-fast:.3s;--brand-animation-duration-faster:.2s;--brand-control-animation-easing:var(--brand-animation-easing-glide);--brand-control-animation-duration:80ms;--brand-control-large-size:3.75rem;--brand-control-medium-size:2.6875rem;--brand-controlStack-large-gap-spacious:var(--base-size-12);--brand-controlStack-large-gap-condensed:var(--base-size-8);--brand-controlStack-large-gap-auto:var(--base-size-8);--brand-controlStack-medium-gap-spacious:var(--base-size-12);--brand-controlStack-medium-gap-condensed:var(--base-size-8);--brand-controlStack-small-gap-spacious:var(--base-size-16);--brand-controlStack-small-gap-condensed:var(--base-size-8);--brand-stack-gap-spacious:var(--base-size-48);--brand-stack-gap-normal:var(--base-size-24);--brand-stack-gap-condensed:var(--base-size-16);--brand-stack-padding-spacious:var(--base-size-48);--brand-stack-padding-normal:var(--base-size-24);--brand-stack-padding-condensed:var(--base-size-16);--brand-box-spacing-spacious:var(--base-size-48);--brand-box-spacing-normal:var(--base-size-24);--brand-box-spacing-condensed:var(--base-size-16);--brand-control-large-gap:var(--base-size-16);--brand-control-large-paddingInline-spacious:var(--base-size-32);--brand-control-large-paddingInline-normal:var(--base-size-20);--brand-control-large-paddingInline-condensed:var(--base-size-16);--brand-control-large-paddingBlock-normal:var(--base-size-20);--brand-control-large-paddingBlock-condensed:var(--base-size-12);--brand-control-large-lineBoxHeight:var(--base-size-20);--brand-control-medium-gap:var(--base-size-12);--brand-control-medium-paddingInline-spacious:var(--base-size-28);--brand-control-medium-paddingInline-normal:var(--base-size-16);--brand-control-medium-paddingInline-condensed:var(--base-size-12);--brand-control-medium-paddingBlock-normal:var(--base-size-16);--brand-control-medium-paddingBlock-condensed:var(--base-size-6);--brand-control-medium-lineBoxHeight:var(--base-size-16);--brand-control-small-gap:var(--base-size-8);--brand-control-small-paddingInline-spacious:var(--base-size-24);--brand-control-small-paddingInline-normal:var(--base-size-12);--brand-control-small-paddingInline-condensed:var(--base-size-8);--brand-control-small-paddingBlock:var(--base-size-8);--brand-control-small-lineBoxHeight:var(--base-size-12);--brand-control-small-size:var(--base-size-32);--brand-control-minTarget-coarse:var(--base-size-44);--brand-control-minTarget-fine:var(--base-size-16);--brand-text-style-italic-10:"ital" 10;--brand-text-style-italic-9:"ital" 9;--brand-text-style-italic-8:"ital" 8;--brand-text-style-italic-7:"ital" 7;--brand-text-style-italic-6:"ital" 6;--brand-text-style-italic-5:"ital" 5;--brand-text-style-italic-4:"ital" 4;--brand-text-style-italic-3:"ital" 3;--brand-text-style-italic-2:"ital" 2;--brand-text-style-italic-1:"ital" 1;--brand-text-letterSpacing-1000:0;--brand-text-letterSpacing-900:0;--brand-text-letterSpacing-800:0;--brand-text-letterSpacing-700:0;--brand-text-letterSpacing-600:0;--brand-text-letterSpacing-500:0;--brand-text-letterSpacing-400:0;--brand-text-letterSpacing-350:.18px;--brand-text-letterSpacing-300:.18px;--brand-text-letterSpacing-200:.24px;--brand-text-letterSpacing-100:.21px;--brand-text-lineHeight-1000:1.149;--brand-text-lineHeight-900:1.2;--brand-text-lineHeight-800:1.2;--brand-text-lineHeight-700:1.2;--brand-text-lineHeight-600:1.3;--brand-text-lineHeight-500:1.3;--brand-text-lineHeight-400:1.4;--brand-text-lineHeight-350:1.5;--brand-text-lineHeight-300:1.5;--brand-text-lineHeight-200:1.5;--brand-text-lineHeight-100:1.5;--brand-text-size-1000:2.5rem;--brand-text-size-900:2.25rem;--brand-text-size-800:2rem;--brand-text-size-700:1.75rem;--brand-text-size-600:1.5rem;--brand-text-size-500:1.375rem;--brand-text-size-400:1.25rem;--brand-text-size-350:1.125rem;--brand-text-size-300:1.125rem;--brand-text-size-200:1rem;--brand-text-size-100:.875rem;--brand-text-weight-heavy:550;--brand-text-weight-extrabold:543;--brand-text-weight-bold:537;--brand-text-weight-semibold:525;--brand-text-weight-medium:500;--brand-text-weight-normal:400;--brand-text-weight-regular:400;--brand-text-weight-light:400;--brand-text-weight-extralight:400;--brand-text-weight-1000:var(--base-text-weight-normal);--brand-text-weight-900:var(--base-text-weight-normal);--brand-text-weight-800:var(--base-text-weight-normal);--brand-text-weight-700:var(--base-text-weight-normal);--brand-text-weight-600:var(--base-text-weight-normal);--brand-text-weight-500:var(--base-text-weight-normal);--brand-text-weight-400:var(--base-text-weight-normal);--brand-text-weight-350:var(--base-text-weight-normal);--brand-text-weight-300:var(--base-text-weight-normal);--brand-text-weight-200:var(--base-text-weight-normal);--brand-text-weight-100:var(--base-text-weight-normal);--brand-text-subhead-lineHeight-large:1.3;--brand-text-subhead-lineHeight-medium:1.3;--brand-text-subhead-weight-large:475;--brand-text-subhead-weight-medium:550;--brand-text-subhead-letterSpacing-large:.1px;--brand-text-subhead-letterSpacing-medium:.24px;--brand-text-subhead-size-large:1.125rem;--brand-text-subhead-size-medium:1rem;--brand-heading-lineHeight-1000:1.1;--brand-heading-lineHeight-900:1.1;--brand-heading-lineHeight-800:1.2;--brand-heading-lineHeight-700:1.2;--brand-heading-lineHeight-600:1.3;--brand-heading-lineHeight-500:1.3;--brand-heading-lineHeight-400:1.3;--brand-heading-letterSpacing-1000:0;--brand-heading-letterSpacing-900:0;--brand-heading-letterSpacing-800:0;--brand-heading-letterSpacing-700:0;--brand-heading-letterSpacing-600:0;--brand-heading-letterSpacing-500:0;--brand-heading-letterSpacing-400:0;--brand-heading-weight-1000:440;--brand-heading-weight-900:440;--brand-heading-weight-800:465;--brand-heading-weight-700:460;--brand-heading-weight-600:460;--brand-heading-weight-500:480;--brand-heading-weight-400:480;--brand-fontStack-monospace:"Mona Sans Mono", monospace;--brand-fontStack-sansSerifAlt:"Hubot Sans", "Hubot SansHeaderFallback", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--brand-fontStack-sansSerif:"Mona Sans", "MonaSansFallback", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--brand-fontStack-system:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--brand-heading-fontFamilyAlt:var(--brand-fontStack-sansSerifAlt);--brand-heading-fontFamily:var(--brand-fontStack-sansSerif);--brand-body-fontFamilyAlt:var(--brand-fontStack-sansSerifAlt);--brand-body-fontFamily:var(--brand-fontStack-sansSerif)}@media (width>=768px){:root{--brand-text-lineHeight-1000:1.08;--brand-text-lineHeight-900:1.2;--brand-text-lineHeight-800:1.2;--brand-text-size-1000:3.5rem;--brand-text-size-900:3rem;--brand-text-size-800:2.5rem;--brand-text-size-700:2.125rem;--brand-text-size-600:1.75rem;--brand-text-size-500:1.5rem;--brand-text-size-400:1.25rem;--brand-text-subhead-weight-large:525;--brand-heading-lineHeight-1000:1.05;--brand-heading-lineHeight-900:1.05;--brand-heading-weight-1000:440;--brand-heading-weight-900:440;--brand-heading-weight-800:465;--brand-heading-weight-700:460}}@media (width>=1012px){:root{--brand-text-letterSpacing-1000:-.035em;--brand-text-lineHeight-1000:1.08;--brand-text-lineHeight-900:1.1;--brand-text-lineHeight-800:1.18;--brand-text-lineHeight-500:1.35;--brand-text-size-1000:4rem;--brand-text-size-900:3.5rem;--brand-text-size-800:3rem;--brand-text-size-700:2.5rem;--brand-text-size-600:2.125rem;--brand-text-size-500:1.75rem;--brand-text-size-400:1.375rem;--brand-text-size-350:1.25rem;--brand-text-subhead-weight-large:500;--brand-text-subhead-size-large:1.25rem;--brand-heading-lineHeight-1000:1;--brand-heading-lineHeight-900:1;--brand-heading-lineHeight-600:1.2;--brand-heading-letterSpacing-1000:-.014rem;--brand-heading-weight-1000:425;--brand-heading-weight-900:440;--brand-heading-weight-800:440;--brand-heading-weight-700:460}}:root{--brand-breakpoint-xxlarge:87.5rem;--brand-breakpoint-xlarge:80rem;--brand-breakpoint-large:63.25rem;--brand-breakpoint-medium:48rem;--brand-breakpoint-small:34rem;--brand-breakpoint-xsmall:20rem;--brand-borderRadius-full:624.938rem;--brand-borderWidth-thicker:max(4px, .25rem);--brand-borderWidth-thick:max(2px, .125rem);--brand-borderWidth-thin:max(1px, .0625rem);--brand-borderRadius-xlarge:var(--base-size-24);--brand-borderRadius-large:var(--base-size-16);--brand-borderRadius-medium:var(--base-size-8);--brand-borderRadius-small:var(--base-size-4);--brand-borderInset-thicker:inset 0 0 0 var(--brand-borderWidth-thicker);--brand-borderInset-thick:inset 0 0 0 var(--brand-borderWidth-thick);--brand-borderInset-thin:inset 0 0 0 var(--brand-borderWidth-thin)}:root,[data-color-mode=light]{--brand-color-success-fg:var(--base-color-scale-green-6);--brand-color-success-emphasis:var(--base-color-scale-green-5);--brand-color-success-muted:#8cf2a699;--brand-color-success-subtle:var(--base-color-scale-green-1);--brand-color-danger-fg:var(--base-color-scale-red-5);--brand-color-danger-emphasis:var(--base-color-scale-red-5);--brand-color-danger-muted:#ffaba899;--brand-color-danger-subtle:var(--base-color-scale-red-0);--brand-color-error-fg:var(--brand-color-danger-fg);--brand-color-error-emphasis:var(--brand-color-danger-emphasis);--brand-color-error-muted:var(--brand-color-danger-muted);--brand-color-error-subtle:var(--brand-color-danger-subtle);--brand-color-accent-primary:var(--base-color-scale-green-7);--brand-color-accent-secondary:var(--base-color-scale-yellow-5);--brand-color-text-default:var(--base-color-scale-black-0);--brand-color-text-muted:var(--base-color-scale-gray-7);--brand-color-text-subtle:var(--brand-color-text-muted);--brand-color-text-onEmphasis:var(--base-color-scale-white-0);--brand-color-text-emphasized:var(--base-color-scale-green-6);--brand-color-text-link-rest:var(--base-color-scale-blue-6);--brand-color-text-link-pressed:var(--base-color-scale-blue-8);--brand-color-text-danger:#cf222e;--brand-color-text-error:var(--brand-color-text-danger);--brand-color-neutral-emphasisPlus:var(--base-color-scale-gray-8);--brand-color-neutral-emphasis:var(--base-color-scale-gray-6);--brand-color-neutral-muted:#c4ccc6fe;--brand-color-neutral-subtle:#e4ebe6fe;--brand-color-canvas-default:var(--base-color-scale-white-0);--brand-color-canvas-invert:var(--base-color-scale-black-0);--brand-color-canvas-overlay:var(--base-color-scale-white-0);--brand-color-canvas-inset:var(--base-color-scale-gray-0);--brand-color-canvas-subtle:var(--base-color-scale-gray-0);--brand-color-canvas-muted:#f9fbf9;--brand-color-border-default:var(--base-color-scale-gray-4);--brand-color-border-muted:var(--base-color-scale-gray-1);--brand-color-border-subtle:var(--base-color-scale-gray-2);--brand-color-focus:var(--base-color-scale-blue-5)}[data-color-mode=dark]{--brand-color-success-fg:var(--base-color-scale-green-3);--brand-color-success-emphasis:var(--base-color-scale-green-6);--brand-color-success-muted:#0d302499;--brand-color-success-subtle:#0e422cd9;--brand-color-danger-fg:var(--base-color-scale-red-4);--brand-color-danger-emphasis:var(--base-color-scale-red-5);--brand-color-danger-muted:#5e021799;--brand-color-danger-subtle:#fa383dd9;--brand-color-error-fg:var(--brand-color-danger-fg);--brand-color-error-emphasis:var(--brand-color-danger-emphasis);--brand-color-error-muted:var(--brand-color-danger-muted);--brand-color-error-subtle:var(--brand-color-danger-subtle);--brand-color-accent-primary:var(--base-color-scale-green-2);--brand-color-accent-secondary:var(--base-color-scale-yellow-3);--brand-color-text-default:var(--base-color-scale-white-0);--brand-color-text-muted:var(--base-color-scale-gray-2);--brand-color-text-subtle:var(--brand-color-text-muted);--brand-color-text-onEmphasis:var(--base-color-scale-black-0);--brand-color-text-emphasized:var(--base-color-scale-green-3);--brand-color-text-link-rest:var(--base-color-scale-blue-1);--brand-color-text-link-pressed:var(--base-color-scale-blue-1);--brand-color-text-danger:#ff8182;--brand-color-text-error:var(--brand-color-text-danger);--brand-color-neutral-emphasisPlus:var(--base-color-scale-gray-3);--brand-color-neutral-emphasis:var(--base-color-scale-gray-3);--brand-color-neutral-muted:#7c8980fe;--brand-color-neutral-subtle:#7c8980;--brand-color-canvas-default:var(--base-color-scale-black-0);--brand-color-canvas-invert:var(--base-color-scale-white-0);--brand-color-canvas-overlay:var(--base-color-scale-gray-6);--brand-color-canvas-inset:var(--base-color-scale-black-0);--brand-color-canvas-subtle:var(--base-color-scale-gray-8);--brand-color-canvas-muted:#090d0a;--brand-color-border-default:var(--base-color-scale-gray-5);--brand-color-border-muted:var(--base-color-scale-gray-7);--brand-color-border-subtle:var(--base-color-scale-gray-6);--brand-color-focus:var(--base-color-scale-blue-3)}.visually-hidden{clip:rect(0, 0, 0, 0);word-wrap:normal;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}:root{--brand-Grid-spacing-margin:var(--base-size-16);--brand-Grid-spacing-column-gap:var(--base-size-16);--brand-Grid-spacing-row:var(--base-size-16)}@media (width>=768px){:root{--brand-Grid-spacing-margin:var(--base-size-40);--brand-Grid-spacing-column-gap:var(--base-size-32);--brand-Grid-spacing-row:var(--base-size-32)}}@media (width>=1280px){:root{--brand-Grid-spacing-margin:var(--base-size-16);--brand-Grid-spacing-column-gap:var(--base-size-48);--brand-Grid-spacing-row:var(--base-size-48)}}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-Grid-column-bgColor-overlay:#fb51544d}.Primer_Brand__Grid-module__Grid___q48mT{grid-template-columns:repeat(12,minmax(0,1fr));max-width:1280px;margin:0 auto;display:grid}.Primer_Brand__Grid-module__Grid--columnGap-default___NxZ0V{grid-column-gap:var(--brand-Grid-spacing-column-gap)}.Primer_Brand__Grid-module__Grid--columnGap-none___Qh5GF{grid-column-gap:0}.Primer_Brand__Grid-module__Grid--rowGap-default___X5kJS{grid-row-gap:var(--brand-Grid-spacing-row)}.Primer_Brand__Grid-module__Grid--rowGap-none___WSM_k{grid-row-gap:0}.Primer_Brand__Grid-module__Grid--full-width___pIgWW{width:100%;max-width:none}.Primer_Brand__Grid-module__Grid___q48mT+.Primer_Brand__Grid-module__Grid___q48mT{margin-top:var(--brand-Grid-spacing-row)}.Primer_Brand__Grid-module__Grid___q48mT .Primer_Brand__Grid-module__Grid___q48mT{margin:0;padding-inline:0}.Primer_Brand__Grid-module__Grid__column___HTpsw{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid--has-overlay___M9Cs0 .Primer_Brand__Grid-module__Grid__column___HTpsw{background-color:var(--brand-Grid-column-bgColor-overlay);min-height:var(--base-size-24)}.Primer_Brand__Grid-module__Grid--has-gutters___KoJD2{padding-inline:var(--brand-Grid-spacing-margin)}.Primer_Brand__Grid-module__Grid__column--span-1___T7v1_{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--span-2___r4qRu{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--span-3___Tnlwe{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--span-4___Q9jA0{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--span-5___UpILx{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--span-6___vUUep{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--span-7___lfMLa{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--span-8___qarGZ{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--span-9___L2waY{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--span-10___VRJQp{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--span-11___pjEQO{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--span-12___Tn1Hg{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--start-1___jF8hC{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--start-2___S9EWU{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--start-3___GwcI1{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--start-4___BIVqR{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--start-5___yTruZ{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--start-6___FAtcW{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--start-7___Jnzaq{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--start-8___CLuiS{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--start-9___hhyfE{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--start-10___ojxEo{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--start-11___oBenU{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--start-12___wQnvA{grid-column-start:12}@media screen and (width>=0){.Primer_Brand__Grid-module__Grid__column--xsmall-span-1___srexO{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--xsmall-span-2___XrAnt{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--xsmall-span-3___Aps_z{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--xsmall-span-4___OSsWO{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--xsmall-span-5___ShR77{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--xsmall-span-6___V4QJq{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--xsmall-span-7___DtdFA{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--xsmall-span-8___e5M5o{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--xsmall-span-9___sdZ5a{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--xsmall-span-10___YuS1a{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--xsmall-span-11____RxYR{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--xsmall-span-12___brXS7{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--xsmall-start-1___Y9JJq{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--xsmall-start-2___ruZTF{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--xsmall-start-3___yEBif{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--xsmall-start-4___QPFc2{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--xsmall-start-5___WAqd0{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--xsmall-start-6___T1rhy{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--xsmall-start-7___uMQT1{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--xsmall-start-8___LUADA{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--xsmall-start-9___CBnBu{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--xsmall-start-10___EPRyw{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--xsmall-start-11___UbCAy{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--xsmall-start-12___gYCaa{grid-column-start:12}}@media screen and (width>=34rem){.Primer_Brand__Grid-module__Grid__column--small-span-1___rBTjf{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--small-span-2___SHQM3{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--small-span-3___cbAS8{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--small-span-4___tv973{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--small-span-5___EBkra{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--small-span-6___OYZPl{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--small-span-7___ymqG4{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--small-span-8___qy9wb{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--small-span-9___hWJAx{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--small-span-10___apy3R{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--small-span-11___tsz0q{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--small-span-12___NdAWP{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--small-start-1___epLTD{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--small-start-2___wlXcD{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--small-start-3___YFtvP{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--small-start-4___SOC6v{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--small-start-5___EVXuW{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--small-start-6___t1yYl{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--small-start-7___MDozK{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--small-start-8___CR0Zw{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--small-start-9___W0svP{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--small-start-10___vxEwX{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--small-start-11___orcQZ{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--small-start-12___o4V7W{grid-column-start:12}}@media screen and (width>=48rem){.Primer_Brand__Grid-module__Grid__column--medium-span-1___BiHOE{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--medium-span-2___nANvY{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--medium-span-3___GpBD0{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--medium-span-4___zBxBa{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--medium-span-5___CnPWN{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--medium-span-6___DACuh{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--medium-span-7___R2Isv{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--medium-span-8___KI5ir{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--medium-span-9___is8dv{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--medium-span-10___eN2sH{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--medium-span-11___anfim{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--medium-span-12___eT5YS{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--medium-start-1___bCFG1{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--medium-start-2___ZxYOX{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--medium-start-3___aPUJ0{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--medium-start-4___VTIjA{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--medium-start-5___ccI5l{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--medium-start-6___Yc14i{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--medium-start-7___HOZSW{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--medium-start-8___G8VdF{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--medium-start-9___Ebcy8{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--medium-start-10___dY7pN{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--medium-start-11___hVffM{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--medium-start-12___N3mIQ{grid-column-start:12}}@media screen and (width>=63.25rem){.Primer_Brand__Grid-module__Grid__column--large-span-1___Nfkto{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--large-span-2___GyGH4{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--large-span-3___iwGxK{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--large-span-4___eJREG{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--large-span-5___rCJ_b{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--large-span-6___JNphY{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--large-span-7___TySdj{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--large-span-8___dkJwh{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--large-span-9___aamnY{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--large-span-10___nH4Bt{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--large-span-11___mDo3B{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--large-span-12___zSL6d{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--large-start-1___Hc53V{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--large-start-2____RsQ_{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--large-start-3___DN5KJ{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--large-start-4___iKrrW{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--large-start-5___t3K5k{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--large-start-6___uFIIO{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--large-start-7___YeqWt{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--large-start-8___fmHfg{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--large-start-9___UIwRf{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--large-start-10___rOnsb{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--large-start-11___oPN0R{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--large-start-12___tZLO7{grid-column-start:12}}@media screen and (width>=80rem){.Primer_Brand__Grid-module__Grid__column--xlarge-span-1___VzjSN{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--xlarge-span-2___p1QuZ{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--xlarge-span-3___xvbnJ{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--xlarge-span-4___D_9gq{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--xlarge-span-5___AWQN4{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--xlarge-span-6___FY68d{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--xlarge-span-7___PDVrC{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--xlarge-span-8___Np3vn{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--xlarge-span-9___QnUTm{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--xlarge-span-10___GPYff{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--xlarge-span-11____dXqr{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--xlarge-span-12___Faxbf{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--xlarge-start-1___8hqMz{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--xlarge-start-2___aiylo{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--xlarge-start-3___Iuufu{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--xlarge-start-4___ynfkD{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--xlarge-start-5___smnkV{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--xlarge-start-6___Z4EoQ{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--xlarge-start-7___NCAWz{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--xlarge-start-8___CZ8J_{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--xlarge-start-9___yhpyy{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--xlarge-start-10___E5Jou{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--xlarge-start-11___OGVVw{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--xlarge-start-12____kw0D{grid-column-start:12}}@media screen and (width>=87.5rem){.Primer_Brand__Grid-module__Grid__column--xxlarge-span-1___K9YLn{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-2___FoOLk{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-3___AvRFb{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-4___wmisc{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-5___oSh5q{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-6___zg0Yr{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-7___CxtNE{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-8___r4GdW{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-9___mfOCW{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-10___xjus8{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-11___AZC4h{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-12___DjdAU{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-1___HFYSu{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-2___dBj41{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-3___BX9bn{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-4___FwEd9{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-5____pwv6{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-6___u1opn{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-7___GuJAv{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-8___Z7ZFc{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-9___CcH1u{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-10___sck1f{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-11___VvIqo{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-12___MKYFP{grid-column-start:12}}.Primer_Brand__Animation-module__Animation___KNtEW{transition:var(--brand-animation-transition-default)}.Primer_Brand__Animation-module__Animation--fade-in___jUvJD{opacity:0;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--fade-in___jUvJD.Primer_Brand__Animation-module__Animation--active___g_UBK,.Primer_Brand__Animation-module__Animation--fade-out___CsyfK{opacity:1}.Primer_Brand__Animation-module__Animation--fade-out___CsyfK.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:0;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-up___ONnmI{opacity:0;transform:translateY(var(--brand-animation-variant-slideInUp-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-up___ONnmI.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateY(0)}.Primer_Brand__Animation-module__Animation--slide-in-down___bjmGv{opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-down___bjmGv.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateY(0)}.Primer_Brand__Animation-module__Animation--slide-in-left___iy5Js{opacity:0;transform:translateX(var(--brand-animation-variant-slideInLeft-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-left___iy5Js.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translate(0)}.Primer_Brand__Animation-module__Animation--slide-in-right___UZvNx{opacity:0;transform:translateX(var(--brand-animation-variant-slideInRight-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-right___UZvNx.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translate(0)}.Primer_Brand__Animation-module__Animation--scale-in___P7xzG{opacity:0;transform:scale(var(--brand-animation-variant-scaleIn-start));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in___P7xzG.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:scale(--brand-animation-variant-scaleIn-end)}.Primer_Brand__Animation-module__Animation--scale-in-up___n0qDP{opacity:0;transform:scale(var(--brand-animation-variant-scaleInUp-start)) translateY(var(--brand-animation-variant-scaleInUp-distance));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-up___n0qDP.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:scale(var(--brand-animation-variant-scaleInUp-end)) translateY(0)}.Primer_Brand__Animation-module__Animation--scale-in-down___YEgko{opacity:0;transform:translateY(var(--brand-animation-variant-scaleInDown-distance)) scale(var(--brand-animation-variant-scaleInDown-start));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-down___YEgko.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateY(0) scale(var(--brand-animation-variant-scaleInDown-end))}.Primer_Brand__Animation-module__Animation--scale-in-right___jBPh4{opacity:0;transform:scale(var(--brand-animation-variant-scaleInRight-start)) translateX(var(--brand-animation-variant-scaleInRight-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-right___jBPh4.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateX(0) scale(var(--brand-animation-variant-scaleInRight-end))}.Primer_Brand__Animation-module__Animation--scale-in-left___g8_dC{opacity:0;transform:scale(var(--brand-animation-variant-scaleInLeft-start)) translateX(var(--brand-animation-variant-scaleInLeft-distance));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-left___g8_dC.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateX(0) scale(var(--brand-animation-variant-scaleInLeft-end))}.Primer_Brand__Animation-module__Animation--fill-in-right___G_LYH{transform-origin:0;transition:transform var(--brand-animation-duration-default) var(--brand-animation-easing-default);transform:scaleX(0)}.Primer_Brand__Animation-module__Animation--fill-in-right___G_LYH.Primer_Brand__Animation-module__Animation--active___g_UBK{transform:scaleX(1)}.Primer_Brand__Animation-module__Animation--fill-in-top___AHELS{transform-origin:top;transition:transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default);transform:scaleY(0)}.Primer_Brand__Animation-module__Animation--fill-in-top___AHELS.Primer_Brand__Animation-module__Animation--active___g_UBK{transform:scaleY(1)}.Primer_Brand__Animation-module__Animation--reveal-in-up___xMAnz{clip-path:inset(-100% 0 100%);transition:transform var(--brand-animation-duration-default) var(--brand-animation-easing-default), clip-path var(--brand-animation-duration-default) var(--brand-animation-easing-default);transform:translateY(100%)}.Primer_Brand__Animation-module__Animation--reveal-in-up___xMAnz.Primer_Brand__Animation-module__Animation--active___g_UBK{clip-path:inset(0 0 -.2em);transform:translateY(0)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Animation-module__Animation___KNtEW,.Primer_Brand__Animation-module__Animation___KNtEW:before,.Primer_Brand__Animation-module__Animation___KNtEW:after,.Primer_Brand__Animation-module__Animation___KNtEW *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Stack-module__Stack___tASKe{display:flex}.Primer_Brand__Stack-module__Stack--vertical___CFzE7{flex-direction:column}.Primer_Brand__Stack-module__Stack--horizontal___YJFas{flex-direction:row}.Primer_Brand__Stack-module__Stack-narrow--vertical___GDT_Z{flex-direction:column}.Primer_Brand__Stack-module__Stack-narrow--horizontal___Co6IL{flex-direction:row}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--vertical___TMpL8{flex-direction:column}.Primer_Brand__Stack-module__Stack-regular--horizontal___WDLyR{flex-direction:row}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--vertical___G1Eu6{flex-direction:column}.Primer_Brand__Stack-module__Stack-wide--horizontal___cvxh3{flex-direction:row}}.Primer_Brand__Stack-module__Stack--gap-none___M7T_v{gap:0}.Primer_Brand__Stack-module__Stack--gap-condensed___Xe9jx{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack--gap-normal___JEO7_{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack--gap-spacious___w5ugZ{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack--gap-4___Ig30K{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack--gap-8___fQ3Ul{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack--gap-12___hJNHc{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack--gap-16___gT_Of{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack--gap-20___eVLBq{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack--gap-24___TQnkj{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack--gap-28___Ao4f4{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack--gap-32___iSq9y{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack--gap-36___QzYro{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack--gap-40___m5Kys{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack--gap-44___grqBd{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack--gap-48___vhQgW{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack--gap-60___eZ7wt{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack--gap-64___XKCAY{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack--gap-80___GfDtU{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack--gap-88___IfwPj{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack--gap-96___wM4RB{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack--gap-112___Rva1x{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack--gap-128___KJAoH{gap:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-narrow--gap-none___YtqsL{gap:0}.Primer_Brand__Stack-module__Stack-narrow--gap-condensed___zwHUG{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack-narrow--gap-normal___smNw5{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack-narrow--gap-spacious___TX17G{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack--padding-none___RCMh9{padding:0}.Primer_Brand__Stack-module__Stack--padding-condensed___mo7Aq{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack--padding-normal___ySRTI{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack--padding-spacious___REyye{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack--padding-4___aj4uj{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack--padding-8___roPlm{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack--padding-12___x5qIX{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack--padding-16___ZFRO_{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack--padding-20___pi8jv{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack--padding-24___iHVEv{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack--padding-28___ZzMnF{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack--padding-32___m4XKv{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack--padding-36___TssXo{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack--padding-40___GoH03{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack--padding-44___yXX7f{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack--padding-48___Owl4z{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack--padding-60___gm0l0{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack--padding-64___IIv9e{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack--padding-80___GvEJb{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack--padding-88___ZuA5D{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack--padding-96___JF88r{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack--padding-112___wzOyM{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack--padding-128___uuMnk{padding:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-narrow--padding-none___ndsvs{padding:0}.Primer_Brand__Stack-module__Stack-narrow--padding-condensed___f1f4j{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack-narrow--padding-normal___TQe_D{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack-narrow--padding-spacious___YeMDB{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack-narrow--padding-4___u7vTZ{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-narrow--padding-8___I46C6{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-narrow--padding-12___dDOxC{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-narrow--padding-16___fP_Cf{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-narrow--padding-20___iQimO{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-narrow--padding-24___A3O7E{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-narrow--padding-28___AQ6m1{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-narrow--padding-32___fwzmW{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-narrow--padding-36___nREO8{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-narrow--padding-40___Z0my5{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-narrow--padding-44___DBucu{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-narrow--padding-48___FmiJM{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-narrow--padding-60___wMl0S{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-narrow--padding-64___X7fQc{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-narrow--padding-80___URxqt{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-narrow--padding-88___TTW75{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-narrow--padding-96___OHxcW{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-narrow--padding-112___tNmYE{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-narrow--padding-128___MeCmA{padding:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-narrow--gap-4___DPSDt{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-narrow--gap-8___kbBO7{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-narrow--gap-12___g2DMv{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-narrow--gap-16___txy3T{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-narrow--gap-20___EI1Lr{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-narrow--gap-24___eCYeX{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-narrow--gap-28___lFWdB{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-narrow--gap-32___OvuFF{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-narrow--gap-36___iDp6W{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-narrow--gap-40___nCuFr{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-narrow--gap-44___aAL4O{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-narrow--gap-48___NmFRy{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-narrow--gap-60___gC89b{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-narrow--gap-64___zmJsB{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-narrow--gap-80___PZ_rn{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-narrow--gap-88___jCo0m{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-narrow--gap-96___lmTUq{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-narrow--gap-112___WsPB0{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-narrow--gap-128___gWyum{gap:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--gap-none____ZDEx{gap:0}.Primer_Brand__Stack-module__Stack-regular--gap-condensed___ZYYsD{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack-regular--gap-normal___dRchQ{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack-regular--gap-spacious___oMqRv{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack-regular--gap-4___S08kR{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-regular--gap-8___TtKx9{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-regular--gap-12___hzuKq{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-regular--gap-16___o7HsO{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-regular--gap-20___QDl67{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-regular--gap-24___CweJ8{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-regular--gap-28___Ud6HO{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-regular--gap-32___pua20{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-regular--gap-36___q_Cjl{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-regular--gap-40___cZw83{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-regular--gap-44___EzLI4{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-regular--gap-48___IECRy{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-regular--gap-60___BuFRm{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-regular--gap-64___Jiu59{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-regular--gap-80___f0xxA{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-regular--gap-88___p830y{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-regular--gap-96___BYfZt{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-regular--gap-112___VFbdf{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-regular--gap-128___o25ih{gap:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-regular--padding-none____wmhn{padding:0}.Primer_Brand__Stack-module__Stack-regular--padding-condensed___WxLyH{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack-regular--padding-normal___oKpGh{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack-regular--padding-spacious___pL7HW{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack-regular--padding-4___g1MlZ{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-regular--padding-8___MV9gV{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-regular--padding-12___U43Fw{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-regular--padding-16___KvH6B{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-regular--padding-20___eppyK{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-regular--padding-24___vtwRC{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-regular--padding-28___nTiOJ{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-regular--padding-32___I5REZ{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-regular--padding-36___WS1K6{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-regular--padding-40___JMmOa{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-regular--padding-44____aK4u{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-regular--padding-48___oQ2EH{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-regular--padding-60___iStI8{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-regular--padding-64___lVIL3{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-regular--padding-80___iDn3V{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-regular--padding-88___ugAjz{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-regular--padding-96___a2rM5{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-regular--padding-112___iIwN_{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-regular--padding-128___CNuPG{padding:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--gap-none___V9yZQ{gap:0}.Primer_Brand__Stack-module__Stack-wide--gap-condensed___TB7xm{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack-wide--gap-normal___Et9_A{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack-wide--gap-spacious___WXQyb{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack-wide--gap-4___jztrv{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-wide--gap-8___qaywr{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-wide--gap-12___bCgki{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-wide--gap-16___V0Ly_{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-wide--gap-20___lcLAk{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-wide--gap-24___H0crZ{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-wide--gap-28___IVObp{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-wide--gap-32___HXuJZ{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-wide--gap-36___nP2T_{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-wide--gap-40___NfVDb{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-wide--gap-44___bqym2{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-wide--gap-48___M3ciy{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-wide--gap-60___X9p2c{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-wide--gap-64___x2ZRh{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-wide--gap-80___OKRwQ{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-wide--gap-88___OXC9b{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-wide--gap-96___piUPg{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-wide--gap-112___s5WKM{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-wide--gap-128___JJ87b{gap:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-wide--padding-none___GEcfF{padding:0}.Primer_Brand__Stack-module__Stack-wide--padding-condensed___heIOO{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack-wide--padding-normal___Pdr2C{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack-wide--padding-spacious___d_AmA{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack-wide--padding-4___a4P38{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-wide--padding-8___JPU6G{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-wide--padding-12___neDmy{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-wide--padding-16___Cj2BV{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-wide--padding-20___lPynX{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-wide--padding-24___Ypw7V{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-wide--padding-28___k80vm{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-wide--padding-32___SHTUT{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-wide--padding-36___iWSDo{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-wide--padding-40___qk1Hg{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-wide--padding-44___a8DV4{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-wide--padding-48___yc5OP{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-wide--padding-60___JHhf2{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-wide--padding-64____opnu{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-wide--padding-80___c5WnH{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-wide--padding-88___cQ0Vq{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-wide--padding-96___xJjZt{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-wide--padding-112___xmuIf{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-wide--padding-128___OV3zg{padding:var(--base-size-128)}}.Primer_Brand__Stack-module__Stack--align-items-flex-end___cJG6k{align-items:flex-end}.Primer_Brand__Stack-module__Stack--align-items-flex-start___Vh1Ca{align-items:flex-start}.Primer_Brand__Stack-module__Stack--align-items-center___xWKxj{align-items:center}.Primer_Brand__Stack-module__Stack-narrow--align-items-flex-end___bXiXc{align-items:flex-end}.Primer_Brand__Stack-module__Stack-narrow--align-items-flex-start___eBtSy{align-items:flex-start}.Primer_Brand__Stack-module__Stack-narrow--align-items-center___jZIXU{align-items:center}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--align-items-flex-end___JlKOr{align-items:flex-end}.Primer_Brand__Stack-module__Stack-regular--align-items-flex-start___jusm2{align-items:flex-start}.Primer_Brand__Stack-module__Stack-regular--align-items-center___tY013{align-items:center}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--align-items-flex-end___z5xxr{align-items:flex-end}.Primer_Brand__Stack-module__Stack-wide--align-items-flex-start___QKRoP{align-items:flex-start}.Primer_Brand__Stack-module__Stack-wide--align-items-center___DUG9C{align-items:center}}.Primer_Brand__Stack-module__Stack--justify-content-flex-end___mp2Ka{justify-content:flex-end}.Primer_Brand__Stack-module__Stack--justify-content-flex-start___VIkHJ{justify-content:flex-start}.Primer_Brand__Stack-module__Stack--justify-content-center___uZGXl{justify-content:center}.Primer_Brand__Stack-module__Stack--justify-content-space-between___r8E3d{justify-content:space-between}.Primer_Brand__Stack-module__Stack--justify-content-space-evenly___G1eGw{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack--justify-content-space-around___kqm4D{justify-content:space-around}.Primer_Brand__Stack-module__Stack-narrow--justify-content-flex-end___QUDo3{justify-content:flex-end}.Primer_Brand__Stack-module__Stack-narrow--justify-content-flex-start___fNLJd{justify-content:flex-start}.Primer_Brand__Stack-module__Stack-narrow--justify-content-center___kdlmI{justify-content:center}.Primer_Brand__Stack-module__Stack-narrow--justify-content-space-between___w7Ki5{justify-content:space-between}.Primer_Brand__Stack-module__Stack-narrow--justify-content-space-evenly___ntQwA{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack-narrow--justify-content-space-around___NHZVk{justify-content:space-around}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--justify-content-flex-end___B0xmt{justify-content:flex-end}.Primer_Brand__Stack-module__Stack-regular--justify-content-flex-start___DtA1j{justify-content:flex-start}.Primer_Brand__Stack-module__Stack-regular--justify-content-center___oEcdF{justify-content:center}.Primer_Brand__Stack-module__Stack-regular--justify-content-space-between___F1gqO{justify-content:space-between}.Primer_Brand__Stack-module__Stack-regular--justify-content-space-evenly___xZdXl{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack-regular--justify-content-space-around___nSDM4{justify-content:space-around}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--justify-content-flex-end___Hztn5{justify-content:flex-end}.Primer_Brand__Stack-module__Stack-wide--justify-content-flex-start___gnhnO{justify-content:flex-start}.Primer_Brand__Stack-module__Stack-wide--justify-content-center___XxA7G{justify-content:center}.Primer_Brand__Stack-module__Stack-wide--justify-content-space-between___HEm_x{justify-content:space-between}.Primer_Brand__Stack-module__Stack-wide--justify-content-space-evenly___Hgs5B{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack-wide--justify-content-space-around___B30C2{justify-content:space-around}}.Primer_Brand__Stack-module__Stack-flexWrap--wrap___oHt4z{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-flexWrap--no-wrap___bGR_x{flex-wrap:nowrap}.Primer_Brand__Stack-module__Stack-narrow-flexWrap--wrap___fnS6A{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-narrow-flexWrap--no-wrap___DYcBz{flex-wrap:nowrap}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular-flexWrap--wrap___hwBqs{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-regular-flexWrap--no-wrap___Y8wyw{flex-wrap:nowrap}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide-flexWrap--wrap___i9hAC{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-wide-flexWrap--no-wrap___C__JU{flex-wrap:nowrap}}.Primer_Brand__Box-module__Box-padding--condensed___moOU_{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-padding--normal___I99VZ{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-padding--spacious___IDH0L{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-padding--none___SiKZE{padding:0}.Primer_Brand__Box-module__Box-padding--4___P8ym4{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-padding--8___tkmC2{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-padding--12___WZtC5{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-padding--16___uSvFs{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-padding--20___CqPHd{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-padding--24___ns6vt{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-padding--28___C3Z0M{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-padding--32___Xi9K8{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-padding--36___elDVr{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-padding--40___FiQOK{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-padding--44___pcGzC{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-padding--48___sKAhw{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-padding--60___aeyGV{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-padding--64___eD0xN{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-padding--80___Ny1Eo{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-padding--88___yPev4{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-padding--96___vQxms{padding:var(--base-size-96)}.Primer_Brand__Box-module__Box-padding--112___UKjfn{padding:var(--base-size-112)}.Primer_Brand__Box-module__Box-padding--128___eM3cZ{padding:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-padding--condensed___anAAR{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-padding--normal___drqoL{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-padding--spacious___JblB1{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-padding--none___Ee52O{padding:0}.Primer_Brand__Box-module__Box-narrow-padding--4___gcJCt{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-padding--8___a7q08{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-padding--12___aaFXk{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-padding--16___jdlkw{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-padding--20___O5D_M{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-padding--24___lyefS{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-padding--28___TwWF_{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-padding--32___fPqRw{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-padding--36___IjUkb{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-padding--40___pxXrQ{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-padding--44___MCitQ{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-padding--48___TYalO{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-padding--60___GCUuJ{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-padding--64___DfG4r{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-padding--80___aM_tb{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-padding--88___RAwuQ{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-padding--96___AAjgj{padding:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-padding--condensed___Sa56q{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-padding--normal___kPK0N{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-padding--spacious___eg7WK{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-padding--none___RqmqL{padding:0}.Primer_Brand__Box-module__Box-regular-padding--4___Hrlt7{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-padding--8___S4Vzp{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-padding--12___aqPhA{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-padding--16___dspf1{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-padding--20___je3L4{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-padding--24___BRWrO{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-padding--28___MLuWu{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-padding--32___UuJR3{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-padding--36___pnnlM{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-padding--40___KvG6x{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-padding--44___QbfqE{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-padding--48___o68vT{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-padding--60___w5Ah3{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-padding--64___VXnt9{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-padding--80___sCKZd{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-padding--88___rtS6L{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-padding--96___MjgI_{padding:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-padding--112___uyz9m{padding:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-padding--128___a3PIs{padding:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-padding--condensed___G1jXL{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-padding--normal___tIQlq{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-padding--spacious___PGhNc{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-padding--none___qcMjk{padding:0}.Primer_Brand__Box-module__Box-wide-padding--4___aySqW{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-padding--8___cPNFj{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-padding--12___OUxUa{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-padding--16___IIZ2x{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-padding--20___IMkXv{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-padding--24___Jqf0K{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-padding--28___qJoHf{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-padding--32___QiAzQ{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-padding--36___HliwM{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-padding--40___ebzR0{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-padding--44___kxHFt{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-padding--48___VI8OS{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-padding--60___aDgU_{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-padding--64___ZIZly{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-padding--80___Pm5Do{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-padding--88___fj9YB{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-padding--96___cdgwB{padding:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-padding--112___xnULq{padding:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-padding--128___Cd7wM{padding:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingBlockStart--condensed___W1bY3{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingBlockStart--normal___Zg_Os{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingBlockStart--spacious___ViXP1{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingBlockStart--none___OMRh1{padding-block-start:0}.Primer_Brand__Box-module__Box-paddingBlockStart--4___dVFMa{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingBlockStart--8___TNzCC{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingBlockStart--12___QFOW7{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingBlockStart--16___ZVevq{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingBlockStart--20___BIULn{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingBlockStart--24___W0xXx{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingBlockStart--28___cfKdr{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingBlockStart--32___nFZZ8{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingBlockStart--36___c5djO{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingBlockStart--40___vX8Fj{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingBlockStart--44___gHVxS{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingBlockStart--48___dATiV{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingBlockStart--60___iBaCb{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingBlockStart--64___GC9HQ{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingBlockStart--80___AzNIY{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingBlockStart--88___mlghT{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingBlockStart--96___eirfv{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingBlockStart--112___WErQC{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingBlockStart--128___PQBNx{padding-block-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--condensed___TpPWY{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--normal___WoejX{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--spacious___YGOfc{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--none___rBPCn{padding-block-start:0}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--4___pKCVF{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--8___Mno90{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--12___o4TBL{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--16___e1SBw{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--20___n1NNi{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--24___uZOxT{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--28___m2mO9{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--32___qReqY{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--36___FeGVX{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--40___NWdbk{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--44___xUghA{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--48___QXRZC{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--60___Q10gK{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--64___xkgoO{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--80___VP_yD{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--88___rCE4P{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--96___DwVjV{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--112___KR3bh{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--128___sY3Vs{padding-block-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingBlockStart--condensed____4rsh{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--normal___D08eA{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--spacious___ANm3m{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--none___gWbHQ{padding-block-start:0}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--4___hDJd4{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--8___sMD28{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--12___vUJnn{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--16___N8Zxa{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--20___BsEXk{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--24___AI2B1{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--28___OZFGX{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--32___viH7U{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--36___E6h7E{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--40___qZE9d{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--44___mveRI{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--48___HcGS_{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--60___h0JrH{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--64___nx8cK{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--80___ld1du{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--88___lU6HN{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--96___BOrMI{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--112___OpuYq{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--128___Gp33i{padding-block-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingBlockStart--condensed___PXi4I{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--normal___GnoL0{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--spacious___krfm9{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--none___Y9qJB{padding-block-start:0}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--4___Zryv_{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--8___u5PHy{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--12___U5Ofg{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--16___ZBJ3Y{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--20___pAFgx{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--24___MEQNA{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--28___dNYbO{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--32___ohjFs{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--36___nZoBT{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--40___ak06g{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--44___o7t7i{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--48___XERud{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--60___DB6D9{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--64___c4HWW{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--80___IQUjF{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--88___sNl4k{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--96___ziRgY{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--112___kU2x1{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--128___nWESD{padding-block-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingInlineEnd--condensed___eOQgc{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingInlineEnd--normal___iaaKM{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingInlineEnd--spacious___QRkuj{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingInlineEnd--none___zgwVT{padding-inline-end:0}.Primer_Brand__Box-module__Box-paddingInlineEnd--4___QYTSr{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingInlineEnd--8___qOjp8{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingInlineEnd--12___ki7vg{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingInlineEnd--16___eBvli{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingInlineEnd--20___fUBLQ{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingInlineEnd--24___qvm6U{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingInlineEnd--28___RLJPP{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingInlineEnd--32___rmFsu{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingInlineEnd--36___eD4ie{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingInlineEnd--40___Pa_hU{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingInlineEnd--44___ISq6N{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingInlineEnd--48____6VIs{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingInlineEnd--60___nSk0c{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingInlineEnd--64___XEdic{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingInlineEnd--80___ro2Q6{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingInlineEnd--88____tOlK{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingInlineEnd--96___VGzUa{padding-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingInlineEnd--112___u399j{padding-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingInlineEnd--128___XCfRF{padding-inline-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--condensed___tbVph{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--normal___J14DR{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--spacious___XYmJk{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--none____Uy0e{padding-inline-end:0}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--4___LCky2{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--8___s737E{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--12___F2fc4{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--16___hCEUi{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--20___moqMn{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--24___nUtP0{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--28___GoW1H{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--32___kE8pF{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--36___zUIaG{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--40___U_LUs{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--44___HfR2e{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--48___VpyWJ{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--60___M439R{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--64____U2Bb{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--80___xLRwJ{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--88___venIk{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--96___lz9Ah{padding-inline-end:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--condensed___Y3PpC{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--normal___uQZJL{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--spacious___Yg_oy{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--none___d07JU{padding-inline-end:0}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--4____Mu6j{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--8___KLTjM{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--12___MZaFD{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--16___zuYxe{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--20___X7kQ7{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--24___OLwfl{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--28___S8g3g{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--32___fOGZt{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--36___Gsz4A{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--40___beKbG{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--44___Fbir5{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--48___JLuQO{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--60___RhhLC{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--64___j2pqZ{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--80____2Wqx{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--88___DFSeP{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--96___VLntF{padding-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--112___fkEpY{padding-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--128___gQRRw{padding-inline-end:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--condensed___Qcd9O{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--normal___RCW25{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--spacious___l9ArL{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--none___l9mTk{padding-inline-end:0}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--4___Po8UR{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--8___JogoU{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--12___mTBkP{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--16___yWWxx{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--20___Ho0IF{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--24___eQFrc{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--28___NDHpo{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--32___W5qHl{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--36___GjFzC{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--40___waIcY{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--44___JOSMH{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--48___pI6_m{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--60___ed3T2{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--64___D6UgI{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--80___A72UQ{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--88___DE0O8{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--96___JZowF{padding-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--112___fAjZM{padding-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--128___V6AHo{padding-inline-end:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingBlockEnd--condensed___dEYMv{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingBlockEnd--normal___85pec{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingBlockEnd--spacious___LGfk7{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingBlockEnd--none____vlh7{padding-block-end:0}.Primer_Brand__Box-module__Box-paddingBlockEnd--4____i2UO{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingBlockEnd--8___bNx7n{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingBlockEnd--12____EOsG{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingBlockEnd--16___wkJ99{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingBlockEnd--20___xjcqw{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingBlockEnd--24___NFG9h{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingBlockEnd--28___u7XJS{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingBlockEnd--32___zjWVZ{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingBlockEnd--36___f12Tl{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingBlockEnd--40___j6T9R{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingBlockEnd--44___gl2rH{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingBlockEnd--48___OcWnm{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingBlockEnd--60___T7psX{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingBlockEnd--64___dSBrT{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingBlockEnd--80___Sbcpv{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingBlockEnd--88___tspXM{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingBlockEnd--96___eMrZV{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingBlockEnd--112___ty2_p{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingBlockEnd--128___H35FY{padding-block-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--condensed___QTO1y{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--normal___MupAF{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--spacious____jivs{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--none___xwpBe{padding-block-end:0}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--4___g4hDY{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--8___dhfNf{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--12___fLDtZ{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--16___BHuqq{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--20___JI4SX{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--24___s1eco{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--28___g6wCx{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--32___wycVg{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--36___wjt4p{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--40___rVjJV{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--44___akvlZ{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--48___OPwru{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--60___zRr4T{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--64___icCAb{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--80___Y_JGc{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--88___dl3rO{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--96___ojJIp{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--112___pKYyd{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--128___oI5vn{padding-block-end:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--condensed___iiMOv{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--normal___J5glu{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--spacious___Qbwlq{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--none___D1NkR{padding-block-end:0}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--4___TL1oP{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--8___pKg9P{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--12___UBth1{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--16___LKRrT{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--20___mRbHZ{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--24___il8K_{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--28___ZmE1R{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--32____C9RT{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--36___nocbv{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--40___nsz4g{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--44___bsz6J{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--48___eApXN{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--60___FR7Cn{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--64___ATo_6{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--80___HuPNm{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--88___axhPf{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--96___QWDd0{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--112___Ql_U3{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--128___R4xJd{padding-block-end:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--condensed___fKrol{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--normal___Kbldz{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--spacious___zbi5h{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--none___rVFoE{padding-block-end:0}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--4___YjBbR{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--8___CpDlD{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--12___cjNk6{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--16___PKo6_{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--20___bNtXr{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--24___o8_OD{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--28___zR53L{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--32___xX0KK{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--36___KeAYu{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--40___FUROs{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--44___nWycQ{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--48___J4Ljw{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--60___YiIwB{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--64___pbSxt{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--80___wJtUa{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--88___M2vDM{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--96___Uq5AZ{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--112___B96UD{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--128___GcJ48{padding-block-end:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingInlineStart--condensed___rq2fI{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingInlineStart--normal___BmKv4{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingInlineStart--spacious___rk6ci{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingInlineStart--none___zXxYO{padding-inline-start:0}.Primer_Brand__Box-module__Box-paddingInlineStart--4___XP6SF{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingInlineStart--8___OBQ5l{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingInlineStart--12___F1XBU{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingInlineStart--16___QesGK{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingInlineStart--20___xOS1A{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingInlineStart--24___moDQ8{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingInlineStart--28___KBIxR{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingInlineStart--32___nVH6P{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingInlineStart--36___VqmhW{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingInlineStart--40___DXgBn{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingInlineStart--44___Bulbu{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingInlineStart--48___x5m9Q{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingInlineStart--60___Iprl6{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingInlineStart--64___WUgUO{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingInlineStart--80___Kn2gO{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingInlineStart--88___kWkOB{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingInlineStart--96___B2qkH{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingInlineStart--112___v4yZC{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingInlineStart--128___aafEk{padding-inline-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--condensed___YI9Eh{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--normal___iqKMr{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--spacious___O1i9G{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--none___pGKmW{padding-inline-start:0}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--4___pS_Gh{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--8___F6dKN{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--12___Ci8GO{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--16___fkZ4s{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--20___tRwV3{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--24___uVuT2{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--28___ueTAO{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--32___e1dD1{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--36___kPOzQ{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--40___ekOE3{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--44___nALOu{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--48___cg27m{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--60___CwVSc{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--64___PBLfw{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--80___Mv5eX{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--88___QTgm8{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--96___W7uL8{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--112___qXECF{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--128___tBlKZ{padding-inline-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingInlineStart--condensed___K1JTe{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--normal___hE24G{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--spacious___Y3FYm{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--none___rA7QC{padding-inline-start:0}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--4___ffJtu{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--8___K3PDT{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--12___ZI1Zt{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--16___pSuDM{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--20___J_Lac{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--24___olfR2{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--28___u3Jxq{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--32___j8YOd{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--36___ioVRd{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--40___CZDsm{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--44___eBvKb{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--48___JdZPY{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--60___gyHKL{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--64___GGNhi{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--80___oqP9L{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--88___dCPPv{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--96___XT27R{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--112___MFUWm{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--128___lfSNz{padding-inline-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingInlineStart--condensed___p04xa{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--normal___fUsFX{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--spacious___Sqsw2{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--none___Nv0wp{padding-inline-start:0}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--4___nVn_B{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--8___wLVn9{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--12___rnbWe{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--16___lhOME{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--20___ULYpU{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--24___HVDrv{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--28___CDihC{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--32___Wq77T{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--36___tCHNn{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--40___Yfoos{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--44___GIxDS{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--48___GlLkg{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--60___nBbo0{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--64___EVzB4{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--80___F366d{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--88___yrcrw{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--96___jvQgf{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--112___Z_i9M{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--128___dxJ4W{padding-inline-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-margin--condensed___t8Ura{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-margin--normal___ZVHSh{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-margin--spacious___j0gGh{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-margin--none___x7HE0{margin:0}.Primer_Brand__Box-module__Box-margin--4___SAGHe{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-margin--8___rwesA{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-margin--12___olT6x{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-margin--16___bf8KF{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-margin--20___eRoV_{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-margin--24___pFF57{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-margin--28___EGGCf{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-margin--32___piqFe{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-margin--36___xujLX{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-margin--40___75KiU{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-margin--44___eoeZ9{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-margin--48___RveUf{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-margin--60___A8h1D{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-margin--64___U6GY0{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-margin--80___VXJ1m{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-margin--88___dr4BK{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-margin--96___W5lUS{margin:var(--base-size-96)}.Primer_Brand__Box-module__Box-margin--112___CMH1O{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-margin--128___chyQh{margin:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-margin--condensed____oxX7{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-margin--normal___XezR0{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-margin--spacious___g6g0f{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-margin--none___POgbx{margin:0}.Primer_Brand__Box-module__Box-narrow-margin--4___Q2uQ_{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-margin--8___rBgr8{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-margin--12___iI8JN{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-margin--16____6lfa{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-margin--20___eP512{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-margin--24___WRxp2{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-margin--28___Go_go{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-margin--32___ZywhO{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-margin--36___I5ZXC{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-margin--40___LLwK7{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-margin--44____tEzU{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-margin--48___isJ89{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-margin--60___GhiZZ{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-margin--64___L0c0n{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-margin--80___vvJ9F{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-margin--88____rLH2{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-margin--96___lp2Ry{margin:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-margin--112___a5t03{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-margin--128___P5b03{margin:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-margin--condensed___Caa8r{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-margin--normal___KdX5O{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-margin--spacious___mG0NN{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-margin--none____xN9L{margin:0}.Primer_Brand__Box-module__Box-regular-margin--4___J8A2t{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-margin--8___iSM8W{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-margin--12___jqgj2{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-margin--16___UkF2r{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-margin--20___QOTe2{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-margin--24___g6Kqw{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-margin--28___rycHv{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-margin--32___mqhOH{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-margin--36___WB582{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-margin--40___ZtXXm{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-margin--44___WzwUP{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-margin--48___AI_QF{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-margin--60___srQSO{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-margin--64___feT35{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-margin--80___RT7fB{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-margin--88___Q182S{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-margin--96___Rvbjm{margin:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-margin--112___A6xDo{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-margin--128___kHwQC{margin:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-margin--condensed___Uj_ap{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-margin--normal___o0WKl{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-margin--spacious___Fmgze{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-margin--none___RuZOH{margin:0}.Primer_Brand__Box-module__Box-wide-margin--4___dGG0a{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-margin--8___VEXWc{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-margin--12___sqf5U{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-margin--16___DTrBi{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-margin--20___dlbWa{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-margin--24___L_Aj9{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-margin--28___Vjv_a{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-margin--32___GECyy{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-margin--36___PWhqP{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-margin--40___vemke{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-margin--44___Ennon{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-margin--48___MkKEg{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-margin--60___WPJsx{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-margin--64___vYLMh{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-margin--80___I3XVP{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-margin--88___Tlgzv{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-margin--112___HsLag{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-margin--128___v9LVz{margin:var(--base-size-128)}}.Primer_Brand__Box-module__Box-marginBlockStart--condensed___bTE8Q{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginBlockStart--normal___wUotH{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginBlockStart--spacious___EOasI{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginBlockStart--none___iS0_r{margin-block-start:0}.Primer_Brand__Box-module__Box-marginBlockStart--4___ZxS80{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginBlockStart--8___RPhvf{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginBlockStart--12___Dw4MT{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginBlockStart--16___plaHc{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginBlockStart--20___gqeBE{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginBlockStart--24___puxKK{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginBlockStart--28___X08BZ{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginBlockStart--32___pWodO{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginBlockStart--36___v5wHR{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginBlockStart--40___hq_Nv{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginBlockStart--44___uLLSf{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginBlockStart--48___S_MhS{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginBlockStart--60___0Lb4o{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginBlockStart--64___oLHvC{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginBlockStart--80___Q0HsD{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginBlockStart--88___T0gdB{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginBlockStart--96___MqNC0{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginBlockStart--112___j68wy{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginBlockStart--128___mzbEa{margin-block-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--condensed___QUr7S{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--normal___jTtqc{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--spacious___O2UPE{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--none___vMaok{margin-block-start:0}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--4___t9ZC4{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--8___ZsShH{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--12___eaiGT{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--16___ViXmT{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--20___Y_3F2{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--24___fQcVJ{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--28___Pi7Wt{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--32___fWuQe{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--36___IK1Mg{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--40___GbLEW{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--44___J8fNf{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--48___foZDz{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--60___xlE0n{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--64___AU4LW{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--80___PMcaT{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--88___RQRKe{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--96___mYSKK{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--112___tW2zB{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--128___p0QMw{margin-block-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginBlockStart--condensed___rp3ys{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--normal___SPLfG{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--spacious___fq56Y{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--none___KYSzT{margin-block-start:0}.Primer_Brand__Box-module__Box-regular-marginBlockStart--4___Uv8gl{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--8___jnZgW{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--12___fCXkQ{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--16___Z9p0d{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--20___E559T{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--24___CjRGa{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--28___VwKD6{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--32___eskz2{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--36___s1z4f{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--40___QXz1n{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--44___OSyKv{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--48___qNEcn{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--60___nhnZh{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--64___Y0G5A{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--80___BlU1a{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--88___nSxLP{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--96___ZD_SH{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--112___GVoQX{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--128___TFhvb{margin-block-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginBlockStart--condensed___mqYho{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--normal___c81Vf{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--spacious___gD8F4{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--none___o5UYw{margin-block-start:0}.Primer_Brand__Box-module__Box-wide-marginBlockStart--4___k48Xj{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--8___EmewZ{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--12___Xxtk6{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--16___NYL3P{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--20___W9gU2{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--24___lMuAD{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--28___FT3Mf{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--32___dlVS5{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--36___ZCOj2{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--40___rEDpG{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--44___DGFwo{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--48___WRSPh{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--60___OWBYp{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--64___ZueKk{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--80___TA3IX{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--88___eU6Uu{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--96___trWhE{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--112___M351c{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--128___I90P4{margin-block-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-marginInlineEnd--condensed___EVJUU{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginInlineEnd--normal___AdtDi{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginInlineEnd--spacious___rqfRo{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginInlineEnd--none___cJZUG{margin-inline-end:0}.Primer_Brand__Box-module__Box-marginInlineEnd--4___CmFW9{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginInlineEnd--8___9dSA9{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginInlineEnd--12___uJExr{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginInlineEnd--16___dw6kz{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginInlineEnd--20___qfURL{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginInlineEnd--24___Q353Q{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginInlineEnd--28___fQ3mR{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginInlineEnd--32___bruVR{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginInlineEnd--36___knq3Z{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginInlineEnd--40___iZcVw{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginInlineEnd--44___GKLwd{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginInlineEnd--48___i5HE8{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginInlineEnd--60___KIgH3{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginInlineEnd--64___C5Tp6{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginInlineEnd--80___j058F{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginInlineEnd--88___dzYTi{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginInlineEnd--96___YGHeA{margin-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginInlineEnd--112___It02k{margin-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginInlineEnd--128___S5_Lm{margin-inline-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--condensed___QlOtm{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--normal____4LoS{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--spacious___ESjqc{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--none___LYYdL{margin-inline-end:0}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--4___j15Se{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--8___ivk9J{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--12___InPz1{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--16___UZzSI{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--20___AOZlY{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--24___uMFom{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--28___P312F{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--32___NfeGi{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--36___iU_kf{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--40___lme45{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--44___lUlZs{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--48___sUFp9{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--60___NOyzc{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--64___BtND9{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--80____4Pas{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--88___uL4kN{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--96___gtx55{margin-inline-end:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginInlineEnd--condensed___BCcsA{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--normal___silfR{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--spacious___sjnml{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--none___W0mRJ{margin-inline-end:0}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--4___dn_Re{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--8___VFtdE{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--12___k07gg{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--16___OOs0G{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--20___fsTtM{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--24___uOaQI{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--28___FbHfF{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--32___Ukveq{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--36___M92aJ{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--40____e3SN{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--44___UEAQj{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--48___ei98i{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--60___tipua{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--64___PIZxy{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--80___lnDcp{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--88___BPqAI{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--96___aRTvT{margin-inline-end:var(--base-size-96)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginInlineEnd--condensed___QoI21{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--normal___HNliJ{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--spacious___X8NXv{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--none___JwlqX{margin-inline-end:0}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--4___sWBPo{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--8___kacX3{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--12___uQT7v{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--16___n01ap{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--20___X4OVV{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--24___AJ1ri{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--28___E5VbM{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--32___ypePn{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--36___gmvEm{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--40___r90G7{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--44___Q4G5c{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--48___z9Lmw{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--60___TTkKW{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--64___F57r_{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--80___E0tJe{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--88___v8a26{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--96___pUCiy{margin-inline-end:var(--base-size-96)}}.Primer_Brand__Box-module__Box-marginBlockEnd--condensed___yZSjt{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginBlockEnd--normal___BkMQg{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginBlockEnd--spacious___Jjk8D{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginBlockEnd--none___q_Aov{margin-block-end:0}.Primer_Brand__Box-module__Box-marginBlockEnd--4___uZDEK{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginBlockEnd--8___dx_JW{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginBlockEnd--12___kgVMq{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginBlockEnd--16___N2MVF{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginBlockEnd--20___aX_J0{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginBlockEnd--24___RTiyC{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginBlockEnd--28___jhXpG{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginBlockEnd--32___W5xYE{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginBlockEnd--36___cj9Vj{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginBlockEnd--40___ewAlH{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginBlockEnd--44___ZxEv_{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginBlockEnd--48___zt2OJ{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginBlockEnd--60___c2uN1{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginBlockEnd--64___a6txk{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginBlockEnd--80___EZyqj{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginBlockEnd--88___nMO9c{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginBlockEnd--96___Lbz6K{margin-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginBlockEnd--112___oSXen{margin-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginBlockEnd--128___zrQ7e{margin-block-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--condensed___Tltof{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--normal___ShWay{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--spacious___LV3s_{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--none___CBZnh{margin-block-end:0}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--4___CtSfn{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--8___Y45AZ{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--12___c87Ua{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--16___XP5Uw{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--20___p3Udz{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--24___oh65t{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--28___trRzs{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--32___qYFHR{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--36___mV2L1{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--40___taWN_{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--44___q5psW{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--48___u5_N1{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--60___znsW7{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--64___iRYFP{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--80___h7LUD{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--88___mBsMQ{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--96___TcQuV{margin-block-end:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginBlockEnd--condensed___nz4bt{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--normal___PDHRc{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--spacious___l348T{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--none___KZ8GC{margin-block-end:0}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--4___xY73v{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--8___BUGRd{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--12___FKbqC{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--16___EkpkB{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--20___j3pUk{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--24___gnnxL{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--28___tHNzb{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--32___XIqmt{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--36___blLjI{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--40___V9Sxn{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--44___xMsFn{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--48___pdAjC{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--60___km_JN{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--64___uLUtn{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--80___OlgXb{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--88___vClp9{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--96____imff{margin-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--112___NDi61{margin-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--128___GUa4G{margin-block-end:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginBlockEnd--condensed___UBH5e{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--normal___Bi1K6{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--spacious___fC5ai{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--none___k2UfA{margin-block-end:0}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--4___qjlqV{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--8___jhRo2{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--12___UmBRd{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--16___GfSQm{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--20___D4t78{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--24___Vokvc{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--28___l4an3{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--32___iAcDG{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--36___uWsmR{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--40___DlDrK{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--44___c9aSx{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--48___X5ONp{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--60___ZNOYi{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--64___FOyXs{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--80___Jqalb{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--88___G6Art{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--96___gjf5z{margin-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--112___ddfRk{margin-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--128___ESEm8{margin-block-end:var(--base-size-128)}}.Primer_Brand__Box-module__Box-marginInlineStart--condensed___IBp_X{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginInlineStart--normal___BHhHI{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginInlineStart--spacious___ZtXj1{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginInlineStart--none___fdOWF{margin-inline-start:0}.Primer_Brand__Box-module__Box-marginInlineStart--4___Wn1Ko{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginInlineStart--8___pDo7p{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginInlineStart--12___TQxPD{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginInlineStart--16___J7y4b{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginInlineStart--20___ISuSe{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginInlineStart--24___IrW9d{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginInlineStart--28___xff1V{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginInlineStart--32___HQOmB{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginInlineStart--36___WdZwx{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginInlineStart--40___R3wYL{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginInlineStart--44___wwo_O{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginInlineStart--48___zdJZg{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginInlineStart--60___gPgQr{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginInlineStart--64___NHk5d{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginInlineStart--80___D1Kto{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginInlineStart--88___SqBcU{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginInlineStart--96___Cy8gp{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginInlineStart--112___UVHJh{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginInlineStart--128___rYSy2{margin-inline-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--condensed___LrhcU{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--normal___yjn7b{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--spacious___D_nVs{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--none___pHChO{margin-inline-start:0}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--4___zqjtT{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--8___JQCG0{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--12___Uh4UZ{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--16___XZ8ZR{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--20___YbDKP{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--24___FNxOe{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--28___rMktN{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--32___tbEiO{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--36___uVdgf{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--40___LJia9{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--44___KmENz{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--48___zoftL{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--60___SWHzH{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--64___iwJE7{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--80___cekgc{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--88___bFGTa{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--96___J9dFk{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--112___ij9Sp{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--128___YmYWV{margin-inline-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginInlineStart--condensed___b3jtW{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--normal___Afnyr{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--spacious___T94RJ{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--none___dMyhc{margin-inline-start:0}.Primer_Brand__Box-module__Box-regular-marginInlineStart--4____RoBu{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--8___HIT7W{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--12___GKnNE{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--16___zvb7s{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--20___TyM9P{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--24___FR9ti{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--28___cImoh{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--32___uzbKA{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--36___KDLC7{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--40___WtED9{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--44___T1yz0{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--48___RDHdq{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--60___MVbk9{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--64___sswJ8{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--80___V9k8f{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--88___Xo4dd{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--96___MRqfB{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--112___g0s1Q{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--128___txGNr{margin-inline-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginInlineStart--condensed___d78eT{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--normal___KvxjM{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--spacious___ttmF3{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--none___Ygvgs{margin-inline-start:0}.Primer_Brand__Box-module__Box-wide-marginInlineStart--4___k170X{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--8___dWDhU{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--12___j2X_6{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--16___tlIaR{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--20___tcnmb{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--24___faDE1{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--28___H0kuG{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--32___cEhsd{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--36___rotpN{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--40___a4Yp_{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--44___mAiW2{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--48___pJQ14{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--60___LZehP{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--64___yBVt2{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--80___UNM1_{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--88___xYk7j{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--96___ZVqGY{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--112___jFEAD{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--128___Ma3u7{margin-inline-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-backgroundColor--default___yHgTN{background-color:var(--brand-color-canvas-default)}.Primer_Brand__Box-module__Box-backgroundColor--inset___VVJ5E{background-color:var(--brand-color-canvas-inset)}.Primer_Brand__Box-module__Box-backgroundColor--subtle___G0wT9,.Primer_Brand__Box-module__Box-backgroundColor--overlay___R1w8K{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Box-module__Box-borderRadius--small___wqrhY{border-radius:var(--brand-borderRadius-small)}.Primer_Brand__Box-module__Box-borderRadius--medium___JB1YF{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Box-module__Box-borderRadius--large___CCcts{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Box-module__Box-borderRadius--xlarge___Efss7{border-radius:var(--brand-borderRadius-xlarge)}.Primer_Brand__Box-module__Box-borderRadius--full___NXuE7{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Box-module__Box-borderStyle--solid___ejOCw{border-style:solid;border-width:0}.Primer_Brand__Box-module__Box-borderStyle--none___GDHF9{border-style:none}.Primer_Brand__Box-module__Box-borderWidth--thin___Np1R8{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderWidth--thick___dp1_H{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderWidth--thicker___HPZHA{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderBlockStartWidth--thin___y3sZf{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderBlockStartWidth--thick___kV7nz{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderBlockStartWidth--thicker___lU32t{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderInlineEndWidth--thin___irPIY{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderInlineEndWidth--thick___OolZ3{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderInlineEndWidth--thicker___bxZek{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderBlockEndWidth--thin___aOdjf{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderBlockEndWidth--thick___ROxs5{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderBlockEndWidth--thicker___sED4_{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderInlineStartWidth--thin___A4ZPo{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderInlineStartWidth--thick___OelxP{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderInlineStartWidth--thicker___yWUW3{border-inline-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderWidth--none___Hy1LJ{border-width:0}.Primer_Brand__Box-module__Box-borderBlockStartWidth--none___U1tDw{border-block-start-width:0}.Primer_Brand__Box-module__Box-borderInlineEndWidth--none___K0Ey4{border-inline-end-width:0}.Primer_Brand__Box-module__Box-borderBlockEndWidth--none___U4vUs{border-block-end-width:0}.Primer_Brand__Box-module__Box-borderInlineStartWidth--none___R1fyF{border-inline-start-width:0}.Primer_Brand__Box-module__Box-narrow-borderWidth--none___wcZvW{border-width:0}.Primer_Brand__Box-module__Box-narrow-borderWidth--thin___uvzKl{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderWidth--thick___eCXhG{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderWidth--thicker___I_MYT{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--none___DzZns{border-block-start-width:0}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--thin___YCetR{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--thick___Xae6a{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--thicker___q7RoY{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--none___X45sx{border-inline-end-width:0}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--thin___jTAEO{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--thick___N4bpK{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--thicker___XP8q6{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--none___hKgwN{border-block-end-width:0}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--thin___uC5YX{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--thick___vfk5w{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--thicker___EjraB{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--none___zbWQ4{border-inline-start-width:0}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--thin___wwv_V{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--thick___PSJnX{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--thicker___Oji76{border-inline-start-width:var(--brand-borderWidth-thicker)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-borderWidth--none___v_4r3{border-width:0}.Primer_Brand__Box-module__Box-regular-borderWidth--thin___WJJ4_{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderWidth--thick___tAQPj{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderWidth--thicker____Mei9{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--none___WSh9e{border-block-start-width:0}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--thin___HDekH{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--thick___dKvYM{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--thicker___RzVQH{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--none___tpeE3{border-inline-end-width:0}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--thin___IDHa2{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--thick___ZP2wC{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--thicker___TWPKx{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--none____Cl_j{border-block-end-width:0}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--thin___CDAYH{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--thick___YAX3O{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--thicker___GqngV{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--none___rx6Yf{border-inline-start-width:0}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--thin___xkvhI{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--thick___lbQHo{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--thicker___HR4Nz{border-inline-start-width:var(--brand-borderWidth-thicker)}}@media screen and (width>=64rem){.Primer_Brand__Box-module__Box-wide-borderWidth--none___M7jW_{border-width:0}.Primer_Brand__Box-module__Box-wide-borderWidth--thin___xhh3v{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderWidth--thick___XGwFE{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderWidth--thicker___hVG5a{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--none___BZm7v{border-block-start-width:0}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--thin___dDKTT{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--thick___q0gtM{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--thicker___gBysF{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--none___VvuSn{border-inline-end-width:0}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--thin___RyHjJ{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--thick___ATGqg{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--thicker___RBeFn{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--none___ucisL{border-block-end-width:0}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--thin___yEtFX{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--thick___RG7PT{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--thicker___XpkDn{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--none___VywCc{border-inline-start-width:0}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--thin___q9saE{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--thick___gTJ8P{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--thicker___Y1S9l{border-inline-start-width:var(--brand-borderWidth-thicker)}}.Primer_Brand__Box-module__Box-borderColor--default___XVJKE{border-color:var(--brand-color-border-default)}.Primer_Brand__Box-module__Box-borderColor--muted___S3wPy{border-color:var(--brand-color-border-muted)}.Primer_Brand__Box-module__Box-borderColor--subtle___SnZYA{border-color:var(--brand-color-border-subtle)}.Primer_Brand__Text-module__Text___pecHN{font-family:var(--brand-body-fontFamily)}[data-color-mode=dark] .Primer_Brand__Text-module__Text--antialiased___fYDxq{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Text-module__Text--default___DChoE{color:var(--brand-color-text-default)}.Primer_Brand__Text-module__Text--muted___lTaVa{color:var(--brand-color-text-muted)}.Primer_Brand__Text-module__Text-font--mona-sans___GpzSG{font-family:var(--brand-body-fontFamily)}.Primer_Brand__Text-module__Text-font--hubot-sans___l0tzF{font-family:var(--brand-body-fontFamilyAlt)}.Primer_Brand__Text-module__Text-font--monospace___Mifnv{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__Text-module__Text--1000___j3rsl{font-weight:var(--brand-text-weight-1000);font-size:var(--brand-text-size-1000);line-height:var(--brand-text-lineHeight-1000);letter-spacing:var(--brand-text-letterSpacing-1000)}.Primer_Brand__Text-module__Text--900___Fo_yP{font-weight:var(--brand-text-weight-900);font-size:var(--brand-text-size-900);line-height:var(--brand-text-lineHeight-900);letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Text-module__Text--800___OdB5a{font-weight:var(--brand-text-weight-800);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800)}.Primer_Brand__Text-module__Text--700___cOggy{font-weight:var(--brand-text-weight-700);font-size:var(--brand-text-size-700);line-height:var(--brand-text-lineHeight-700);letter-spacing:var(--brand-text-letterSpacing-700)}.Primer_Brand__Text-module__Text--600___ThppA{font-weight:var(--brand-text-weight-600);font-size:var(--brand-text-size-600);line-height:var(--brand-text-lineHeight-600)}.Primer_Brand__Text-module__Text--500___orDRu{font-weight:var(--brand-text-weight-500);font-size:var(--brand-text-size-500);line-height:var(--brand-text-lineHeight-500)}.Primer_Brand__Text-module__Text--400___y7m4l{font-weight:var(--brand-text-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-text-lineHeight-400);letter-spacing:var(--brand-text-letterSpacing-400)}.Primer_Brand__Text-module__Text--350___L4bn4{font-weight:var(--brand-text-weight-350);font-size:var(--brand-text-size-350);line-height:var(--brand-text-lineHeight-350);letter-spacing:var(--brand-text-letterSpacing-350)}.Primer_Brand__Text-module__Text--300___TBQTB{font-weight:var(--brand-text-weight-300);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-300)}.Primer_Brand__Text-module__Text--200___XAIGT{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200)}.Primer_Brand__Text-module__Text--100___csEom{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__Text-module__Text--weight-heavy___ege7O,.Primer_Brand__Text-module__Text-narrow--weight-heavy___EZzqD{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Text-module__Text--weight-extrabold____UVFN,.Primer_Brand__Text-module__Text-narrow--weight-extrabold___ts3be{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Text-module__Text--weight-bold___jgFdL,.Primer_Brand__Text-module__Text-narrow--weight-bold___Flbbf{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Text-module__Text--weight-semibold___Ns19j,.Primer_Brand__Text-module__Text-narrow--weight-semibold___jtFFh{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Text-module__Text--weight-medium___E0iQL,.Primer_Brand__Text-module__Text-narrow--weight-medium___tQs9y{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Text-module__Text--weight-normal___siVLX,.Primer_Brand__Text-module__Text-narrow--weight-normal___gb0q4{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Text-module__Text--weight-light___SpQAz,.Primer_Brand__Text-module__Text-narrow--weight-light___cIyjf{font-weight:var(--base-text-weight-light)}.Primer_Brand__Text-module__Text--weight-extralight___JRMel,.Primer_Brand__Text-module__Text-narrow--weight-extralight___aHSut{font-weight:var(--base-text-weight-extralight)}@media screen and (width>=48rem){.Primer_Brand__Text-module__Text-regular--weight-heavy___YumNc{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Text-module__Text-regular--weight-extrabold___uvNQM{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Text-module__Text-regular--weight-bold___E3xyf{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Text-module__Text-regular--weight-semibold___Wwz9g{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Text-module__Text-regular--weight-medium___TnD35{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Text-module__Text-regular--weight-normal___FEkFF{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Text-module__Text-regular--weight-light___MalyV{font-weight:var(--base-text-weight-light)}.Primer_Brand__Text-module__Text-regular--weight-extralight___p7mr2{font-weight:var(--base-text-weight-extralight)}}@media screen and (width>=80rem){.Primer_Brand__Text-module__Text-wide--weight-heavy___AXiAN{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Text-module__Text-wide--weight-extrabold___rggXv{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Text-module__Text-wide--weight-bold___CWJA2{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Text-module__Text-wide--weight-semibold___LEBmW{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Text-module__Text-wide--weight-medium___QQ0IW{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Text-module__Text-wide--weight-normal___KpqrG{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Text-module__Text-wide--weight-light___iYFr9{font-weight:var(--base-text-weight-light)}.Primer_Brand__Text-module__Text-wide--weight-extralight___HH1z4{font-weight:var(--base-text-weight-extralight)}}.Primer_Brand__Text-module__Text-align--start___wkiCN{text-align:start}.Primer_Brand__Text-module__Text-align--end___E4m7M{text-align:end}.Primer_Brand__Text-module__Text-align--center___NbZtZ{text-align:center}.Primer_Brand__EyebrowText-module__EyebrowText___YZHDa{text-transform:uppercase;letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__EyebrowText-module__EyebrowText--variant-accent___p07g3{color:var(--brand-color-accent-primary)}:root{--brand-TextCursorAnimation-cursor-animationDuration:.833s}:root,[data-color-mode=light]{--brand-TextCursorAnimation-cursor-color:var(--base-color-scale-purple-5);--brand-TextCursorAnimation-cursor-deleteColor:var(--base-color-scale-blue-4);--brand-TextCursorAnimation-cursor-finalColor:var(--base-color-scale-green-6)}[data-color-mode=dark]{--brand-TextCursorAnimation-cursor-color:var(--base-color-scale-purple-3);--brand-TextCursorAnimation-cursor-deleteColor:var(--base-color-scale-blue-3);--brand-TextCursorAnimation-cursor-finalColor:var(--base-color-scale-green-2)}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation___oT5SI{align-items:center;display:inline-flex}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__inner___MKMEx{align-items:center;display:inline-flex;position:relative}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__text___gB3n2{font-weight:var(--brand-text-weight-500);white-space:pre}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__sizingContainer___BLhzn{clip-path:inset(50%);display:inline-grid}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__sizingText___ipUBO{grid-area:1/1}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__content___V_c3N{align-items:center;gap:var(--base-size-6);display:inline-flex}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__content--animated___HgWNj{position:absolute;inset-block-start:0;inset-inline-start:0}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor___fNada{width:calc(var(--base-size-8) + var(--base-size-2) / 2);height:calc(var(--base-size-12) + var(--base-size-2));flex:0 0 calc(var(--base-size-8) + var(--base-size-2) / 2);position:relative;top:-.5px}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--initial___y1m0J{background-color:var(--brand-TextCursorAnimation-cursor-color)}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--animated___NKuyb{animation:Primer_Brand__TextCursorAnimation-module__TextCursorAnimation-cursor-blink___B89IH var(--brand-TextCursorAnimation-cursor-animationDuration) steps(1, end) .25s 3 forwards}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--correction___H0shI{background-color:var(--brand-TextCursorAnimation-cursor-deleteColor)}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--final___HqWmn,.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--complete___eaBZl{background-color:var(--brand-TextCursorAnimation-cursor-finalColor)}@keyframes Primer_Brand__TextCursorAnimation-module__TextCursorAnimation-cursor-blink___B89IH{0%,79%{opacity:1}80%,99%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor___fNada{animation:none}}.Primer_Brand__Hero-module__Hero___EM3jf{flex-direction:column;display:flex}.Primer_Brand__Hero-module__Hero--variant-default___TGFpg{padding:var(--brand-Hero-narrow-padding)}.Primer_Brand__Hero-module__Hero--align-start___m8GEr{text-align:left;align-items:flex-start}.Primer_Brand__Hero-module__Hero--align-center___HUXm3{text-align:center;place-items:center}.Primer_Brand__Hero-module__Hero-grid___ty4Y7{--brand-Grid-spacing-margin:0}.Primer_Brand__Hero-module__Hero-grid--contained___AU1X0{width:100%;max-width:1280px;padding:var(--base-size-32);background-color:var(--brand-Hero-bgColor-gridlineGridInner);margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero-grid--contained___AU1X0{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero-grid--block-end___vzO3L,.Primer_Brand__Hero-module__Hero-grid--inline-end___Hh_fz{--brand-Grid-spacing-row:var(--base-size-40)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-grid--contained___AU1X0{padding:var(--base-size-64)}.Primer_Brand__Hero-module__Hero-grid--block-end___vzO3L{--brand-Grid-spacing-row:var(--base-size-80)}}.Primer_Brand__Hero-module__Hero--align-center___HUXm3 .Primer_Brand__Hero-module__Hero-actions___oH1NT{justify-content:center}.Primer_Brand__Hero-module__Hero--align-center___HUXm3 .Primer_Brand__Hero-module__Hero-content___kP85C{flex-direction:column;align-items:center;display:flex}.Primer_Brand__Hero-module__Hero-image___ctmnL{border-radius:var(--brand-borderRadius-medium);width:100%}.Primer_Brand__Hero-module__Hero-image___ctmnL>img{border-radius:inherit}.Primer_Brand__Hero-module__Hero-mediaContainer___DFAW_{flex:1;width:100%;height:100%;display:flex}.Primer_Brand__Hero-module__Hero-imageContainer--bg-subtle___pdiQ2{background-color:var(--brand-color-canvas-subtle);padding:var(--base-size-32) var(--base-size-32) 0}.Primer_Brand__Hero-module__Hero-imageContainer--inline-padding-all___Uu74V{padding:var(--base-size-32);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Hero-module__Hero-imageWrapper___hXPku{justify-content:center;width:100%;display:flex}.Primer_Brand__Hero-module__Hero-imageWrapper--bg-subtle___YSEjN{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);background-color:var(--brand-color-canvas-subtle);padding:var(--base-size-32) var(--base-size-32) 0}.Primer_Brand__Hero-module__Hero-imageContainer--inline-bordered____bhxf{align-items:stretch;display:flex}.Primer_Brand__Hero-module__Hero-imageContainer--inline-bordered____bhxf:not(.Primer_Brand__Hero-module__Hero-imageContainer--inline-padding-none___xKjhe){background-color:var(--brand-color-canvas-subtle)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-imageContainer--inline-bordered____bhxf{min-height:calc(600px - var(--base-size-24))}.Primer_Brand__Hero-module__Hero-imageWrapper--bg-subtle___YSEjN{padding:var(--base-size-64) var(--base-size-64) 0}.Primer_Brand__Hero-module__Hero-imageContainer--inline-padding-all___Uu74V{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa{width:100%;container-type:inline-size}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media___tN0uT{max-width:1176px;margin-inline:auto;display:block;overflow:hidden}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--pos-block-end___XPyHx:not(.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q):not(.Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo){border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__Hero-module__Hero-media--pos-block-end___XPyHx.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Hero-module__Hero-media-item--block-end___gAlCl{border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);width:100%}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku:not(.Primer_Brand__Hero-module__Hero-imageWrapper--padding-none___e4ebj){background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{width:100%;max-width:1280px;padding:var(--base-size-32) var(--base-size-32) 0;margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--with-gridline___shdFJ{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-32)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{padding:var(--base-size-64) var(--base-size-64) 0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-none___aFKaV{padding:0}.Primer_Brand__Hero-module__Hero-grid--bordered-inline___WO6tw{width:100%;max-width:1280px;margin-inline:auto}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-grid--bordered-inline___WO6tw{min-height:440px}}@container (width>=1280px){.Primer_Brand__Hero-module__Hero-grid--bordered-inline___WO6tw{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa.Primer_Brand__Hero-module__Hero--image-pos-inline___xR7vm{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__Hero-module__Hero-contentColumn--bordered-inline___dpmwM{padding:var(--base-size-32);flex-direction:column;justify-content:center;display:flex}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-contentColumn--bordered-inline___dpmwM{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--pos-inline___fithu:not(.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q),.Primer_Brand__Hero-module__Hero-media-item--inline___QS58d{border-radius:0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--pos-inline___fithu.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q{align-self:center;max-width:100%;height:auto}.Primer_Brand__Hero-module__Hero-video___Nibos{width:100%}.Primer_Brand__Hero-module__Hero-media-item___ZpZ02{border-radius:var(--brand-borderRadius-large);width:100%}.Primer_Brand__Hero-module__Hero-label___exV9w{text-transform:uppercase;letter-spacing:1px;align-items:center;margin-block-end:calc(var(--base-size-16) - var(--base-size-2));display:flex}.Primer_Brand__Hero-module__Hero-heading___QuVBH{max-width:924px;margin:0}.Primer_Brand__Hero-module__Hero-heading___QuVBH b{color:var(--brand-color-accent-primary);font-style:normal;font-weight:inherit}.Primer_Brand__Hero-module__Hero-heading--fullWidth___Q3N1y{max-width:none;max-width:initial}.Primer_Brand__Hero-module__Hero-text-column--inline-gridline___ADqxq{height:100%}.Primer_Brand__Hero-module__Hero-description___vG4iA{margin:var(--base-size-24) 0 0;max-width:600px}.Primer_Brand__Hero-module__Hero--variant-inline-gridline___C1LBx .Primer_Brand__Hero-module__Hero-description___vG4iA{margin-block-start:auto;padding-block-start:var(--base-size-24)}.Primer_Brand__Hero-module__Hero-actions___oH1NT{align-items:center;gap:var(--base-size-8) var(--base-size-16);flex-wrap:wrap;margin-block-start:var(--base-size-28);display:flex}.Primer_Brand__Hero-module__Hero___EM3jf .Primer_Brand__Hero-module__Hero-actions___oH1NT>*{flex-grow:0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-actions___oH1NT{align-items:stretch;gap:var(--base-size-8) var(--base-size-12)}.Primer_Brand__Hero-module__Hero-trailing___UeIyX{margin-block-start:var(--base-size-32)}.Primer_Brand__Hero-module__Hero-trailing___UeIyX img,.Primer_Brand__Hero-module__Hero-trailing___UeIyX picture{display:block}.Primer_Brand__Hero-module__Hero-eyebrow___NLX6a{margin-block-end:var(--base-size-32)}@media screen and (width>=34rem){.Primer_Brand__Hero-module__Hero--variant-default___TGFpg{padding:var(--brand-Hero-regular-padding)}}.Primer_Brand__Hero-module__Hero-video-poster-button___fXNeO{cursor:pointer;background:0 0;border:none;width:100%;height:100%;padding:0;font-size:0;line-height:0;display:block;position:relative}.Primer_Brand__Hero-module__Hero-video-poster-image___OF5WQ{width:100%;height:auto;display:block}.Primer_Brand__Hero-module__Hero-video-poster-icon___qBPv_{width:var(--base-size-96);height:var(--base-size-96);z-index:1;color:var(--base-color-scale-white-0);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.Primer_Brand__Hero-module__Hero-video-poster-header___RwX23{padding:var(--base-size-16) var(--base-size-24);align-items:center;gap:var(--base-size-16);height:var(--base-size-80);background:linear-gradient(#000000b3 60%,#0000);display:flex;position:absolute;inset:0 0 auto}.Primer_Brand__Hero-module__Hero-video-header-poster-icon___WOvuy,.Primer_Brand__Hero-module__Hero-video-poster-text___XZwq_{color:var(--base-color-scale-white-0)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0{width:100%;container-type:inline-size}.Primer_Brand__Hero-module__Hero-grid--expressive___VviA1{--brand-Grid-spacing-row:0;gap:0;width:100%;max-width:1280px;margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero-grid--expressive___VviA1{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero-expressive-header-column___ycDFD{padding:var(--base-size-36);padding-inline:var(--base-size-20);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);align-items:center;padding-block-end:var(--base-size-28);display:flex}.Primer_Brand__Hero-module__Hero-expressive-body-column___k1AUC{padding:var(--base-size-32);padding-inline:var(--base-size-20);padding-block-start:var(--base-size-24)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-description___vG4iA{margin-block-start:0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-actions___oH1NT{margin-block-start:var(--base-size-28)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-trailing___UeIyX{margin-block-start:var(--base-size-24)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-expressive-header-column___ycDFD{padding:var(--base-size-64);border-block-end:none;border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-inline-end:var(--base-size-64)}.Primer_Brand__Hero-module__Hero-expressive-body-column___k1AUC{padding:var(--base-size-64);flex-direction:column;justify-content:flex-end;padding-inline-start:var(--base-size-64);display:flex}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-actions___oH1NT{margin-block-start:var(--base-size-24)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-trailing___UeIyX{margin-block-start:var(--base-size-20)}}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);width:100%}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku:not(.Primer_Brand__Hero-module__Hero-imageWrapper--padding-none___e4ebj){background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{width:100%;max-width:1280px;padding:var(--base-size-32) var(--base-size-32) 0;margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--with-gridline___shdFJ{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-32)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{padding:var(--base-size-64) var(--base-size-64) 0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-none___aFKaV{padding:0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-media___tN0uT{max-width:1176px;margin-inline:auto;display:block;overflow:hidden}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-media--pos-block-end___XPyHx:not(.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q):not(.Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo){border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo,.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo{border-radius:0;max-width:100%}.Primer_Brand__Heading-module__Heading___IVpmp{--condensed-stretch:75%;color:var(--brand-color-text-default)}.Primer_Brand__Heading-module__Heading--textWrap-balance___AOKvC{text-wrap:balance}.Primer_Brand__Heading-module__Heading--textWrap-wrap___iM9k3{text-wrap:wrap}.Primer_Brand__Heading-module__Heading-font--hubot-sans___w3_5f{--condensed-stretch:90%}[data-color-mode=dark] .Primer_Brand__Heading-module__Heading___IVpmp{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.Primer_Brand__Heading-module__Heading-font--mona-sans___SCnTx{font-family:var(--brand-heading-fontFamily)}.Primer_Brand__Heading-module__Heading-font--hubot-sans___w3_5f{font-family:var(--brand-heading-fontFamilyAlt)}.Primer_Brand__Heading-module__Heading-font--monospace___dFpiK{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__Heading-module__Heading--display___xFecE{font-weight:var(--brand-heading-weight-1000);font-size:var(--brand-text-size-1000);line-height:var(--brand-text-lineHeight-1000);letter-spacing:var(--brand-text-letterSpacing-1000)}.Primer_Brand__Heading-module__Heading--subhead-large____C6GZ{font-weight:var(--brand-text-subhead-weight-large);font-size:var(--brand-text-subhead-size-large);line-height:var(--brand-text-subhead-lineHeight-large)}.Primer_Brand__Heading-module__Heading--subhead-medium___Pik5E{font-weight:var(--brand-text-subhead-weight-medium);font-size:var(--brand-text-subhead-size-medium);line-height:var(--brand-text-subhead-lineHeight-medium)}.Primer_Brand__Heading-module__Heading--1___Ufc7G{font-weight:var(--brand-heading-weight-900);font-size:var(--brand-text-size-900);line-height:var(--brand-text-lineHeight-900);letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading--2___TFg09{font-weight:var(--brand-heading-weight-800);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800)}.Primer_Brand__Heading-module__Heading--3___wsITu{font-weight:var(--brand-heading-weight-700);font-size:var(--brand-text-size-700);line-height:var(--brand-heading-lineHeight-700);letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading--4___C9jDG{font-weight:var(--brand-heading-weight-600);font-size:var(--brand-text-size-600);line-height:var(--brand-text-lineHeight-600);letter-spacing:var(--brand-heading-letterSpacing-600)}.Primer_Brand__Heading-module__Heading--5___HgypG{font-weight:var(--brand-heading-weight-500);font-size:var(--brand-text-size-500);line-height:var(--brand-text-lineHeight-500);letter-spacing:var(--brand-heading-letterSpacing-500)}.Primer_Brand__Heading-module__Heading--6___FEQ_V{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-text-lineHeight-400);letter-spacing:var(--brand-heading-letterSpacing-400)}.Primer_Brand__Heading-module__Heading--weight-heavy___ssSay,.Primer_Brand__Heading-module__Heading-narrow--weight-heavy___s43iL{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Heading-module__Heading--weight-extrabold___SJAUw,.Primer_Brand__Heading-module__Heading-narrow--weight-extrabold___vmOAQ{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Heading-module__Heading--weight-bold___Zqsyk,.Primer_Brand__Heading-module__Heading-narrow--weight-bold___IXjRC{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Heading-module__Heading--weight-semibold___NMvbh,.Primer_Brand__Heading-module__Heading-narrow--weight-semibold___bAIHy{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Heading-module__Heading--weight-medium___II172,.Primer_Brand__Heading-module__Heading-narrow--weight-medium___q5O6L{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Heading-module__Heading--weight-normal___ZLGhx,.Primer_Brand__Heading-module__Heading-narrow--weight-normal___Q0Jkf{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Heading-module__Heading--weight-light___aF2Rw,.Primer_Brand__Heading-module__Heading-narrow--weight-light___mOWUt{font-weight:var(--base-text-weight-light)}.Primer_Brand__Heading-module__Heading--weight-extralight___KRgjg,.Primer_Brand__Heading-module__Heading-narrow--weight-extralight___qHJfi{font-weight:var(--base-text-weight-extralight)}@media screen and (width>=48rem){.Primer_Brand__Heading-module__Heading-regular--weight-heavy___SwJ1c{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Heading-module__Heading-regular--weight-extrabold___H5Gyr{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Heading-module__Heading-regular--weight-bold___QMMCW{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Heading-module__Heading-regular--weight-semibold___h3bHv{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Heading-module__Heading-regular--weight-medium___wC9qR{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Heading-module__Heading-regular--weight-normal___joqMx{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Heading-module__Heading-regular--weight-light___CCVVF{font-weight:var(--base-text-weight-light)}.Primer_Brand__Heading-module__Heading-regular--weight-extralight___LE9Tu{font-weight:var(--base-text-weight-extralight)}}@media screen and (width>=80rem){.Primer_Brand__Heading-module__Heading-wide--weight-heavy___IiVTg{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Heading-module__Heading-wide--weight-extrabold___CIRWW{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Heading-module__Heading-wide--weight-bold___wMxlL{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Heading-module__Heading-wide--weight-semibold___IqaIc{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Heading-module__Heading-wide--weight-medium___Uq302{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Heading-module__Heading-wide--weight-normal___zWzeR{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Heading-module__Heading-wide--weight-light___Lh64A{font-weight:var(--base-text-weight-light)}}.Primer_Brand__Heading-module__Heading--stretch-condensed____i8A2,.Primer_Brand__Heading-module__Heading-narrow--stretch-condensed___koHLR{font-stretch:var(--condensed-stretch)}.Primer_Brand__Heading-module__Heading--stretch-normal___apWVy,.Primer_Brand__Heading-module__Heading-narrow--stretch-normal___AP9Ba{font-stretch:100%}.Primer_Brand__Heading-module__Heading--stretch-expanded___gzwLQ,.Primer_Brand__Heading-module__Heading-narrow--stretch-expanded___RHi1z{font-stretch:125%}@media screen and (width>=48rem){.Primer_Brand__Heading-module__Heading-regular--stretch-condensed___CHFa4{font-stretch:var(--condensed-stretch)}.Primer_Brand__Heading-module__Heading-regular--stretch-normal___IX9Vl{font-stretch:100%}.Primer_Brand__Heading-module__Heading-regular--stretch-expanded___ozx5y{font-stretch:125%}}@media screen and (width>=80rem){.Primer_Brand__Heading-module__Heading-narrow--weight-expanded___jvotv .Primer_Brand__Heading-module__Heading-wide--stretch-condensed___d3GoN{font-stretch:var(--condensed-stretch)}.Primer_Brand__Heading-module__Heading-wide--stretch-normal___te0lW{font-stretch:100%}.Primer_Brand__Heading-module__Heading-wide--stretch-expanded___TlWrW{font-stretch:125%}}.Primer_Brand__Heading-module__Heading--letter-spacing-condensed___b6mZa,.Primer_Brand__Heading-module__Heading-narrow--letter-spacing-condensed___U6uGD{letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading--letter-spacing-normal___Qhzoc,.Primer_Brand__Heading-module__Heading-narrow--letter-spacing-normal___gzn9r{letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading--letter-spacing-none___vuohz,.Primer_Brand__Heading-module__Heading-narrow--letter-spacing-none___RR_W3{letter-spacing:0}@media screen and (width>=48rem){.Primer_Brand__Heading-module__Heading-regular--letter-spacing-condensed___gEGJy{letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading-regular--letter-spacing-normal___GWmk5{letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading-regular--letter-spacing-none____NH9r{letter-spacing:0}}@media screen and (width>=80rem){.Primer_Brand__Heading-module__Heading-narrow--weight-wide___ikyG2 .Primer_Brand__Heading-module__Heading-wide--letter-spacing-condensed___RhUHL{letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading-wide--letter-spacing-normal___qPBdW{letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading-wide--letter-spacing-none___w4Oh2{letter-spacing:0}}.Primer_Brand__ExpandableArrow-module__ExpandableArrow___rkfek{--ExpandableArrow-duration:.2s;--ExpandableArrow-easing:ease;transition:transform .2s;transition:transform var(--ExpandableArrow-duration) var(--ExpandableArrow-easing);transform:translate(0)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow--expanded___gajDr{transform:translate(4px)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___g4mdy{stroke-dasharray:10;stroke-dashoffset:10px;transition:stroke-dashoffset var(--ExpandableArrow-duration) var(--ExpandableArrow-easing)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem--expanded___KwI_9{stroke-dashoffset:20px}.Primer_Brand__ExpandableArrow-module__ExpandableArrow--reversed___LPFUS{transform:rotate(180deg)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow--reversed___LPFUS.Primer_Brand__ExpandableArrow-module__ExpandableArrow--expanded___gajDr{transform:rotate(180deg)translate(4px)}:root{--brand-Button-icon-size-large:var(--base-size-20);--brand-Button-icon-size-medium:var(--base-size-16);--brand-Button-icon-size-small:var(--base-size-16);--brand-Button-control-size-large:var(--brand-control-large-size);--brand-Button-control-size-medium:var(--brand-control-medium-size);--brand-Button-control-size-small:var(--brand-control-small-size)}:root,[data-color-mode=light]{--brand-button-primary-bgColor-rest:var(--base-color-scale-green-6);--brand-button-primary-bgColor-hover:color-mix(in srgb, var(--base-color-scale-green-6), #000 16%);--brand-button-primary-bgColor-active:linear-gradient(0deg, #0000003d 0%, #0000003d 100%), var(--base-color-scale-green-6);--brand-button-primary-bgColor-disabled:var(--base-color-scale-gray-4);--brand-button-primary-borderColor-rest:transparent;--brand-button-primary-borderColor-hover:transparent;--brand-button-primary-borderColor-active:var(--base-color-scale-green-7);--brand-button-primary-borderColor-disabled:transparent;--brand-button-primary-fgColor-rest:var(--base-color-scale-white-0);--brand-button-primary-fgColor-disabled:var(--base-color-scale-gray-2);--brand-button-primary-shadow-active:none;--brand-button-secondary-bgColor-rest:#0000000f;--brand-button-secondary-bgColor-hover:#0000001e;--brand-button-secondary-bgColor-active:#00000036;--brand-button-secondary-borderColor-rest:var(--base-color-scale-gray-2);--brand-button-secondary-borderColor-hover:var(--base-color-scale-gray-2);--brand-button-secondary-borderColor-active:var(--base-color-scale-gray-2);--brand-button-secondary-fgColor-rest:var(--brand-color-text-default);--brand-button-secondary-fgColor-disabled:var(--base-color-scale-gray-3);--brand-button-subtle-bgColor-rest:#00000003;--brand-button-subtle-bgColor-hover:#0000001e;--brand-button-subtle-bgColor-active:#00000036;--brand-button-subtle-borderColor-rest:var(--base-color-scale-gray-2);--brand-button-subtle-borderColor-hover:var(--base-color-scale-gray-2);--brand-button-subtle-borderColor-active:var(--base-color-scale-gray-2);--brand-button-subtle-fgColor-rest:var(--brand-color-text-default);--brand-button-subtle-fgColor-disabled:var(--base-color-scale-gray-3)}[data-color-mode=dark]{--brand-button-primary-bgColor-rest:var(--base-color-scale-green-5);--brand-button-primary-bgColor-hover:color-mix(in srgb, var(--base-color-scale-green-5), #000 16%);--brand-button-primary-bgColor-active:linear-gradient(0deg, #0000003d 0%, #0000003d 100%), var(--base-color-scale-green-5);--brand-button-primary-bgColor-disabled:var(--base-color-scale-gray-4);--brand-button-primary-borderColor-rest:transparent;--brand-button-primary-borderColor-hover:transparent;--brand-button-primary-borderColor-active:var(--base-color-scale-green-6);--brand-button-primary-borderColor-disabled:transparent;--brand-button-primary-fgColor-rest:var(--base-color-scale-white-0);--brand-button-primary-fgColor-disabled:var(--base-color-scale-gray-2);--brand-button-primary-shadow-active:none;--brand-button-secondary-bgColor-rest:#ffffff1f;--brand-button-secondary-bgColor-hover:#ffffff29;--brand-button-secondary-bgColor-active:#ffffff42;--brand-button-secondary-borderColor-rest:#ffffff0f;--brand-button-secondary-borderColor-hover:#ffffff1f;--brand-button-secondary-borderColor-active:#ffffff1f;--brand-button-secondary-fgColor-rest:var(--brand-color-text-default);--brand-button-secondary-fgColor-disabled:var(--base-color-scale-gray-4);--brand-button-subtle-bgColor-rest:#00000003;--brand-button-subtle-bgColor-hover:#ffffff29;--brand-button-subtle-bgColor-active:#ffffff3d;--brand-button-subtle-borderColor-rest:var(--base-color-scale-gray-6);--brand-button-subtle-borderColor-hover:#ffffff1f;--brand-button-subtle-borderColor-active:#ffffff1f;--brand-button-subtle-fgColor-rest:var(--brand-color-text-default);--brand-button-subtle-fgColor-disabled:var(--base-color-scale-gray-4)}.Primer_Brand__Button-module__Button___lDruK{appearance:none;-webkit-user-select:none;user-select:none;vertical-align:middle;border-radius:var(--base-size-6);cursor:pointer;border:solid var(--brand-borderWidth-thin) transparent;box-sizing:border-box;justify-content:center;align-items:center;gap:var(--brand-control-medium-gap);background:0 0;-webkit-text-decoration:none;text-decoration:none;transition:background-color .2s,border-color .2s;display:inline-flex}.Primer_Brand__Button-module__Button___lDruK:where(button){font:inherit}.Primer_Brand__Button-module__Button___lDruK:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Button-module__Button___lDruK:focus-visible{outline:4px solid var(--brand-color-focus);outline-offset:2px;transition:none}.Primer_Brand__Button-module__Button--disabled___Ba17E,.Primer_Brand__Button-module__Button--disabled___Ba17E:hover,.Primer_Brand__Button-module__Button--disabled___Ba17E:focus{cursor:not-allowed}.Primer_Brand__Button-module__Button--size-small___iNTn1 .Primer_Brand__Button-module__Button__text___Z3ocU{display:flex}.Primer_Brand__Button-module__Button__text___Z3ocU{position:relative}.Primer_Brand__Button-module__Button--label___lUBc0{font-family:var(--brand-body-fontFamily);font-style:normal;font-weight:var(--base-text-weight-medium);text-align:center}.Primer_Brand__Button-module__Button__icon-visual___zR2Hi{height:var(--brand-Button-icon-size-medium);fill:currentColor;align-self:center;width:auto;display:flex}.Primer_Brand__Button-module__Button__trailing-visual___zg8jd,.Primer_Brand__Button-module__Button__leading-visual___FIPvg{display:flex}.Primer_Brand__Button-module__Button-arrow___SkJXQ{margin-inline-start:calc(var(--base-size-8) * -1);margin-inline-end:calc(var(--base-size-4) * -1)}.Primer_Brand__Button-module__Button--primary___xIC7G{color:var(--brand-button-primary-fgColor-rest);background-color:var(--brand-button-primary-bgColor-rest)}.Primer_Brand__Button-module__Button--size-small___iNTn1.Primer_Brand__Button-module__Button--primary___xIC7G{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Button-module__Button--primary___xIC7G:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true]):not([aria-expanded=true])):hover{background-color:var(--brand-button-primary-bgColor-hover)}.Primer_Brand__Button-module__Button--primary___xIC7G:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true])):active,.Primer_Brand__Button-module__Button--primary___xIC7G[aria-expanded=true]{background:var(--brand-button-primary-bgColor-active);border-color:var(--brand-button-primary-borderColor-active)}.Primer_Brand__Button-module__Button--label-primary___Leisi{color:var(--brand-button-primary-fgColor-rest)}.Primer_Brand__Button-module__Button--primary___xIC7G:disabled,.Primer_Brand__Button-module__Button--primary___xIC7G[aria-disabled=true],.Primer_Brand__Button-module__Button--primary___xIC7G.Primer_Brand__Button-module__Button--disabled___Ba17E{background-color:var(--brand-button-primary-bgColor-disabled)}.Primer_Brand__Button-module__Button--primary___xIC7G:where(:disabled,[aria-disabled=true],.Primer_Brand__Button-module__Button--disabled___Ba17E) :where(.Primer_Brand__Button-module__Button-arrow--disabled____UgPq,.Primer_Brand__Button-module__Button__icon-visual--disabled___j7aVy),.Primer_Brand__Button-module__Button--label-primary___Leisi.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:var(--brand-button-primary-fgColor-disabled)}.Primer_Brand__Button-module__Button--secondary___akMC2{background-color:var(--brand-button-secondary-bgColor-rest);border-color:var(--brand-button-secondary-borderColor-rest);color:var(--brand-button-secondary-fgColor-rest);-webkit-backdrop-filter:blur(var(--base-size-20));backdrop-filter:blur(var(--base-size-20))}.Primer_Brand__Button-module__Button--secondary___akMC2:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true]):not([aria-expanded=true])):hover{background-color:var(--brand-button-secondary-bgColor-hover);border-color:var(--brand-button-secondary-borderColor-hover)}.Primer_Brand__Button-module__Button--secondary___akMC2:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true])):active,.Primer_Brand__Button-module__Button--secondary___akMC2[aria-expanded=true]{background-color:var(--brand-button-secondary-bgColor-active);border-color:var(--brand-button-secondary-borderColor-active)}.Primer_Brand__Button-module__Button--secondary___akMC2:disabled{border-color:var(--brand-button-secondary-fgColor-disabled)}.Primer_Brand__Button-module__Button--secondary___akMC2:where(:disabled,[aria-disabled=true],.Primer_Brand__Button-module__Button--disabled___Ba17E) :where(.Primer_Brand__Button-module__Button-arrow--disabled____UgPq,.Primer_Brand__Button-module__Button__icon-visual--disabled___j7aVy),.Primer_Brand__Button-module__Button--label-secondary___DRJoJ.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:var(--brand-button-secondary-fgColor-disabled)}.Primer_Brand__Button-module__Button--subtle___UMmi9{background-color:var(--brand-button-subtle-bgColor-rest);border-width:var(--brand-borderWidth-thin);border-color:var(--brand-button-subtle-borderColor-rest);color:var(--brand-color-text-default);-webkit-backdrop-filter:blur(var(--base-size-20));backdrop-filter:blur(var(--base-size-20))}.Primer_Brand__Button-module__Button--subtle___UMmi9:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true]):not([aria-expanded=true])):hover{background-color:var(--brand-button-subtle-bgColor-hover);border-color:var(--brand-button-subtle-borderColor-hover)}.Primer_Brand__Button-module__Button--subtle___UMmi9:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true])):active,.Primer_Brand__Button-module__Button--subtle___UMmi9[aria-expanded=true]{background-color:var(--brand-button-subtle-bgColor-active);border-color:var(--brand-button-subtle-borderColor-active)}.Primer_Brand__Button-module__Button--label-subtle___RRaqm{color:var(--brand-button-subtle-fgColor-rest)}.Primer_Brand__Button-module__Button--subtle___UMmi9:where(:disabled,[aria-disabled=true],.Primer_Brand__Button-module__Button--disabled___Ba17E) :where(.Primer_Brand__Button-module__Button-arrow--disabled____UgPq,.Primer_Brand__Button-module__Button__icon-visual--disabled___j7aVy),.Primer_Brand__Button-module__Button--label-subtle___RRaqm.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:var(--brand-button-subtle-fgColor-disabled)}.Primer_Brand__Button-module__Button--size-small___iNTn1{min-height:var(--brand-Button-control-size-small);padding-inline:var(--brand-control-small-paddingInline-normal)}.Primer_Brand__Button-module__Button--size-medium___EyCyw{min-height:var(--brand-Button-control-size-medium);padding:var(--brand-control-medium-paddingBlock-condensed) var(--base-size-20)}.Primer_Brand__Button-module__Button--size-large___REN1l{min-height:var(--brand-Button-control-size-large);padding:var(--brand-control-large-paddingBlock-condensed) var(--brand-control-large-paddingInline-spacious)}.Primer_Brand__Button-module__Button--size-small___iNTn1 :where(.Primer_Brand__Button-module__Button__icon-visual___zR2Hi){height:var(--brand-Button-icon-size-small)}.Primer_Brand__Button-module__Button--size-medium___EyCyw :where(.Primer_Brand__Button-module__Button__icon-visual___zR2Hi){height:var(--brand-Button-icon-size-medium)}.Primer_Brand__Button-module__Button--size-large___REN1l :where(.Primer_Brand__Button-module__Button__icon-visual___zR2Hi,.Primer_Brand__Button-module__Button-arrow___SkJXQ){height:var(--brand-Button-icon-size-large);width:var(--brand-Button-icon-size-large)}.Primer_Brand__Button-module__Button--label-medium___DW2TM{font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:.01rem}.Primer_Brand__Button-module__Button--label-large____iBy6{font-size:var(--brand-text-subhead-size-large);line-height:var(--brand-text-subhead-lineHeight-large)}.Primer_Brand__Button-module__Button--block___F5RXs{width:100%}@media (forced-colors:active){.Primer_Brand__Button-module__Button--disabled___Ba17E{outline-color:graytext}.Primer_Brand__Button-module__Button--label___lUBc0.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:graytext}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Button-module__Button___lDruK,.Primer_Brand__Button-module__Button___lDruK:before,.Primer_Brand__Button-module__Button___lDruK:after,.Primer_Brand__Button-module__Button___lDruK *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz{display:none}@media (forced-colors:active){.Primer_Brand__Tooltip-module__Tooltip___u1Usz{outline:var(--brand-borderWidth-thin) solid transparent}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[popover]{--offset:var(--base-size-8,--base-size-8);--b:1em;--h:.5em;--p:50%;--r:var(--brand-borderRadius-medium);--c:var(--brand-color-neutral-emphasisPlus);clip:auto;white-space:normal;width:max-content;font:normal normal var(--brand-text-size-100) / var(--brand-text-lineHeight-100) var(--brand-fontStack-sansSerif);-webkit-font-smoothing:subpixel-antialiased;color:var(--brand-Tooltip-color-default);text-align:center;word-wrap:break-word;background:var(--c);border-radius:var(--r);opacity:0;border:0;max-width:250px;margin:auto;padding:.5em .75em;position:absolute;inset:auto;overflow:visible}:is(.Primer_Brand__Tooltip-module__Tooltip___u1Usz[popover]:popover-open,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[popover].Primer_Brand__Tooltip-module__\:popover-open___DQych){animation-name:Primer_Brand__Tooltip-module__tooltip-appear___OeSNz;animation-duration:.2s;animation-duration:var(--brand-animation-duration-faster,.2s);animation-timing-function:ease-in;animation-delay:0s;animation-fill-mode:forwards;display:block}.Primer_Brand__Tooltip-module__Tooltip___u1Usz:after{height:var(--offset);content:"";display:block;position:absolute;left:0;right:0}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=n],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0;border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0;clip-path:polygon(0 100%, 0 0, 100% 0, 100% 100%, min(100%, var(--p) + var(--b) / 2) 100%, var(--p) calc(100% + var(--h)), max(0%, var(--p) - var(--b) / 2) 100%)}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=n],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw]{-o-border-image:conic-gradient(var(--c) 0 0) 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0;border-image:conic-gradient(var(--c) 0 0) fill 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=s],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0;border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0;clip-path:polygon(0 0, 0 100%, 100% 100%, 100% 0, min(100%, var(--p) + var(--b) / 2) 0, var(--p) calc(-1 * var(--h)), max(0%, var(--p) - var(--b) / 2) 0)}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=s],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]{-o-border-image:conic-gradient(var(--c) 0 0) 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0;border-image:conic-gradient(var(--c) 0 0) fill 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=w]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0;border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0;clip-path:polygon(100% 100%, 0 100%, 0 0, 100% 0, 100% max(0%, var(--p) - var(--b) / 2), calc(100% + var(--h)) var(--p), 100% min(100%, var(--p) + var(--b) / 2))}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=w]{-o-border-image:conic-gradient(var(--c) 0 0) 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0;border-image:conic-gradient(var(--c) 0 0) fill 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=e]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h);border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h);clip-path:polygon(0 100%, 100% 100%, 100% 0, 0 0, 0 max(0%, var(--p) - var(--b) / 2), calc(-1 * var(--h)) var(--p), 0 min(100%, var(--p) + var(--b) / 2))}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=e]{-o-border-image:conic-gradient(var(--c) 0 0) 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h);border-image:conic-gradient(var(--c) 0 0) fill 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h)}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se]{--p:25%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]{--p:75%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=n]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw]:after{top:100%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=s]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]:after{bottom:100%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=w]:after{height:100%;width:var(--offset);content:"";display:block;position:absolute;bottom:0;left:100%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=e]:after{height:100%;width:var(--offset);content:"";margin-left:calc(var(--offset) * -1px);display:block;position:absolute;bottom:0;right:100%}@keyframes Primer_Brand__Tooltip-module__tooltip-appear___OeSNz{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Tooltip-module__Tooltip___u1Usz,.Primer_Brand__Tooltip-module__Tooltip___u1Usz:before,.Primer_Brand__Tooltip-module__Tooltip___u1Usz:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz *{animation-duration:0s!important}}:root,[data-color-mode=light]{--brand-Tooltip-color-default:var(--brand-color-text-onEmphasis)}[data-color-mode=dark]{--brand-Tooltip-color-default:var(--brand-color-text-default)}:root{--brand-IconButton-loadingIndicator-animationDuration-reducedMotion:1.6s;--brand-IconButton-loadingIndicator-animationDuration-default:.8s;--brand-IconButton-icon-size-large:var(--brand-Button-icon-size-large);--brand-IconButton-icon-size-medium:var(--brand-Button-icon-size-large);--brand-IconButton-icon-size-small:var(--brand-Button-icon-size-small);--brand-IconButton-control-size-large:var(--brand-Button-control-size-large);--brand-IconButton-control-size-medium:var(--brand-Button-control-size-medium);--brand-IconButton-control-size-small:var(--brand-Button-control-size-small)}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-IconButton-danger-fgColor-rest:var(--brand-color-danger-fg);--brand-IconButton-danger-fgColor-hover:var(--base-color-scale-white-0);--brand-IconButton-danger-fgColor-active:var(--base-color-scale-white-0);--brand-IconButton-danger-bgColor-rest:var(--brand-button-secondary-bgColor-rest);--brand-IconButton-danger-bgColor-hover:var(--brand-color-danger-emphasis);--brand-IconButton-danger-bgColor-active:var(--brand-color-danger-emphasis);--brand-IconButton-danger-borderColor-rest:var(--brand-button-secondary-borderColor-rest);--brand-IconButton-danger-borderColor-hover:var(--brand-color-danger-emphasis);--brand-IconButton-danger-borderColor-active:var(--brand-color-danger-emphasis);--brand-IconButton-inactive-fgColor:var(--brand-color-text-muted);--brand-IconButton-inactive-bgColor:var(--brand-color-canvas-subtle);--brand-IconButton-inactive-borderColor:var(--brand-color-canvas-subtle);--brand-IconButton-invisible-bgColor-rest:transparent;--brand-IconButton-invisible-borderColor-rest:transparent}.Primer_Brand__IconButton-module__IconButton___Rw5mP{flex:none;gap:0;padding:0}.Primer_Brand__IconButton-module__IconButton___Rw5mP.Primer_Brand__IconButton-module__IconButton___Rw5mP{min-width:var(--brand-IconButton-control-size-medium);width:var(--brand-IconButton-control-size-medium);height:var(--brand-IconButton-control-size-medium)}.Primer_Brand__IconButton-module__IconButton--small___vIOsv.Primer_Brand__IconButton-module__IconButton--small___vIOsv{min-width:var(--brand-IconButton-control-size-small);width:var(--brand-IconButton-control-size-small);height:var(--brand-IconButton-control-size-small)}.Primer_Brand__IconButton-module__IconButton--large___XSwOm.Primer_Brand__IconButton-module__IconButton--large___XSwOm{min-width:var(--brand-IconButton-control-size-large);width:var(--brand-IconButton-control-size-large);height:var(--brand-IconButton-control-size-large)}.Primer_Brand__IconButton-module__IconButton--rounded___D7bgG.Primer_Brand__IconButton-module__IconButton--rounded___D7bgG{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true]){color:var(--brand-IconButton-danger-fgColor-rest);background-color:var(--brand-IconButton-danger-bgColor-rest);border-color:var(--brand-IconButton-danger-borderColor-rest)}.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true]):not([aria-expanded=true]):hover{color:var(--brand-IconButton-danger-fgColor-hover);background-color:var(--brand-IconButton-danger-bgColor-hover);border-color:var(--brand-IconButton-danger-borderColor-hover)}.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true]):active,.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true])[aria-expanded=true]{color:var(--brand-IconButton-danger-fgColor-active);background-color:var(--brand-IconButton-danger-bgColor-active);border-color:var(--brand-IconButton-danger-borderColor-active)}.Primer_Brand__IconButton-module__IconButton--variant-invisible___N5QCb.Primer_Brand__IconButton-module__IconButton--variant-invisible___N5QCb:where(:not(:hover):not(:active):not([aria-expanded=true])){background-color:var(--brand-IconButton-invisible-bgColor-rest);border-color:var(--brand-IconButton-invisible-borderColor-rest);-webkit-backdrop-filter:none;backdrop-filter:none}.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f,.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f:hover,.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f:active{color:var(--brand-IconButton-inactive-fgColor);cursor:auto;background-color:var(--brand-IconButton-inactive-bgColor);border-color:var(--brand-IconButton-inactive-borderColor);-webkit-backdrop-filter:none;backdrop-filter:none}.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f .Primer_Brand__IconButton-module__IconButton__icon___krMSy{color:inherit}.Primer_Brand__IconButton-module__IconButton--small___vIOsv .Primer_Brand__IconButton-module__IconButton__icon___krMSy{width:var(--brand-IconButton-icon-size-small);height:var(--brand-IconButton-icon-size-small)}.Primer_Brand__IconButton-module__IconButton--medium___o7XG8 .Primer_Brand__IconButton-module__IconButton__icon___krMSy{width:var(--brand-IconButton-icon-size-medium);height:var(--brand-IconButton-icon-size-medium)}.Primer_Brand__IconButton-module__IconButton--large___XSwOm .Primer_Brand__IconButton-module__IconButton__icon___krMSy{width:var(--brand-IconButton-icon-size-large);height:var(--brand-IconButton-icon-size-large)}.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{box-sizing:border-box;width:var(--brand-IconButton-icon-size-medium);height:var(--brand-IconButton-icon-size-medium);border:var(--brand-borderWidth-thin) solid currentcolor;animation:Primer_Brand__IconButton-module__IconButton-spin___Xg2de var(--brand-IconButton-loadingIndicator-animationDuration-default) linear infinite;border-inline-end-color:#0000;border-radius:50%;display:block}.Primer_Brand__IconButton-module__IconButton--small___vIOsv .Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{width:var(--brand-IconButton-icon-size-small);height:var(--brand-IconButton-icon-size-small)}.Primer_Brand__IconButton-module__IconButton--large___XSwOm .Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{width:var(--brand-IconButton-icon-size-large);height:var(--brand-IconButton-icon-size-large)}.Primer_Brand__IconButton-module__IconButton__loadingAnnouncement___EDict{width:var(--base-size-1);height:var(--base-size-1);margin:calc(var(--base-size-1) * -1);clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;padding:0;position:absolute;overflow:hidden}@keyframes Primer_Brand__IconButton-module__IconButton-spin___Xg2de{to{transform:rotate(360deg)}}@media (forced-colors:active){.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f{color:graytext;border-color:graytext}.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{border-color:buttontext;border-inline-end-color:#0000}}@media (prefers-reduced-motion:reduce){.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{animation-duration:var(--brand-IconButton-loadingIndicator-animationDuration-reducedMotion)}}:root,[data-color-mode=light]{--brand-ActionMenu-color-splitButton-divider-default:var(--brand-color-border-muted);--brand-ActionMenu-color-splitButton-divider-primary:var(--base-color-scale-green-7);--brand-ActionMenu-color-item-hover:var(--base-color-scale-gray-1);--brand-ActionMenu-color-scrollbar-thumb-bg:var(--base-color-scale-gray-0)}[data-color-mode=dark]{--brand-ActionMenu-color-splitButton-divider-default:var(--brand-color-border-muted);--brand-ActionMenu-color-splitButton-divider-primary:var(--brand-color-border-muted);--brand-ActionMenu-color-item-hover:var(--base-color-scale-gray-6);--brand-ActionMenu-color-scrollbar-thumb-bg:var(--base-color-scale-gray-3)}.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5{--focus-outline-width:3px;position:relative}.Primer_Brand__ActionMenu-module__ActionMenu--disabled___Ic5nl{cursor:not-allowed}.Primer_Brand__ActionMenu-module__ActionMenu__button___gqNoG{height:auto}.Primer_Brand__ActionMenu-module__ActionMenu__button--default___mloG_{--brand-borderRadius-medium:var(--brand-borderRadius-full)}.Primer_Brand__ActionMenu-module__ActionMenu__button--small___VpvNg{padding:calc(var(--base-size-4) / 2) var(--base-size-12)}.Primer_Brand__ActionMenu-module__ActionMenu__button--medium___xG3FK{padding:calc(var(--base-size-8) + 2px) var(--base-size-28)}.Primer_Brand__ActionMenu-module__ActionMenu__button___gqNoG>span:first-of-type{max-width:200px;overflow:hidden}.Primer_Brand__ActionMenu-module__ActionMenu__button--split-button___zE_P6{border-radius:var(--brand-borderRadius-medium);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);background-color:var(--brand-color-canvas-default);padding:0;display:inline-flex}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH,.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:hover{z-index:1;border-top-right-radius:0;border-bottom-right-radius:0;position:relative}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:before,.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:hover:before{content:"";top:calc(var(--base-size-2) / -2);right:calc(var(--base-size-2) * -1);width:var(--brand-borderWidth-thin);height:calc(100% + var(--base-size-2));background-color:var(--brand-ActionMenu-color-splitButton-divider-default);position:absolute}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--primary___GexBE.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:before{background-color:var(--brand-ActionMenu-color-splitButton-divider-primary)}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--subtle___O9TkT.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:before{top:calc(var(--base-size-2) * -1);height:calc(100% + var(--base-size-4))}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--subtle___O9TkT.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:active:before{width:0}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--medium___cpKu6.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J,.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-menu___rbice{padding:var(--brand-control-medium-paddingBlock-condensed) var(--brand-control-medium-paddingInline-normal)}.Primer_Brand__ActionMenu-module__ActionMenu__inner-button-dropdown-icon___Pd6ae{vertical-align:middle!important}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-menu___rbice{z-index:0;border-top-left-radius:0;border-bottom-left-radius:0;position:relative}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--disabled___ZjXdS{cursor:not-allowed;pointer-events:none}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP{z-index:100;padding:var(--base-size-12);visibility:hidden;background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-radius:var(--brand-borderRadius-large);min-width:min-content;max-height:460px;position:absolute;overflow-y:auto;box-shadow:0 100px 80px #00000003,0 41px 33px #00000005,0 22px 17px #00000005,0 12px 10px #00000008,0 6px 5px #0000000a,0 2px 2px #00000012}.Primer_Brand__ActionMenu-module__ActionMenu__menu--small___EiV1K{padding:var(--base-size-8)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--medium___X8Sgj{padding:var(--base-size-12)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--visible___dIcw5{visibility:visible}.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-bottom___dEYrx{animation:.189s var(--brand-animation-easing-glide) 0s 1 normal none running Primer_Brand__ActionMenu-module__overlay-appear-outside-bottom___P9_uK}.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-top___WhOjX{animation:.189s var(--brand-animation-easing-glide) 0s 1 normal none running Primer_Brand__ActionMenu-module__overlay-appear-outside-top___hI7o9}@keyframes Primer_Brand__ActionMenu-module__overlay-appear-outside-bottom___P9_uK{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes Primer_Brand__ActionMenu-module__overlay-appear-outside-top___hI7o9{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.Primer_Brand__ActionMenu-module__ActionMenu__menu--medium___X8Sgj.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-bottom___dEYrx{margin-block-start:var(--base-size-8)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--medium___X8Sgj.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-top___WhOjX{margin-block-start:calc(var(--base-size-8) * -1)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--small___EiV1K.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-bottom___dEYrx{margin-block-start:var(--base-size-4)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--small___EiV1K.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-top___WhOjX{margin-block-start:calc(var(--base-size-4) * -1)}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP::-webkit-scrollbar{width:var(--base-size-12)}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP::-webkit-scrollbar-track{border-left:1px solid var(--brand-color-border-muted);border-top-right-radius:var(--brand-borderRadius-large);border-bottom-right-radius:var(--brand-borderRadius-large)}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP::-webkit-scrollbar-thumb{border-radius:var(--brand-borderRadius-medium);border:1px solid var(--brand-color-border-default);background-color:var(--brand-ActionMenu-color-scrollbar-thumb-bg)}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr{border-radius:var(--brand-borderRadius-medium);flex:1 0 auto;grid-template-columns:min-content 1fr;grid-template-areas:"leadingVisual text";align-items:center;list-style:none;display:grid}.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl{grid-template-columns:subgrid;grid-template-rows:subgrid;grid-gap:var(--base-size-8);align-items:center;gap:var(--base-size-8);color:var(--brand-color-text-default);grid-area:1/1/-1/-1;-webkit-text-decoration:none;text-decoration:none;display:grid}.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor--disabled___SrwBA{pointer-events:none;cursor:not-allowed}.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl:focus-visible{box-shadow:none;outline:none}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:has(.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl:focus-visible){box-shadow:0 0 0 var(--focus-outline-width) var(--brand-color-focus);outline:none;transition:none}.Primer_Brand__ActionMenu-module__ActionMenu__item--medium___YjquB{padding:var(--brand-control-medium-paddingBlock-condensed) var(--brand-control-medium-paddingInline-normal);min-height:var(--brand-control-medium-size)}.Primer_Brand__ActionMenu-module__ActionMenu__item--medium___YjquB:has(.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl){padding:0}.Primer_Brand__ActionMenu-module__ActionMenu__item--medium___YjquB .Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl{padding:var(--brand-control-medium-paddingBlock-condensed) var(--brand-control-medium-paddingInline-normal)}.Primer_Brand__ActionMenu-module__ActionMenu__item--small___Y17Or{padding:var(--base-size-8) var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr[aria-disabled=true]{cursor:not-allowed}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:hover:not(.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr[aria-disabled=true]){cursor:pointer;background-color:var(--brand-ActionMenu-color-item-hover)}.Primer_Brand__ActionMenu-module__ActionMenu__item--selection-type-single___ZdivU{padding-right:var(--base-size-48)}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:focus-visible{box-shadow:0 0 0 var(--focus-outline-width) var(--brand-color-focus);outline:none;transition:none}.Primer_Brand__ActionMenu-module__ActionMenu__item-leadingVisual___UWjE1{min-width:var(--base-size-16);margin-right:var(--brand-control-medium-gap);color:var(--brand-color-text-default);pointer-events:none;grid-area:leadingVisual;display:flex}.Primer_Brand__ActionMenu-module__ActionMenu__item-text___K_1vl{grid-area:text;width:max-content;display:grid}.Primer_Brand__ActionMenu-module__ActionMenu__item-text___K_1vl>span{line-height:var(--brand-control-medium-lineBoxHeight)}.Primer_Brand__ActionMenu-module__ActionMenu__item-icon___JyMwz{fill:var(--brand-color-text-default)}.Primer_Brand__ActionMenu-module__ActionMenu__item-content--disabled___WrxPY{color:var(--base-color-scale-gray-3)}.Primer_Brand__ActionMenu-module__ActionMenu__item-icon--disabled___Ebefz{fill:var(--base-color-scale-gray-3)}@media (forced-colors:active){.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:focus-visible{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}@media (prefers-reduced-motion:reduce){.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5,.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5:before,.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5:after,.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5 *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__ButtonGroup-module__ButtonGroup___QQSsj{gap:var(--base-size-8) var(--base-size-16);flex-flow:wrap;display:inline-flex}.Primer_Brand__ButtonGroup-module__ButtonGroup___QQSsj>*{flex-grow:1}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t{flex-wrap:nowrap;gap:0}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t .Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu{flex-grow:0;display:flex;position:relative}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t .Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:not(:first-child){margin-inline-start:calc(var(--brand-borderWidth-thin) * -1)}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t .Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:focus-within{z-index:1}.Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX.Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX{border-radius:0}.Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:first-child .Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX{border-start-start-radius:var(--brand-borderRadius-medium);border-end-start-radius:var(--brand-borderRadius-medium)}.Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:last-child .Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX{border-start-end-radius:var(--brand-borderRadius-medium);border-end-end-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Image-module__Image__container___acBJi{display:inline-block}.Primer_Brand__Image-module__Image___FgVuK{-o-object-fit:cover;object-fit:cover;display:inline-block}.Primer_Brand__Image-module__Image--aspect-ratio-custom___gXFxx{aspect-ratio:var(--brand-image-aspectRatio)}.Primer_Brand__Image-module__Image--aspect-ratio-1-1___gDnTF{aspect-ratio:1}.Primer_Brand__Image-module__Image--aspect-ratio-16-9___bscHI{aspect-ratio:16/9}.Primer_Brand__Image-module__Image--aspect-ratio-16-10___dkGM6{aspect-ratio:16/10}.Primer_Brand__Image-module__Image--aspect-ratio-4-3___Tt_MI{aspect-ratio:4/3}.Primer_Brand__Image-module__Image--borderRadius-small___p94p1{border-radius:var(--brand-borderRadius-small);display:block}.Primer_Brand__Image-module__Image--borderRadius-medium___VsUEt{border-radius:var(--brand-borderRadius-medium);display:block}.Primer_Brand__Image-module__Image--borderRadius-large___ivnDN{border-radius:var(--brand-borderRadius-large);display:block}.Primer_Brand__Image-module__Image--borderRadius-xlarge___X8Rkm{border-radius:var(--brand-borderRadius-xlarge);display:block}.Primer_Brand__Image-module__Image--borderRadius-full___AlwaQ{border-radius:var(--brand-borderRadius-full);display:block}:root{--brand-Hero-regular-padding:var(--base-size-128) 0;--brand-Hero-narrow-padding:var(--base-size-96) 0}.Primer_Brand__Link-module__Link___lvKjM{--visual-width:var(--external-icon-size,var(--arrow-size,0px));--gap:0px;-moz-column-gap:0px;-moz-column-gap:var(--gap);column-gap:0;column-gap:var(--gap);cursor:pointer;justify-content:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;display:inline-flex;position:relative}.Primer_Brand__Link-module__Link--arrow-start___AT1uu,.Primer_Brand__Link-module__Link--arrow-end___l0EPS{--gap:var(--base-size-4);--arrow-size:var(--base-size-16);position:relative;top:.05em}.Primer_Brand__Link-module__Link--arrow-start___AT1uu.Primer_Brand__Link-module__Link--large___cXMt5,.Primer_Brand__Link-module__Link--arrow-end___l0EPS.Primer_Brand__Link-module__Link--large___cXMt5{--arrow-size:var(--base-size-20)}.Primer_Brand__Link-module__Link--is-external___AthYf{--gap:var(--base-size-4);--external-icon-size:var(--base-size-16)}.Primer_Brand__Link-module__Link--is-external___AthYf.Primer_Brand__Link-module__Link--large___cXMt5{--external-icon-size:var(--base-size-20)}.Primer_Brand__Link-module__Link___lvKjM:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Link-module__Link___lvKjM:after{width:calc(100% - var(--gap) - var(--visual-width));pointer-events:none;content:"";border:var(--brand-borderWidth-thin) solid currentColor;transform-origin:0 0;position:absolute;bottom:-.15em;left:0;transform:scaleX(0)}@media screen and (prefers-reduced-motion:no-preference){.Primer_Brand__Link-module__Link___lvKjM:after{transition:transform var(--brand-animation-duration-fast) ease}}.Primer_Brand__Link-module__Link___lvKjM:active:after,.Primer_Brand__Link-module__Link___lvKjM:hover:after{transform:scaleX(1)}.Primer_Brand__Link-module__Link___lvKjM:focus:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__Link-module__Link--default___UKAcZ,.Primer_Brand__Link-module__Link--default___UKAcZ span{color:var(--brand-Link-color-default)}.Primer_Brand__Link-module__Link--accent___FWEDd,.Primer_Brand__Link-module__Link--accent___FWEDd span{color:var(--brand-Link-color-accent)}.Primer_Brand__Link-module__Link--label___j8etE{font-weight:var(--base-text-weight-medium);color:inherit!important}.Primer_Brand__Link-module__Link--large___cXMt5 .Primer_Brand__Link-module__Link--label___j8etE{font-size:var(--base-size-20)}.Primer_Brand__Link-module__Link--large___cXMt5 .Primer_Brand__Link-module__Link-arrow___HBMJ9{width:var(--arrow-size);height:var(--arrow-size)}.Primer_Brand__Link-module__Link--arrow-start___AT1uu:after{transform-origin:right 0;left:auto;right:0}@media (prefers-reduced-motion:reduce){.Primer_Brand__Link-module__Link___lvKjM,.Primer_Brand__Link-module__Link___lvKjM:before,.Primer_Brand__Link-module__Link___lvKjM:after,.Primer_Brand__Link-module__Link___lvKjM *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-Link-color-default:var(--brand-color-text-default);--brand-Link-color-accent:var(--brand-color-text-link-rest)}:root{--brand-RiverBreakout-variant-gridline-spacing-contentGap:var(--base-size-16);--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-20);--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd:var(--base-size-40);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-36);--brand-RiverBreakout-spacing-inner:var(--base-size-40);--brand-RiverAccordion-variant-gridline-spacing-contentGap:var(--base-size-32);--brand-RiverAccordion-variant-gridline-spacing-outerInline:var(--base-size-20);--brand-RiverAccordion-variant-gridline-spacing-outerBlock:var(--base-size-40);--brand-River-variant-gridline-spacing-outerInline:var(--base-size-20);--brand-River-variant-gridline-spacing-outerBlock:var(--base-size-40);--brand-River-variant-gridline-visual-padding:var(--base-size-32);--brand-River-spacing-outerBlock:var(--base-size-36);--brand-River-spacing-innerY:var(--base-size-24);--brand-River-spacing-inner:var(--base-size-40)}@media (width>=768px){:root{--brand-RiverBreakout-variant-gridline-spacing-contentGap:var(--base-size-20);--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-36);--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd:var(--base-size-48);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-40);--brand-RiverBreakout-spacing-inner:var(--base-size-48);--brand-RiverAccordion-variant-gridline-spacing-outerInline:var(--base-size-36);--brand-RiverAccordion-variant-gridline-spacing-outerBlock:var(--base-size-36);--brand-River-spacing-innerY:var(--base-size-24)}}@media (width>=1012px){:root{--brand-River-variant-gridline-visual-padding:var(--base-size-64)}}@media (width>=1280px){:root{--brand-RiverBreakout-variant-gridline-spacing-contentGap:var(--base-size-24);--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-64);--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd:var(--base-size-80);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-64);--brand-RiverBreakout-spacing-inner:var(--base-size-64);--brand-RiverAccordion-variant-gridline-spacing-contentGap:var(--base-size-64);--brand-RiverAccordion-variant-gridline-spacing-outerInline:var(--base-size-64);--brand-RiverAccordion-variant-gridline-spacing-outerBlock:var(--base-size-64);--brand-River-variant-gridline-spacing-outerInline:var(--base-size-64);--brand-River-variant-gridline-spacing-outerBlock:var(--base-size-64);--brand-River-spacing-outerBlock:var(--base-size-48);--brand-River-spacing-innerY:var(--base-size-32);--brand-River-spacing-inner:var(--base-size-24)}}.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE{grid-gap:0;grid-template:"visual""accordion"/1fr;gap:0;display:grid;position:relative}@media screen and (width>=63.25rem){.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE{--gap-width:var(--brand-Grid-spacing-column-gap);--column-and-gap-width:calc((100% + var(--gap-width)) / 12);--4-grid-columns:calc(4 * var(--column-and-gap-width));--7-grid-columns-minus-last-gap:calc((7 * var(--column-and-gap-width)) - var(--gap-width));gap:var(--column-and-gap-width);grid-template-rows:auto}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-start___RuTNC{grid-template-columns:var(--4-grid-columns) var(--7-grid-columns-minus-last-gap);grid-template-areas:"accordion visual"}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-end___cYDE6{grid-template-columns:var(--7-grid-columns-minus-last-gap) var(--4-grid-columns);grid-template-areas:"visual accordion"}}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{padding-inline:var(--brand-RiverAccordion-variant-gridline-spacing-outerInline);padding-block:var(--brand-RiverAccordion-variant-gridline-spacing-outerBlock);position:relative}@media screen and (width>=63.25rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{--gap-width:var(--brand-RiverAccordion-variant-gridline-spacing-contentGap);--half-column:calc(50% - var(--gap-width) / 2);gap:var(--gap-width);align-items:center}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet.Primer_Brand__RiverAccordion-module__RiverAccordion__align-start___RuTNC{grid-template-columns:var(--half-column) var(--half-column);grid-template-areas:"accordion visual"}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet.Primer_Brand__RiverAccordion-module__RiverAccordion__align-end___cYDE6{grid-template-columns:var(--half-column) var(--half-column);grid-template-areas:"visual accordion"}}@media (width>=80rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP{margin-inline:calc(-1 * var(--brand-RiverAccordion-variant-gridline-spacing-outerInline));margin-block-start:calc(-1 * var(--brand-RiverAccordion-variant-gridline-spacing-outerBlock))}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE{max-width:618px;margin-inline:auto}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf{border-radius:0}.Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{grid-area:accordion}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP{grid-area:visual}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf{border-radius:var(--base-size-6);grid-template-columns:subgrid;grid-template-rows:subgrid;width:100%;display:grid;overflow:hidden}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw{opacity:0;width:100%;height:100%;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), scale var(--brand-animation-duration-default) var(--brand-animation-easing-default);grid-area:1/1;align-items:center;display:flex;scale:1.05}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw>*{border-radius:var(--base-size-6);-o-object-fit:contain;object-fit:contain;width:100%;height:auto;display:block;overflow:hidden}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw img,.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw picture,.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw video{border-radius:var(--base-size-6);-o-object-fit:contain;object-fit:contain;width:100%;height:auto;display:block}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw>* img,.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw>* video{border-radius:var(--base-size-6);-o-object-fit:cover;object-fit:cover;width:100%;height:auto;display:block}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp{padding:var(--base-size-32);background:var(--brand-RiverAccordion-visual-background,var(--brand-color-canvas-subtle));justify-content:center;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp>*{border-radius:var(--base-size-6);justify-content:center;align-items:center;max-width:100%;height:auto;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp img,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp picture,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp video{border-radius:var(--base-size-6);max-width:100%;height:auto}@media screen and (width>=63.25rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA{grid-template-columns:1fr 1fr;align-items:stretch;gap:0;padding:0}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{padding:var(--brand-RiverAccordion-variant-gridline-spacing-outerBlock) var(--brand-RiverAccordion-variant-gridline-spacing-outerInline);flex-direction:column;justify-content:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-start___RuTNC.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{padding-inline-end:var(--brand-RiverAccordion-variant-gridline-spacing-contentGap)}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-end___cYDE6.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{padding-inline-start:var(--brand-RiverAccordion-variant-gridline-spacing-contentGap)}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP{margin:0}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf{height:100%}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp{padding:var(--base-size-64);justify-content:center;align-items:center}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp>*,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp img,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp picture,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp video{border-radius:var(--base-size-6)}}:is(.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:first-child) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:first-child,.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(2)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(2),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(3)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(3),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(4)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(4),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(5)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(5),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(6)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(6),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(7)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(7),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(8)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(8),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(9)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(9),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(10)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(10),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:not(:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:first-child){opacity:1;z-index:1;scale:1}.Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw{clip:rect(0, 0, 0, 0);word-wrap:normal;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH{border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-start:var(--base-size-32);position:relative}@media screen and (width<=63.24rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:last-child{border-bottom:none}}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:not(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq) .Primer_Brand__RiverAccordion-module__RiverAccordion__heading___STSM7{color:var(--brand-color-text-muted)}.Primer_Brand__RiverAccordion-module__RiverAccordion__trigger___x_yLq{color:inherit;cursor:pointer;font:inherit;text-align:left;width:100%;padding:0;padding:var(--base-size-4);margin:0;margin:calc(var(--base-size-4) * -1);background:0 0;border:none;justify-content:space-between;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__trigger--has-leading-visual___lyq8k{gap:var(--base-size-20);justify-content:flex-start}.Primer_Brand__RiverAccordion-module__RiverAccordion__leadingVisual___OseYz{height:var(--base-size-20);width:var(--base-size-20);flex-shrink:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__leadingVisual___OseYz>*{width:100%;height:100%}.Primer_Brand__RiverAccordion-module__RiverAccordion__headingText___tOQEC{flex:1;min-width:0}.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq .Primer_Brand__RiverAccordion-module__RiverAccordion__trigger___x_yLq{cursor:auto;cursor:initial}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:not(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq) .Primer_Brand__RiverAccordion-module__RiverAccordion__trigger___x_yLq:after{content:"";width:100%;height:100%;display:block;position:absolute}.Primer_Brand__RiverAccordion-module__RiverAccordion__panel___GkOCl{transition:grid-template-rows var(--brand-animation-duration-default) var(--brand-animation-easing-default), margin-block-start var(--brand-animation-duration-default) var(--brand-animation-easing-default), padding-block-end var(--brand-animation-duration-default) var(--brand-animation-easing-default);grid-template-rows:0fr;margin-block-start:var(--base-size-32);display:grid;overflow-y:clip}.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq .Primer_Brand__RiverAccordion-module__RiverAccordion__panel___GkOCl{grid-template-rows:1fr;margin-block-start:var(--base-size-12);padding-block-end:var(--base-size-32)}.Primer_Brand__RiverAccordion-module__RiverAccordion__content___ECkev{align-items:flex-start;gap:var(--base-size-20);flex-direction:column;min-height:0;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__leadingVisual___OseYz) .Primer_Brand__RiverAccordion-module__RiverAccordion__content___ECkev{padding-inline-start:calc(var(--base-size-20) + var(--base-size-20))}.Primer_Brand__RiverAccordion-module__RiverAccordion__icon___gl6pH{color:var(--brand-color-text-muted);flex-shrink:0;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq .Primer_Brand__RiverAccordion-module__RiverAccordion__icon___gl6pH{color:var(--brand-color-text-default)}.Primer_Brand__shared-module__gridline___Vmwmu{position:relative}.Primer_Brand__shared-module__gridline___Vmwmu:before,.Primer_Brand__shared-module__gridline___Vmwmu:after{content:"";border-top:var(--brand-borderWidth-thin) solid;-o-border-image:linear-gradient(var(--brand-color-border-muted), var(--brand-color-border-muted)) 1;border-image:linear-gradient(var(--brand-color-border-muted), var(--brand-color-border-muted)) 1;z-index:1;pointer-events:none;border-image-outset:0 100vw;height:0;position:absolute;left:0;right:0}.Primer_Brand__shared-module__gridline___Vmwmu:before{top:0}.Primer_Brand__shared-module__gridline___Vmwmu:after{bottom:0}:root,[data-color-mode=light]{--brand-Label-color-default:var(--brand-color-text-default);--brand-Label-color-blue:var(--base-color-scale-blue-5);--brand-Label-color-blue-purple-start:var(--base-color-scale-blue-5);--brand-Label-color-blue-purple-end:var(--base-color-scale-purple-5);--brand-Label-color-coral:var(--base-color-scale-coral-5);--brand-Label-color-green:var(--base-color-scale-green-6);--brand-Label-color-green-blue-start:var(--base-color-scale-green-6);--brand-Label-color-green-blue-end:var(--base-color-scale-blue-5);--brand-Label-color-green-blue-purple-1:#000aff;--brand-Label-color-green-blue-purple-2:#096bde;--brand-Label-color-green-blue-purple-3:var(--base-color-scale-green-6);--brand-Label-color-green-blue-purple-4:#8250df;--brand-Label-color-gray:var(--base-color-scale-gray-5);--brand-Label-color-indigo:var(--base-color-scale-indigo-5);--brand-Label-color-lemon:var(--base-color-scale-lemon-5);--brand-Label-color-lime:var(--base-color-scale-lime-5);--brand-Label-color-orange:var(--base-color-scale-orange-5);--brand-Label-color-pink:var(--base-color-scale-pink-5);--brand-Label-color-pink-blue-start:var(--base-color-scale-pink-5);--brand-Label-color-pink-blue-end:var(--base-color-scale-blue-5);--brand-Label-color-purple:var(--base-color-scale-purple-5);--brand-Label-color-purple-red-start:var(--base-color-scale-purple-5);--brand-Label-color-purple-red-end:var(--base-color-scale-red-5);--brand-Label-color-red:var(--base-color-scale-red-5);--brand-Label-color-red-orange-start:var(--base-color-scale-red-5);--brand-Label-color-red-orange-end:var(--base-color-scale-orange-5);--brand-Label-color-teal:var(--base-color-scale-teal-5);--brand-Label-color-yellow:var(--base-color-scale-yellow-5)}[data-color-mode=dark]{--brand-Label-color-default:var(--brand-color-text-default);--brand-Label-color-blue:var(--base-color-scale-blue-2);--brand-Label-color-blue-purple-start:var(--base-color-scale-blue-2);--brand-Label-color-blue-purple-end:var(--base-color-scale-purple-2);--brand-Label-color-coral:var(--base-color-scale-coral-2);--brand-Label-color-green:var(--base-color-scale-green-2);--brand-Label-color-green-blue-start:var(--base-color-scale-green-2);--brand-Label-color-green-blue-end:var(--base-color-scale-blue-2);--brand-Label-color-green-blue-purple-3:#00ff46;--brand-Label-color-gray:var(--base-color-scale-gray-2);--brand-Label-color-indigo:var(--base-color-scale-indigo-2);--brand-Label-color-lemon:var(--base-color-scale-lemon-2);--brand-Label-color-lime:var(--base-color-scale-lime-2);--brand-Label-color-orange:var(--base-color-scale-orange-2);--brand-Label-color-pink:var(--base-color-scale-pink-2);--brand-Label-color-pink-blue-start:var(--base-color-scale-pink-2);--brand-Label-color-pink-blue-end:var(--base-color-scale-blue-2);--brand-Label-color-purple:var(--base-color-scale-purple-2);--brand-Label-color-purple-red-start:var(--base-color-scale-purple-2);--brand-Label-color-purple-red-end:var(--base-color-scale-red-2);--brand-Label-color-red:var(--base-color-scale-red-2);--brand-Label-color-red-orange-start:var(--base-color-scale-red-2);--brand-Label-color-red-orange-end:var(--base-color-scale-orange-2);--brand-Label-color-teal:var(--base-color-scale-teal-2);--brand-Label-color-yellow:var(--base-color-scale-yellow-2)}.Primer_Brand__Label-module__Label___TW0HL{--brand-Label-gradient-radial:radial-gradient(circle at top left, var(--brand-Label-color-start), var(--brand-Label-color-end));--brand-Label-gradient-conical:conic-gradient(from 90deg at center, var(--brand-Label-color-stop-1) 0deg, var(--brand-Label-color-stop-2) 160deg, var(--brand-Label-color-stop-3) 175deg, var(--brand-Label-color-stop-4) 200deg, var(--brand-Label-color-stop-4) 350deg, var(--brand-Label-color-stop-1) 360deg);--brand-Label-background:var(--brand-Label-gradient-conical,var(--brand-Label-gradient-radial,var(--brand-Label-color,currentColor)));vertical-align:middle;border-radius:var(--brand-borderRadius-xlarge);color:var(--brand-Label-color-start,var(--brand-Label-color,currentColor));text-align:center;background:0 0;justify-content:center;align-items:center;height:min-content;display:inline-flex;position:relative}[data-color-mode=dark] .Primer_Brand__Label-module__Label___TW0HL{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Label-module__Label___TW0HL:before{content:"";padding:var(--brand-borderWidth-thin);border-radius:inherit;background:var(--brand-Label-background);-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask-composite:xor;position:absolute;inset:0;-webkit-mask-composite:xor;mask-composite:exclude}.Primer_Brand__Label-module__Label--size-small___TvoL_{min-height:var(--base-size-20);padding-inline:var(--base-size-8);padding-block:var(--base-size-2)}.Primer_Brand__Label-module__Label--size-small___TvoL_ .Primer_Brand__Label-module__Label__label___bD_B4{font-size:var(--base-size-12)!important}.Primer_Brand__Label-module__Label--size-medium___g4Jkm{min-height:var(--base-size-28);padding-inline:var(--base-size-16);padding-block:var(--base-size-4)}.Primer_Brand__Label-module__Label--size-large___BrKTp{min-height:var(--base-size-32);padding-inline:var(--base-size-16);padding-block:var(--base-size-4)}.Primer_Brand__Label-module__Label--color-default___YCx2l{--brand-Label-color:var(--brand-Label-color-default)}.Primer_Brand__Label-module__Label--color-blue___lZSxf{--brand-Label-color:var(--brand-Label-color-blue)}.Primer_Brand__Label-module__Label--color-blue-purple___ER3VP{--brand-Label-color-start:var(--brand-Label-color-blue-purple-start);--brand-Label-color-end:var(--brand-Label-color-blue-purple-end)}.Primer_Brand__Label-module__Label--color-coral___V0Yif{--brand-Label-color:var(--brand-Label-color-coral)}.Primer_Brand__Label-module__Label--color-green___SoiE4{--brand-Label-color:var(--brand-Label-color-green)}.Primer_Brand__Label-module__Label--color-green-blue___R2mSi{--brand-Label-color-start:var(--brand-Label-color-green-blue-start);--brand-Label-color-end:var(--brand-Label-color-green-blue-end)}.Primer_Brand__Label-module__Label--color-gray___MCa_k{--brand-Label-color:var(--brand-Label-color-gray)}.Primer_Brand__Label-module__Label--color-indigo___VEHOi{--brand-Label-color:var(--brand-Label-color-indigo)}.Primer_Brand__Label-module__Label--color-lemon___xvb0x{--brand-Label-color:var(--brand-Label-color-lemon)}.Primer_Brand__Label-module__Label--color-lime___rORM1{--brand-Label-color:var(--brand-Label-color-lime)}.Primer_Brand__Label-module__Label--color-orange___PMqMi{--brand-Label-color:var(--brand-Label-color-orange)}.Primer_Brand__Label-module__Label--color-pink___kHEv5{--brand-Label-color:var(--brand-Label-color-pink)}.Primer_Brand__Label-module__Label--color-pink-blue___y5skb{--brand-Label-color-start:var(--brand-Label-color-pink-blue-start);--brand-Label-color-end:var(--brand-Label-color-pink-blue-end)}.Primer_Brand__Label-module__Label--color-green-blue-purple___UKGU_{--brand-Label-color-stop-1:var(--brand-Label-color-green-blue-purple-1);--brand-Label-color-stop-2:var(--brand-Label-color-green-blue-purple-2);--brand-Label-color-stop-3:var(--brand-Label-color-green-blue-purple-3);--brand-Label-color-stop-4:var(--brand-Label-color-green-blue-purple-4)}.Primer_Brand__Label-module__Label--color-purple___ZHLtp{--brand-Label-color:var(--brand-Label-color-purple)}.Primer_Brand__Label-module__Label--color-purple-red___MsWGq{--brand-Label-color-start:var(--brand-Label-color-purple-red-start);--brand-Label-color-end:var(--brand-Label-color-purple-red-end)}.Primer_Brand__Label-module__Label--color-red___GYMDt{--brand-Label-color:var(--brand-Label-color-red)}.Primer_Brand__Label-module__Label--color-red-orange___FVyXX{--brand-Label-color-start:var(--brand-Label-color-red-orange-start);--brand-Label-color-end:var(--brand-Label-color-red-orange-end)}.Primer_Brand__Label-module__Label--color-teal___VOUIS{--brand-Label-color:var(--brand-Label-color-teal)}.Primer_Brand__Label-module__Label--color-yellow___S2Zu2{--brand-Label-color:var(--brand-Label-color-yellow)}.Primer_Brand__Label-module__Label__text____nAxj:not(.Primer_Brand__Label-module__Label--gradient___smCNu .Primer_Brand__Label-module__Label__text____nAxj){background:var(--brand-Label-background);-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone;box-decoration-break:clone;-webkit-background-clip:text;background-clip:text}.Primer_Brand__Label-module__Label__text____nAxj{line-height:var(--base-size-16)}.Primer_Brand__Label-module__Label__icon-visual___lD1Qa{height:var(--base-size-16);align-self:center;width:auto;display:flex}.Primer_Brand__Label-module__Label__leading-visual___a1rnF{margin-right:var(--base-size-8);display:flex}.Primer_Brand__Label-module__Label__label___bD_B4{font-weight:var(--base-text-weight-medium);line-height:inherit}@media (forced-colors:active){.Primer_Brand__Label-module__Label___TW0HL{outline:var(--brand-borderWidth-thin) solid transparent}}:root{--brand-River-visual-shadow:0px 100px 80px #00000004, 0px 41.7776px 33.4221px #00000006, 0px 22.3363px 17.869px #00000007, 0px 12.5216px 10.0172px #00000009, 0px 6.6501px 5.32008px #0000000b, 0px 2.76726px 2.21381px #00000012;--brand-River-label-margin:var(--base-size-16);--brand-River-heading-margin:var(--base-size-16)}:root,[data-color-mode=light]{--brand-InlineCode-color-fg-default:var(--brand-color-text-muted);--brand-InlineCode-color-fg-heading:var(--brand-color-text-default);--brand-InlineCode-bgColor:var(--base-color-scale-gray-1)}[data-color-mode=dark]{--brand-InlineCode-color-fg-default:var(--brand-color-text-muted);--brand-InlineCode-color-fg-heading:var(--brand-color-text-default);--brand-InlineCode-bgColor:var(--base-color-scale-gray-7)}.Primer_Brand__river-shared-module__River___eSXvR{grid-gap:var(--brand-River-spacing-inner);gap:var(--brand-River-spacing-inner);padding-inline:var(--brand-River-spacing-outerInline);padding-block:var(--brand-River-spacing-outerBlock);grid-auto-rows:min-content;display:grid;container-type:inline-size}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{padding-inline:var(--brand-River-variant-gridline-spacing-outerInline);padding-block:var(--brand-River-variant-gridline-spacing-outerBlock);gap:var(--base-size-32);position:relative}@media screen and (width>=48rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{gap:var(--base-size-28)}}@media screen and (width>=80rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__river-shared-module__River--align-center___VxJ3H{text-align:center}.Primer_Brand__river-shared-module__River__content___p4EdY{order:2}.Primer_Brand__river-shared-module__River__visual___kjFE2 img,.Primer_Brand__river-shared-module__River__visual___kjFE2 picture{display:block}.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL img,.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL picture,.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL video{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx{border-radius:var(--brand-borderRadius-large);overflow:hidden}.Primer_Brand__river-shared-module__River__visual--has-shadow___PyzIW{box-shadow:var(--brand-River-visual-shadow)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{background-color:var(--brand-color-canvas-subtle);padding:var(--brand-River-variant-gridline-visual-padding);margin-inline:calc(-1 * var(--brand-River-variant-gridline-spacing-outerInline));border-radius:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S img,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S picture,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S video{border-radius:var(--brand-borderRadius-large);width:auto;max-width:100%;height:auto}@media screen and (width<=47.99rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{justify-content:flex-end;align-items:flex-end;padding-block-end:0;padding-inline-end:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S img,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S picture,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S video{border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:0}}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__river-shared-module__River___eSXvR{width:100%;max-width:618px;margin-inline:auto}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{align-items:flex-end;padding-block-end:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S img,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S picture,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S video{border-end-end-radius:0;border-end-start-radius:0}}.Primer_Brand__river-shared-module__River__heading___tl6zS{margin-bottom:var(--brand-River-heading-margin)}.Primer_Brand__river-shared-module__River__call-to-action___yeIFh{margin-top:var(--base-size-24)}.Primer_Brand__river-shared-module__River__text___TQQhU strong,.Primer_Brand__river-shared-module__River__text___TQQhU b{font-weight:var(--base-text-weight-normal);color:var(--brand-color-text-default)}.Primer_Brand__river-shared-module__River__heading___tl6zS code,.Primer_Brand__river-shared-module__River__text___TQQhU code{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);white-space:normal;word-wrap:anywhere;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:1.6}.Primer_Brand__river-shared-module__River__leadingComponent___RBKiv img,.Primer_Brand__river-shared-module__River__leadingComponent___RBKiv picture,.Primer_Brand__river-shared-module__River__trailingComponent___bjdxv img,.Primer_Brand__river-shared-module__River__trailingComponent___bjdxv picture{display:block}.Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{margin-block-start:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-start:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River__label___ztaaN{margin-block-end:var(--brand-River-label-margin)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V .Primer_Brand__river-shared-module__River__visual___kjFE2{order:1}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V .Primer_Brand__river-shared-module__River__content___p4EdY{order:2}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4 .Primer_Brand__river-shared-module__River__content___p4EdY{order:1}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4 .Primer_Brand__river-shared-module__River__visual___kjFE2{order:2}@media screen and (width<=63.24rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-block-start:calc(-1 * var(--brand-River-variant-gridline-spacing-outerBlock))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-block-end:calc(-1 * var(--brand-River-variant-gridline-spacing-outerBlock))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-block-start:calc(-1 * var(--brand-River-variant-gridline-spacing-outerBlock))}}@media screen and (width>=63.25rem){.Primer_Brand__river-shared-module__River___eSXvR{grid-template-rows:initial}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin:0}.Primer_Brand__river-shared-module__River__content___p4EdY{order:initial}.Primer_Brand__river-shared-module__River--50-50___y5_l2{grid-template-columns:[content]1fr[visual]1fr}.Primer_Brand__river-shared-module__River--60-40___NljA1{grid-template-columns:[content]4fr[visual]6fr}.Primer_Brand__river-shared-module__River--align-start___wo12V{grid-template-areas:"content visual"}.Primer_Brand__river-shared-module__River--align-end___aNjz4{grid-template-areas:"visual content"}.Primer_Brand__river-shared-module__River--align-end___aNjz4.Primer_Brand__river-shared-module__River--60-40___NljA1{grid-template-columns:[visual]6fr[content]4fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-inline-start:calc(var(--base-size-80) + var(--base-size-8))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-inline-end:calc(var(--base-size-80) + var(--base-size-8))}.Primer_Brand__river-shared-module__River__content___p4EdY{grid-area:content;align-content:center;display:grid}.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__body-text___aJne5,.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__heading___tl6zS{max-width:400px}.Primer_Brand__river-shared-module__River--align-start___wo12V:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:var(--base-size-128)}.Primer_Brand__river-shared-module__River--align-end___aNjz4:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--base-size-128)}.Primer_Brand__river-shared-module__River__content--align-block-end___xI62E{align-content:end}.Primer_Brand__river-shared-module__River__visual___kjFE2{grid-area:visual}.Primer_Brand__river-shared-module__River--align-center___VxJ3H{grid-auto-rows:min-content;grid-template-columns:initial}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__content___p4EdY,.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual___kjFE2{grid-area:unset;justify-self:center}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__body-text___aJne5{justify-self:center;max-width:600px}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-bottom:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__content___p4EdY{margin-top:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H):has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){gap:0;padding:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H):has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){grid-template-columns:1fr 1fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--60-40___NljA1:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H):has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){grid-template-columns:560fr 676fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4.Primer_Brand__river-shared-module__River--60-40___NljA1:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){grid-template-columns:676fr 560fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--base-size-64);padding-inline-end:var(--brand-River-spacing-inner);padding-block:var(--brand-River-variant-gridline-spacing-outerBlock)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2.Primer_Brand__river-shared-module__River--align-start___wo12V:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:calc(var(--base-size-80) + var(--base-size-32))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--60-40___NljA1.Primer_Brand__river-shared-module__River--align-start___wo12V:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:var(--base-size-128)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--brand-River-spacing-inner);padding-inline-end:var(--base-size-64);padding-block:var(--brand-River-variant-gridline-spacing-outerBlock)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2.Primer_Brand__river-shared-module__River--align-end___aNjz4:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:calc(var(--base-size-80) + var(--base-size-32))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--60-40___NljA1.Primer_Brand__river-shared-module__River--align-end___aNjz4:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--base-size-128)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H) .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-inline:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){padding:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{width:100%;margin:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-bottom:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H{gap:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__content___p4EdY{margin-top:0;margin-bottom:var(--base-size-64)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline:var(--brand-River-variant-gridline-spacing-outerInline);padding-block-start:var(--brand-River-variant-gridline-spacing-outerBlock)}}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:center;align-items:flex-end;padding-block-end:0;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:flex-start;align-items:flex-end;padding-block-end:0;padding-inline-start:0;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:flex-end;align-items:flex-end;padding-block-end:0;padding-inline-end:0;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb{padding:var(--brand-River-variant-gridline-visual-padding)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK{border-radius:0;padding:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW [data-video-player-container]{border-radius:0;width:auto;max-width:100%;height:auto}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb [data-video-player-container]{border-radius:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 [data-video-player-container]{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R [data-video-player-container]{border-radius:var(--brand-borderRadius-large) var(--brand-borderRadius-large) 0 0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 [data-video-player-container]{border-radius:0;border-start-end-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW [data-video-player-container]{border-radius:0;border-start-start-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb [data-video-player-container]{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK [data-video-player-container]{-o-object-fit:cover;object-fit:cover;width:100%;max-width:none;height:100%}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK [data-video-player-container]{border-radius:0}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e{gap:var(--brand-RiverBreakout-spacing-inner);flex-direction:column;padding-block-start:var(--brand-River-spacing-outerBlock);padding-block-end:var(--brand-River-spacing-outerBlock);display:flex}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU{max-width:37.5rem;color:var(--brand-color-text-default);font-size:var(--brand-text-size-500);font-weight:var(--brand-heading-weight-500);letter-spacing:var(--brand-heading-letterSpacing-500);line-height:var(--brand-text-lineHeight-500)}.Primer_Brand__river-shared-module__RiverBreakout--muted___k_sJO .Primer_Brand__river-shared-module__River__text___TQQhU{color:var(--brand-color-text-muted)}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU em,.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU b{color:var(--brand-color-text-default);font-style:normal;font-weight:inherit}.Primer_Brand__river-shared-module__RiverBreakout__hiddenHeading___axLfo{clip:rect(1px, 1px, 1px, 1px);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{padding-block-start:var(--base-size-12)}@media screen and (width>=48rem){.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__content___p4EdY{grid-gap:var(--brand-River-spacing-inner);gap:var(--brand-River-spacing-inner);grid-row-gap:var(--brand-River-spacing-innerY);row-gap:var(--brand-River-spacing-innerY);grid-template-columns:5fr 3fr;grid-template-areas:"text trailingComponent""cta trailingComponent";grid-auto-rows:auto 1fr;display:grid}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU{grid-area:text}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{grid-area:cta;margin-block:0}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{grid-area:trailingComponent;justify-self:flex-end;margin-block-start:0}}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{padding-inline:var(--brand-RiverBreakout-variant-gridline-spacing-outerInline);gap:0;padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:0;position:relative}@media screen and (width<=63.24rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{width:100%;max-width:38.625rem;margin-inline:auto}}@media screen and (width>=618px){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{border-inline:none}}@media screen and (width>=1300px){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__visual___kjFE2{overflow:hidden}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__visual--rounded___x1iTx{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__content___p4EdY{gap:var(--brand-RiverBreakout-variant-gridline-spacing-contentGap);padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{padding-block-start:var(--base-size-12)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);margin-inline:calc(-1 * var(--brand-RiverBreakout-variant-gridline-spacing-outerInline));padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd);padding-inline:var(--brand-RiverBreakout-variant-gridline-spacing-outerInline)}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__content___p4EdY{flex-direction:column;display:flex}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{margin-block-start:0}}@media screen and (width>=63.25rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX:has(.Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY){padding-block-end:0}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__content___p4EdY{grid-template-columns:1fr 31rem;grid-template-areas:"text trailingComponent""cta trailingComponent";grid-template-columns:1fr var(--brand-RiverBreakout-gridline-trailing-width,31rem);grid-gap:var(--brand-RiverBreakout-variant-gridline-spacing-contentGap);gap:var(--brand-RiverBreakout-variant-gridline-spacing-contentGap);flex:1;grid-template-rows:auto 1fr;padding-block:0;display:grid}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__text___TQQhU{grid-area:text;padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{grid-area:cta;margin-block:0;padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{grid-area:trailingComponent;margin-block-start:0}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY{border-top:none;border-left:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-inline:0;padding-block:0;padding-inline-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerInline);align-self:stretch;margin-block:0;margin-inline:0;padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd)}}:root,[data-color-mode=light]{--brand-Accordion-toggle-color-start:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-end:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-default:var(--brand-color-text-default);--brand-Accordion-toggle-color-blue:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-blue-purple-start:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-blue-purple-end:var(--base-color-scale-purple-5);--brand-Accordion-toggle-color-coral:var(--base-color-scale-coral-5);--brand-Accordion-toggle-color-green:var(--base-color-scale-green-6);--brand-Accordion-toggle-color-green-blue-start:var(--base-color-scale-green-6);--brand-Accordion-toggle-color-green-blue-end:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-gray:var(--base-color-scale-gray-5);--brand-Accordion-toggle-color-indigo:var(--base-color-scale-indigo-5);--brand-Accordion-toggle-color-lemon:var(--base-color-scale-lemon-5);--brand-Accordion-toggle-color-lime:var(--base-color-scale-lime-5);--brand-Accordion-toggle-color-orange:var(--base-color-scale-orange-5);--brand-Accordion-toggle-color-pink:var(--base-color-scale-pink-5);--brand-Accordion-toggle-color-pink-blue-start:var(--base-color-scale-pink-5);--brand-Accordion-toggle-color-pink-blue-end:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-purple:var(--base-color-scale-purple-5);--brand-Accordion-toggle-color-purple-red-start:var(--base-color-scale-purple-5);--brand-Accordion-toggle-color-purple-red-end:var(--base-color-scale-red-5);--brand-Accordion-toggle-color-red:var(--base-color-scale-red-5);--brand-Accordion-toggle-color-red-orange-start:var(--base-color-scale-red-5);--brand-Accordion-toggle-color-red-orange-end:var(--base-color-scale-orange-5);--brand-Accordion-toggle-color-teal:var(--base-color-scale-teal-5);--brand-Accordion-toggle-color-yellow:var(--base-color-scale-yellow-5);--brand-Accordion-border-color-default:var(--brand-color-border-muted);--brand-Accordion-indicator-idle:var(--base-color-scale-gray-3);--brand-Accordion-indicator-hover:var(--base-color-scale-gray-5);--brand-Accordion-indicator-active:var(--brand-color-accent-primary)}[data-color-mode=dark]{--brand-Accordion-toggle-color-start:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-end:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-default:var(--brand-color-text-default);--brand-Accordion-toggle-color-blue:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-blue-purple-start:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-blue-purple-end:var(--base-color-scale-purple-2);--brand-Accordion-toggle-color-coral:var(--base-color-scale-coral-2);--brand-Accordion-toggle-color-green:var(--base-color-scale-green-2);--brand-Accordion-toggle-color-green-blue-start:var(--base-color-scale-green-2);--brand-Accordion-toggle-color-green-blue-end:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-gray:var(--base-color-scale-gray-2);--brand-Accordion-toggle-color-indigo:var(--base-color-scale-indigo-2);--brand-Accordion-toggle-color-lemon:var(--base-color-scale-lemon-2);--brand-Accordion-toggle-color-lime:var(--base-color-scale-lime-2);--brand-Accordion-toggle-color-orange:var(--base-color-scale-orange-2);--brand-Accordion-toggle-color-pink:var(--base-color-scale-pink-2);--brand-Accordion-toggle-color-pink-blue-start:var(--base-color-scale-pink-2);--brand-Accordion-toggle-color-pink-blue-end:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-purple:var(--base-color-scale-purple-2);--brand-Accordion-toggle-color-purple-red-start:var(--base-color-scale-purple-2);--brand-Accordion-toggle-color-purple-red-end:var(--base-color-scale-red-2);--brand-Accordion-toggle-color-red:var(--base-color-scale-red-2);--brand-Accordion-toggle-color-red-orange-start:var(--base-color-scale-red-2);--brand-Accordion-toggle-color-red-orange-end:var(--base-color-scale-orange-2);--brand-Accordion-toggle-color-teal:var(--base-color-scale-teal-2);--brand-Accordion-toggle-color-yellow:var(--base-color-scale-yellow-2);--brand-Accordion-border-color-default:var(--brand-color-border-muted);--brand-Accordion-indicator-idle:var(--base-color-scale-gray-7);--brand-Accordion-indicator-hover:var(--base-color-scale-gray-5);--brand-Accordion-indicator-active:var(--brand-color-accent-primary)}.Primer_Brand__Accordion-module__Accordion___M_LPt{--brand-Accordion-content-height:0px;box-sizing:border-box;position:relative}.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk:after,.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk .Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy,.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk>.Primer_Brand__Accordion-module__Accordion__content___wMZGe,.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{transition:none}.Primer_Brand__Accordion-module__Accordion--default___wLsHR{border-bottom:var(--brand-borderWidth-thin) solid var(--brand-Accordion-border-color-default)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{background-color:var(--brand-color-canvas-subtle);border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block:var(--base-size-20);padding-inline:var(--base-size-20);justify-content:flex-start;align-items:center;gap:0}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk:before{content:"";width:calc(var(--base-size-8) - 1px);height:var(--base-size-12);background-color:var(--brand-Accordion-indicator-idle);flex-shrink:0;margin-inline-end:var(--base-size-12);display:block}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk:hover:before{background-color:var(--brand-Accordion-indicator-hover)}details[open]>.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk:before{background-color:var(--brand-Accordion-indicator-active)}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h3,.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h4,.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h5,.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h6{font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-100);letter-spacing:.15px;text-transform:uppercase}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)+.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{border-block-start:none}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{padding-block-start:var(--base-size-12);padding-inline:var(--base-size-20)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA:after{block-size:var(--base-size-12)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA .Primer_Brand__Accordion-module__Accordion--default___wLsHR:last-child{border-bottom:none}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA .Primer_Brand__Accordion-module__Accordion--default___wLsHR:last-child:after{display:none}.Primer_Brand__Accordion-module__Accordion--default___wLsHR:after{content:"";background-color:var(--brand-Accordion-border-color-default);height:var(--brand-borderWidth-thin);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);transform-origin:50% 100%;width:100%;position:absolute;bottom:0;left:0;transform:scaleY(0)}.Primer_Brand__Accordion-module__Accordion--default___wLsHR:hover:after,details[open].Primer_Brand__Accordion-module__Accordion--default___wLsHR:after{background-color:var(--brand-color-accent-primary);transform:scaleY(1)}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{cursor:pointer;padding:var(--base-size-24) 0;justify-content:space-between;align-items:center;display:flex;position:relative}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc::-webkit-details-marker{display:none}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus)}details[open].Primer_Brand__Accordion-module__Accordion___M_LPt:has(>summary:focus-visible){outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}details[open].Primer_Brand__Accordion-module__Accordion___M_LPt>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc:focus-visible{outline:none}.Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{cursor:pointer;height:var(--base-size-24);width:var(--base-size-24);color:var(--brand-color-text-emphasized);justify-content:center;align-items:center;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc:not(.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW) .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{right:0}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{color:var(--brand-color-text-default);order:1;margin-inline-start:auto;position:static;transform:none}.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{left:0}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_ .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{color:var(--brand-Accordion-toggle-color-start,var(--brand-color-text-emphasized))}.Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy{transform-origin:50%;transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide)}details[open]>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc .Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy{transform:rotate(-180deg)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-default___J06Ol{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-default)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-blue___BpPxQ{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-blue)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-blue-purple___R4Ta3{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-blue-purple-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-coral___T3Lvh{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-coral)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-green___GThPe{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-green)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-green-blue___PHnZc{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-green-blue-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-gray___gGQN8{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-gray)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-indigo___f5_9S{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-indigo)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-lemon___c5Gz6{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-lemon)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-lime___Tj0cg{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-lime)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-orange____Dby3{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-orange)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-pink___BXVJc{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-pink)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-pink-blue___NVPxr{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-pink-blue-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-purple___whcwP{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-purple)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-purple-red___l3gUG{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-purple-red-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-red___txXJX{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-red)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-red-orange___ZODhv{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-red-orange-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-teal___h2drb{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-teal)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-yellow___WGTG3{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-yellow)}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_:not(.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW){padding-inline-end:var(--base-size-48)}.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW{padding-inline-start:var(--base-size-48)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe,.Primer_Brand__Accordion-module__Accordion__content___wMZGe p,.Primer_Brand__Accordion-module__Accordion__content___wMZGe span:not(.Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW),.Primer_Brand__Accordion-module__Accordion__content___wMZGe ul,.Primer_Brand__Accordion-module__Accordion__content___wMZGe ol{color:var(--brand-color-text-muted);font-family:var(--brand-fontStack-sansSerif);font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:0;transition:max-height var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);position:relative;overflow:hidden}.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{opacity:0;transition:opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-glide)}.Primer_Brand__Accordion-module__Accordion--default___wLsHR>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{top:calc(var(--base-size-2) - var(--base-size-24))}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA:before{content:"";block-size:var(--base-size-12);display:block}.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA:after{content:"";display:block}[data-color-mode=dark] .Primer_Brand__Accordion-module__Accordion__content___wMZGe{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Accordion-module__Accordion__content___wMZGe p:not(:first-child){margin-block-start:var(--base-size-16)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a{color:var(--brand-InlineLink-color-rest);-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a,.Primer_Brand__Accordion-module__Accordion__content___wMZGe a>span{font-weight:inherit;color:var(--brand-InlineLink-color-rest)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a:active,.Primer_Brand__Accordion-module__Accordion__content___wMZGe a:active>span{color:var(--brand-InlineLink-color-pressed)}details[open]>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:var(--brand-Accordion-content-height);z-index:0;position:relative}details[open].Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:none}details[open]>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{opacity:1}details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:0}details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{opacity:0}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe,details[open]>.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe,details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe{margin-block-start:0}details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc .Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy{transform:rotate(0)}details[open]>.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW+.Primer_Brand__Accordion-module__Accordion__content___wMZGe{padding-inline-start:var(--base-size-48)}@media screen and (width>=48rem){.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{gap:var(--base-size-40)}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Accordion-module__Accordion___M_LPt,.Primer_Brand__Accordion-module__Accordion___M_LPt:before,.Primer_Brand__Accordion-module__Accordion___M_LPt:after,.Primer_Brand__Accordion-module__Accordion___M_LPt *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Icon-module__Icon___bf2xY{box-sizing:content-box;padding:0}.Primer_Brand__Icon-module__Icon___bf2xY>svg{display:block}.Primer_Brand__Icon-module__Icon--size-20___bxF8U{width:var(--base-size-20);height:var(--base-size-20)}.Primer_Brand__Icon-module__Icon--size-24___yTJML{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__Icon-module__Icon--size-28___tnGmL{width:var(--base-size-28);height:var(--base-size-28)}.Primer_Brand__Icon-module__Icon--size-32___Rhkw8{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Icon-module__Icon--size-36___F4Mcj{width:var(--base-size-36);height:var(--base-size-36)}.Primer_Brand__Icon-module__Icon--size-40___cXhgu{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Icon-module__Icon--size-44___vwox2{width:var(--base-size-44);height:var(--base-size-44)}.Primer_Brand__Icon-module__Icon--background___d6RdL{padding:var(--base-size-12);border-radius:var(--base-size-12)}.Primer_Brand__Icon-module__Icon--color-default___z2cYk{color:var(--brand-Icon-color-default)}.Primer_Brand__Icon-module__Icon--background-color-default___h6tiH{background-color:var(--brand-Icon-background-default)}.Primer_Brand__Icon-module__Icon--color-blue___Wne9C{color:var(--brand-Icon-color-blue)}.Primer_Brand__Icon-module__Icon--background-color-blue___zsNDL{background-color:var(--brand-Icon-background-blue)}.Primer_Brand__Icon-module__Icon--color-coral___vdwGj{color:var(--brand-Icon-color-coral)}.Primer_Brand__Icon-module__Icon--background-color-coral___FKaij{background-color:var(--brand-Icon-background-coral)}.Primer_Brand__Icon-module__Icon--color-green___OxAZK{color:var(--brand-Icon-color-green)}.Primer_Brand__Icon-module__Icon--background-color-green___UUQt1{background-color:var(--brand-Icon-background-green)}.Primer_Brand__Icon-module__Icon--color-gray___tVTnd{color:var(--brand-Icon-color-gray)}.Primer_Brand__Icon-module__Icon--background-color-gray___dpdtX{background-color:var(--brand-Icon-background-gray)}.Primer_Brand__Icon-module__Icon--color-indigo___OrE5M{color:var(--brand-Icon-color-indigo)}.Primer_Brand__Icon-module__Icon--background-color-indigo___TIqOT{background-color:var(--brand-Icon-background-indigo)}.Primer_Brand__Icon-module__Icon--color-lemon___Ftx9H{color:var(--brand-Icon-color-lemon)}.Primer_Brand__Icon-module__Icon--background-color-lemon___BhpS6{background-color:var(--brand-Icon-background-lemon)}.Primer_Brand__Icon-module__Icon--color-lime___mQVWo{color:var(--brand-Icon-color-lime)}.Primer_Brand__Icon-module__Icon--background-color-lime___K4TMA{background-color:var(--brand-Icon-background-lime)}.Primer_Brand__Icon-module__Icon--color-orange___CIjjp{color:var(--brand-Icon-color-orange)}.Primer_Brand__Icon-module__Icon--background-color-orange___z52U7{background-color:var(--brand-Icon-background-orange)}.Primer_Brand__Icon-module__Icon--color-pink___cS_v5{color:var(--brand-Icon-color-pink)}.Primer_Brand__Icon-module__Icon--background-color-pink___cy5Kg{background-color:var(--brand-Icon-background-pink)}.Primer_Brand__Icon-module__Icon--color-purple___d05Sh{color:var(--brand-Icon-color-purple)}.Primer_Brand__Icon-module__Icon--background-color-purple___JmhnQ{background-color:var(--brand-Icon-background-purple)}.Primer_Brand__Icon-module__Icon--color-red___K_2c0{color:var(--brand-Icon-color-red)}.Primer_Brand__Icon-module__Icon--background-color-red___qoirP{background-color:var(--brand-Icon-background-red)}.Primer_Brand__Icon-module__Icon--color-teal___fix20{color:var(--brand-Icon-color-teal)}.Primer_Brand__Icon-module__Icon--background-color-teal___a7cyd{background-color:var(--brand-Icon-background-teal)}.Primer_Brand__Icon-module__Icon--color-yellow___Z1juk{color:var(--brand-Icon-color-yellow)}.Primer_Brand__Icon-module__Icon--background-color-yellow___Yhfck{background-color:var(--brand-Icon-background-yellow)}:root{--brand-Icon-color-yellow:var(--base-color-scale-yellow-5);--brand-Icon-color-teal:var(--base-color-scale-teal-5);--brand-Icon-color-red:var(--base-color-scale-red-5);--brand-Icon-color-purple:var(--base-color-scale-purple-5);--brand-Icon-color-pink:var(--base-color-scale-pink-5);--brand-Icon-color-orange:var(--base-color-scale-orange-5);--brand-Icon-color-lime:var(--base-color-scale-lime-5);--brand-Icon-color-lemon:var(--base-color-scale-lemon-5);--brand-Icon-color-indigo:var(--base-color-scale-indigo-5);--brand-Icon-color-gray:var(--base-color-scale-gray-6);--brand-Icon-color-green:var(--base-color-scale-green-6);--brand-Icon-color-coral:var(--base-color-scale-coral-5);--brand-Icon-color-blue:var(--base-color-scale-blue-5);--brand-Icon-color-default:var(--brand-Icon-color-green);--brand-Icon-background-yellow:var(--base-color-scale-yellow-0);--brand-Icon-background-teal:var(--base-color-scale-teal-0);--brand-Icon-background-red:var(--base-color-scale-red-0);--brand-Icon-background-purple:var(--base-color-scale-purple-0);--brand-Icon-background-pink:var(--base-color-scale-pink-0);--brand-Icon-background-orange:var(--base-color-scale-orange-0);--brand-Icon-background-lime:var(--base-color-scale-lime-0);--brand-Icon-background-lemon:var(--base-color-scale-lemon-0);--brand-Icon-background-indigo:var(--base-color-scale-indigo-0);--brand-Icon-background-gray:var(--base-color-scale-gray-0);--brand-Icon-background-green:var(--base-color-scale-green-0);--brand-Icon-background-coral:var(--base-color-scale-coral-0);--brand-Icon-background-blue:var(--base-color-scale-blue-0);--brand-Icon-background-default:var(--brand-Icon-background-green)}:root,[data-color-mode=light]{--brand-Icon-background-default:var(--brand-Icon-background-green);--brand-Icon-background-blue:var(--base-color-scale-blue-0);--brand-Icon-background-coral:var(--base-color-scale-coral-0);--brand-Icon-background-green:var(--base-color-scale-green-0);--brand-Icon-background-gray:var(--base-color-scale-gray-0);--brand-Icon-background-indigo:var(--base-color-scale-indigo-0);--brand-Icon-background-lemon:var(--base-color-scale-lemon-0);--brand-Icon-background-lime:var(--base-color-scale-lime-0);--brand-Icon-background-orange:var(--base-color-scale-orange-0);--brand-Icon-background-pink:var(--base-color-scale-pink-0);--brand-Icon-background-purple:var(--base-color-scale-purple-0);--brand-Icon-background-red:var(--base-color-scale-red-0);--brand-Icon-background-teal:var(--base-color-scale-teal-0);--brand-Icon-background-yellow:var(--base-color-scale-yellow-0);--brand-Icon-color-default:var(--brand-Icon-color-green);--brand-Icon-color-blue:var(--base-color-scale-blue-5);--brand-Icon-color-coral:var(--base-color-scale-coral-5);--brand-Icon-color-green:var(--base-color-scale-green-6);--brand-Icon-color-gray:var(--base-color-scale-gray-6);--brand-Icon-color-indigo:var(--base-color-scale-indigo-5);--brand-Icon-color-lemon:var(--base-color-scale-lemon-5);--brand-Icon-color-lime:var(--base-color-scale-lime-5);--brand-Icon-color-orange:var(--base-color-scale-orange-5);--brand-Icon-color-pink:var(--base-color-scale-pink-5);--brand-Icon-color-purple:var(--base-color-scale-purple-5);--brand-Icon-color-red:var(--base-color-scale-red-5);--brand-Icon-color-teal:var(--base-color-scale-teal-5);--brand-Icon-color-yellow:var(--base-color-scale-yellow-5)}[data-color-mode=dark]{--brand-Icon-background-default:var(--brand-Icon-background-green);--brand-Icon-background-blue:var(--base-color-scale-blue-8);--brand-Icon-background-coral:var(--base-color-scale-coral-8);--brand-Icon-background-green:var(--base-color-scale-green-8);--brand-Icon-background-gray:var(--base-color-scale-gray-6);--brand-Icon-background-indigo:var(--base-color-scale-indigo-8);--brand-Icon-background-lemon:var(--base-color-scale-lemon-8);--brand-Icon-background-lime:var(--base-color-scale-lime-8);--brand-Icon-background-orange:var(--base-color-scale-orange-8);--brand-Icon-background-pink:var(--base-color-scale-pink-8);--brand-Icon-background-purple:var(--base-color-scale-purple-8);--brand-Icon-background-red:var(--base-color-scale-red-8);--brand-Icon-background-teal:var(--base-color-scale-teal-8);--brand-Icon-background-yellow:var(--base-color-scale-yellow-8);--brand-Icon-color-default:var(--brand-Icon-color-green);--brand-Icon-color-blue:var(--base-color-scale-blue-2);--brand-Icon-color-coral:var(--base-color-scale-coral-2);--brand-Icon-color-green:var(--base-color-scale-green-2);--brand-Icon-color-gray:var(--base-color-scale-gray-2);--brand-Icon-color-indigo:var(--base-color-scale-indigo-2);--brand-Icon-color-lemon:var(--base-color-scale-lemon-2);--brand-Icon-color-lime:var(--base-color-scale-lime-2);--brand-Icon-color-orange:var(--base-color-scale-orange-2);--brand-Icon-color-pink:var(--base-color-scale-pink-2);--brand-Icon-color-purple:var(--base-color-scale-purple-2);--brand-Icon-color-red:var(--base-color-scale-red-2);--brand-Icon-color-teal:var(--base-color-scale-teal-2);--brand-Icon-color-yellow:var(--base-color-scale-yellow-2)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{--river-breakout-tabs-columns:1}@media screen and (width<=63.24rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{width:100%;max-width:38.625rem;margin-inline:auto}}@media screen and (width>=80rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-60);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-60)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordion___sGtKW{flex-direction:column;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabList___xlU3i{flex-direction:column;padding-block-end:var(--base-size-80);display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisuals___hDA4K{border-radius:var(--brand-borderRadius-small);order:1;width:100%;margin-block-end:var(--base-size-36);position:relative;overflow:hidden}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisuals___yL4Ev{width:100%;margin-block-end:var(--base-size-16);position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_{z-index:1;min-width:0;position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__backgroundVisual___rywqw{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{z-index:1;position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{padding:var(--base-size-32)}@media screen and (width>=63.25rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{padding:var(--base-size-64)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--image-position-block-end___qTggg .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--image-position-block-end___qTggg .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{padding-block-end:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9:has(>[data-video-player-container]){border-radius:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__visual--rounded___herZ2>[data-video-player-container]{border-radius:var(--brand-borderRadius-medium);overflow:hidden}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--image-position-block-end___qTggg .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__visual--rounded___herZ2>[data-video-player-container]{border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--background-visual-full-bleed___EsvXd .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisuals___hDA4K{border-radius:0;overflow:visible}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--background-visual-full-bleed___EsvXd .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__backgroundVisual___rywqw{inset-block-start:calc(-1 * var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock));inset-inline:calc(-1 * var(--brand-RiverBreakout-variant-gridline-spacing-outerInline))}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9 img,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9 picture,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9 video,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU img,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU picture,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU video{max-width:100%;display:block}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9 [class*=River__visual--rounded]{border-radius:var(--brand-borderRadius-small)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_[hidden]{display:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tablist___f5FNH{grid-template-columns:repeat(var(--river-breakout-tabs-columns), minmax(0, 1fr));grid-gap:var(--base-size-40);gap:var(--base-size-40);order:2;display:grid}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListActions___iCX6R{grid-template-columns:repeat(var(--river-breakout-tabs-columns), minmax(0, 1fr));grid-gap:var(--base-size-40);gap:var(--base-size-40);order:3;display:grid}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item___SymTq{flex-direction:column;align-items:flex-start;min-width:0;display:flex;position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item___SymTq:before{content:"";height:var(--brand-borderWidth-thin);transform-origin:50% 0;background-color:var(--brand-color-border-muted);transition:transform var(--brand-animation-duration-fast) ease, background-color var(--brand-animation-duration-fast) ease;position:absolute;inset-block-start:0;inset-inline:0;transform:scaleY(1)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item--selected___dLXod:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}@media screen and (width>=63.25rem) and (hover:hover) and (pointer:fine){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item___SymTq:hover:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__heading___HScg4{color:var(--brand-color-text-muted);transition:color var(--brand-animation-duration-fast) ease-in-out;margin:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item--selected___dLXod .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__heading___HScg4{color:var(--brand-color-text-default)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__icon___Xr8op{justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tab___tHZFA{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;outline:none;flex-direction:column;align-items:flex-start;padding-block-start:var(--base-size-28);padding-inline:0;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tab___tHZFA:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-4)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tabHeading___cEwLt{margin:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tab___tHZFA>*+.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tabHeading___cEwLt{margin-block-start:var(--base-size-20)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListContent___D9V9I{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;margin-block-start:var(--base-size-12);display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListAction___SaBmu{color:var(--brand-Link-color-accent);font-weight:var(--base-text-weight-medium);-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListActionItem___q6pS2{margin-block-start:var(--base-size-12)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__content___LpEoz{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordion___sGtKW{padding-block-end:var(--base-size-40)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5>span{color:var(--brand-Link-color-accent);font-weight:var(--base-text-weight-medium)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o{border-top:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o:after{display:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o:before{content:"";height:var(--brand-borderWidth-thin);transform-origin:50% 0;background-color:var(--brand-color-border-muted);transition:transform var(--brand-animation-duration-fast) ease, background-color var(--brand-animation-duration-fast) ease;position:absolute;inset-block-start:0;inset-inline:0;transform:scaleY(1)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item--selected___dLXod:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}@media (hover:hover) and (pointer:fine){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o:hover:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionHeading___RiuA9{color:var(--brand-color-text-default)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionHeadingInner___vvOjI{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:inline-flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionIcon___pslaZ{flex-shrink:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionLabel___gIy1N{align-items:center;display:inline-flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionPanel___EqiKL{gap:var(--base-size-24);flex-direction:column;display:flex}@media screen and (width>=618px){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{border-inline:none}}@media screen and (width>=1300px){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--ease:cubic-bezier(.22, .56, .23, .89);-webkit-font-smoothing:antialiased;--stackDistance:calc(var(--base-size-24) * -1);--visualMaxWidth:1032px;--visualMaxWidthUL:1032;--visualMaxHeight:min(690px, 60vh);--visualMaxHeightUL:690;--storyScrollPadding:min(32px, 5vw);position:relative}@media (height<=720px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--visualMaxHeight:55vh}}@media (height<=600px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--visualMaxHeight:50vh}}@media (height<=500px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--visualMaxHeight:40vh}}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__inner___V0daX{position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-cover___rCa_Y{width:100%;position:absolute;left:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__image___WmawN{z-index:10;border-radius:var(--brand-borderRadius-large);width:auto;margin-left:auto;margin-right:auto;display:block;position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll--enabled___EpqB5 .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__internal-river___eUmDR{grid-template-columns:1fr;gap:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll--enabled___EpqB5 .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__internal-river___eUmDR img,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll--enabled___EpqB5 .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__internal-river___eUmDR video{display:none}@media (width<=542px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--topOffset:calc((100vh - min(664px, 60vh)) / 5)}}@media (width<=768px) and (height>=670px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--extraBottomSpacing:calc(-1 * (100vh - 100vw) / 5)}}@media (width>=542px) and (width<=1028px) and (height>=670px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--extraBottomSpacing:calc(-1 * (100vh - 100vw) / 3)}}@media (width>=542px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--scrollTextHeight:42vh}}@media (height<=520px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--scrollTextHeight:70vh}}@media (width>=1028px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--stackDistance:-30px}}@media (height<=800px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--stackDistance:-20px}}@media (height<=500px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--stackDistance:-15px}}@media screen and (width<=768px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--topOffset:calc((100vh - min(664px, 60vh)) / 3);--availableWidth:calc(100vw - var(--storyScrollPadding) * 2);--relativeVisualHeight:calc(var(--visualMaxHeightUL) / var(--visualMaxWidthUL) * var(--availableWidth));--visualHeight:min(var(--visualMaxHeight), var(--relativeVisualHeight));--visualWidth:calc(var(--visualHeight) * var(--visualMaxWidthUL) / var(--visualMaxHeightUL));--scrollTextHeight:58vh;--textToVisualPadding:max(5vh, 40px);--topScrollOffset:calc(var(--visualHeight));--bottomScrollOffset:calc(100vh - var(--topOffset) - var(--visualHeight) - var(--textToVisualPadding));--extraBottomSpacing:70px}@supports (height:100dvh){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR{height:100dvh}}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container___ZJlnt{width:100%;height:100%;position:absolute;top:0;left:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo{min-height:var(--scrollTextHeight);transition:opacity .3s var(--ease);position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo:has(+.Primer_Brand__RiverStoryScroll-module__in-viewport___AxNUA){opacity:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__in-viewport___AxNUA+.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg{opacity:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{max-width:calc(1032px + var(--storyScrollPadding) * 2);padding-right:var(--storyScrollPadding);padding-left:var(--storyScrollPadding);margin-top:min(30vw,22vh);margin-left:auto;margin-right:auto}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq{padding-top:var(--topScrollOffset);padding-bottom:var(--bottomScrollOffset)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__image___WmawN{width:100%;height:auto;max-width:var(--visualWidth);border-radius:var(--brand-borderRadius-large)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR{pointer-events:none;padding-top:var(--topOffset);margin-top:calc(-1 * var(--topOffset));z-index:1;flex-direction:column;height:100vh;display:flex;position:sticky;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual--below___gJyav{background-image:linear-gradient(180deg, var(--brand-RiverStoryScroll-content-inactive-bgColor) calc(var(--topOffset) + var(--visualHeight) + 3px), transparent calc(var(--topOffset) + var(--visualHeight) + var(--textToVisualPadding)), transparent 93%, var(--brand-RiverStoryScroll-content-inactive-bgColor) 99%)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual--below___gJyav .Primer_Brand__RiverStoryScroll-module__story-scroll-text___isxdl{margin-top:var(--base-size-40)}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B{opacity:0;display:none}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:nth-child(2){opacity:1;display:block}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C{transition:.5s var(--ease) transform, .5s var(--ease) filter, .5s var(--ease) opacity;pointer-events:auto}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(~.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){margin-left:auto;margin-right:auto;display:block;position:absolute;left:0;right:0}.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B{transform:translateY(calc(var(--stackDistance) * -1)) scale(1.015);margin-left:auto;margin-right:auto;display:block;position:absolute;left:0;right:0}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(var(--stackDistance)) scale(.95);filter:brightness(70%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(calc(var(--stackDistance) * 2)) scale(.9);filter:brightness(50%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(calc(var(--stackDistance) * 3)) scale(.85);filter:brightness(30%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(calc(var(--stackDistance) * 4)) scale(.8);filter:brightness(10%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv{display:block;position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-stack___jBEVs{padding-top:var(--textToVisualPadding);top:calc(var(--topOffset) + var(--visualHeight));position:sticky}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo:last-child .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-stack___jBEVs{height:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv{gap:var(--base-size-4);left:calc(var(--base-size-20) * -1 - 2px);height:var(--visualHeight);margin:auto;flex-direction:column;justify-content:center;margin-block-start:calc(var(--base-size-20) * -1);display:flex;position:absolute;right:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k{border-radius:var(--brand-borderRadius-large);opacity:.55;background:var(--brand-RiverStoryScroll-pagination-fgColor);width:6px;height:6px;transition:opacity var(--brand-animation-duration-default) var(--ease), height var(--brand-animation-duration-default) var(--ease)}.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(2)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:first-child,.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(3)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(2),.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(4)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(3),.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(5)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(4),.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(6)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(5){opacity:1;height:var(--base-size-24)}}@media screen and (width>=768px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__inner___V0daX{grid-gap:var(--base-size-24);gap:var(--base-size-24);grid-template-columns:1fr 1fr;display:grid}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container___ZJlnt{order:2;align-items:center;width:100%;height:80vh;display:flex;position:sticky;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__image___WmawN{width:100%}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C{width:100%;transition:opacity .3s var(--ease);padding-top:10vh;position:sticky;top:0;right:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual--below___gJyav{position:sticky;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B{z-index:-1;opacity:0;position:absolute;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv{z-index:1;opacity:1}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container____Rsbs.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq{padding-top:10vh}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container____Rsbs.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo{padding:20vh 0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg{position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo{filter:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg{filter:blur(1px);transition:filter var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo:after{content:"";transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), visibility var(--brand-animation-duration-extended) var(--brand-animation-easing-default);opacity:0;visibility:hidden;background-color:var(--brand-RiverStoryScroll-content-inactive-bgColor);position:absolute;inset:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg:after{opacity:.7;visibility:visible}}@media screen and (width>=768px) and (height>=900px) and (prefers-reduced-motion:no-preference){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{margin-top:-20vh}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container____Rsbs.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq{padding-top:16vh}}@media (prefers-reduced-motion:reduce){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z:before,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z:after,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-RiverStoryScroll-pagination-fgColor:var(--base-color-scale-gray-6);--brand-RiverStoryScroll-content-inactive-bgColor:var(--brand-color-canvas-default)}[data-color-mode=dark]{--brand-RiverStoryScroll-pagination-fgColor:var(--base-color-scale-white-0);--brand-RiverStoryScroll-content-inactive-bgColor:var(--brand-color-canvas-default)}.Primer_Brand__Pagination-module__Pagination___qDHkk{margin-top:var(--base-size-20);margin-bottom:var(--base-size-16);text-align:center}.Primer_Brand__Pagination-module__Pagination__inner___tB9Za{justify-content:center;align-items:center;gap:var(--base-size-8);flex-wrap:wrap;display:inline-flex}.Primer_Brand__Pagination-module__Pagination__pageItem___Ehtp4{--brand-button-subtle-borderColor-rest:transparent;--brand-button-subtle-borderColor-hover:transparent;--brand-button-subtle-borderColor-active:transparent;transition:none}.Primer_Brand__Pagination-module__Pagination__controlContent___QuYzj{gap:var(--base-size-4);align-items:center;display:inline-flex;position:relative}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper___UbqtD{flex-shrink:0;display:none}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper--previous___yVz6V{transform:translateX(var(--base-size-2))}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper--next___jHfRO{transform:translateX(calc(var(--base-size-2) * -1))}.Primer_Brand__Pagination-module__Pagination__controlArrow___gKpCw{width:var(--base-size-16);height:var(--base-size-16)}@media screen and (width<=47.99rem){.Primer_Brand__Pagination-module__Pagination__controlItem___jcLa5{padding-inline:var(--base-size-8);--brand-button-subtle-borderColor-rest:transparent;--brand-button-subtle-borderColor-hover:transparent;--brand-button-subtle-borderColor-active:transparent}.Primer_Brand__Pagination-module__Pagination__controlText___jthrj{width:var(--base-size-2);height:var(--base-size-2);clip:rect(0, 0, 0, 0);word-wrap:normal;border:0;padding:0;position:absolute;overflow:hidden}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper___UbqtD{display:flex}.Primer_Brand__Pagination-module__Pagination__controlItem___jcLa5>span{align-items:center;display:flex}.Primer_Brand__Pagination-module__Pagination__controlItem___jcLa5>span>span{align-items:center;line-height:0;display:flex}}:root,[data-color-mode=light]{--brand-MediaPlaylist-bgColor:linear-gradient(180deg, #f2f5f380 0%, #f2f5f300 100%), var(--brand-color-canvas-default)}[data-color-mode=dark]{--brand-MediaPlaylist-bgColor:linear-gradient(180deg, var(--base-color-scale-gray-8) 0%, var(--base-color-scale-black-0) 100%), var(--brand-color-canvas-default)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{padding-block-start:var(--base-size-36);padding-inline:var(--base-size-20)}@media screen and (width<=63.24rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{width:100%;max-width:38.625rem;margin-inline:auto;padding:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h1+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h2+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h3+p{margin-block-start:var(--base-size-12)}}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__layout___YZKVk{background:var(--brand-MediaPlaylist-bgColor);flex-direction:column;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__playlist___nIpOa{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);order:2;min-width:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__heading___nM7Ip{min-height:var(--base-size-48);align-items:center;gap:var(--base-size-8);padding:var(--base-size-12) var(--base-size-16);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);color:var(--brand-color-text-muted);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);text-transform:uppercase;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__headingLabel___BRQPm{color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-transform:inherit;margin:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__headingCounter___ao736{align-items:center;gap:var(--base-size-8);color:var(--brand-color-text-default);display:inline-flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__headingCounter___ao736:before{content:"•";color:var(--brand-color-text-muted)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanels___hwtyP{width:100%;padding:var(--base-size-16);order:1}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanel___sTQVI{min-width:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanel___sTQVI[hidden]{display:none}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panel___VH451{gap:var(--base-size-20);flex-direction:column;width:100%;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL{max-width:var(--brand-Prose-lineLength)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR{background-color:var(--base-color-scale-black-0);overflow:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR img,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR picture,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR video,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR iframe{width:100%;max-width:100%;display:block}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tablist___IODGO{flex-direction:column;order:2;display:flex;overflow-x:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist--overflowItems___tKiJV .Primer_Brand__MediaPlaylist-module__MediaPlaylist__tablist___IODGO{max-block-size:calc((3 * var(--base-size-64)) + (6 * var(--base-size-12)));overscroll-behavior:contain;scroll-padding-block:var(--base-size-24);overflow-y:auto}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__pagination___WG5zu{padding:var(--base-size-12) var(--base-size-16) var(--base-size-16);border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);order:3;justify-content:center;margin:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item___BXYUO{min-width:0;min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-12)));flex-direction:column;flex:none;align-items:flex-start;display:flex;position:relative;overflow-x:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item___BXYUO:before{content:"";height:var(--brand-borderWidth-thin);transform-origin:50% 100%;background-color:var(--brand-color-border-muted);transition:transform var(--brand-animation-duration-fast) ease, background-color var(--brand-animation-duration-fast) ease;position:absolute;inset-block-end:0;inset-inline:0;transform:scaleY(1)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item--selected___vmJ8h{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item--selected___vmJ8h:before{background-color:var(--brand-color-accent-primary);transform:scaleY(2)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeading___mWbE8{color:var(--brand-color-text-muted);margin:0;display:block}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item--selected___vmJ8h .Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeading___mWbE8{color:var(--brand-color-text-default)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingContent___Nl9LU{flex:auto;min-width:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingDetails___Y6For{gap:var(--base-size-4);flex-direction:column;min-width:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingTitle___PcEmO{color:inherit;word-wrap:anywhere;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tab___hcSSV{box-sizing:border-box;width:100%;min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-12)));color:inherit;font:inherit;text-align:left;cursor:pointer;padding:var(--base-size-12) var(--base-size-16);background:0 0;border:0;outline:none;flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tabContent___sa1zl{align-items:flex-start;gap:var(--base-size-12);width:100%;min-width:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__thumbnail___ApiLF{width:var(--base-size-112);block-size:calc(var(--base-size-64) - var(--brand-borderWidth-thin));aspect-ratio:16/9;border-radius:var(--brand-borderRadius-small);background-color:var(--brand-color-canvas-subtle);flex-shrink:0;display:block;overflow:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__thumbnail___ApiLF>*{-o-object-fit:cover;object-fit:cover;width:100%;height:100%;display:block}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tab___hcSSV:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-4)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__content___BaIhp{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:flex}@media screen and (width<=63.24rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanels___hwtyP{padding-block-end:var(--base-size-24)}}@media screen and (width>=38.625rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{box-sizing:border-box;width:100%;border-inline:none;max-inline-size:80rem;margin-inline:auto;padding:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__layout___YZKVk{--brand-MediaPlaylist-desktopGutter:3.75rem;--brand-MediaPlaylist-sidebarWidth:27rem;box-sizing:border-box;grid-template-columns:minmax(0,1fr) minmax(0,27rem);grid-template-areas:"media tabs";grid-template-columns:minmax(0, 1fr) minmax(0, var(--brand-MediaPlaylist-sidebarWidth));grid-column-gap:3.75rem;grid-column-gap:var(--brand-MediaPlaylist-desktopGutter);-moz-column-gap:3.75rem;-moz-column-gap:var(--brand-MediaPlaylist-desktopGutter);column-gap:3.75rem;column-gap:var(--brand-MediaPlaylist-desktopGutter);width:100%;padding-inline-start:3.75rem;padding-inline-start:var(--brand-MediaPlaylist-desktopGutter);display:grid}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__playlist___nIpOa{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex-direction:column;grid-area:tabs;align-self:stretch;padding-block-start:calc(var(--base-size-48) + var(--base-size-12));display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist--overflowItems___tKiJV .Primer_Brand__MediaPlaylist-module__MediaPlaylist__tablist___IODGO{max-block-size:calc((3 * var(--base-size-64)) + (6 * var(--base-size-20)))}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanels___hwtyP{padding-block:var(--base-size-80);grid-area:media;justify-content:flex-start;align-items:flex-start;padding-inline:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanel___sTQVI{width:100%}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panel___VH451{gap:var(--base-size-40)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR{width:100%}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR iframe{aspect-ratio:16/9;border-radius:var(--base-size-6)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingDetails___Y6For{font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h1+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h2+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h3+p{margin-block-start:var(--base-size-12)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__heading___nM7Ip{min-height:auto;padding-block-start:var(--base-size-24);padding-block-end:var(--base-size-12);padding-inline-start:var(--base-size-32);padding-inline-end:var(--brand-MediaPlaylist-desktopGutter)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item___BXYUO{min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-20)))}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tab___hcSSV{min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-20)));padding-block:var(--base-size-20);padding-inline-start:var(--base-size-32);padding-inline-end:var(--brand-MediaPlaylist-desktopGutter)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tabContent___sa1zl{align-items:center}}@media screen and (width>=80rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__playlist___nIpOa{border-inline-end:0}}:root,[data-color-mode=light]{--brand-control-color-border-default:var(--base-color-scale-gray-4);--brand-control-color-border-disabled:var(--base-color-scale-gray-2);--brand-control-color-canvas-disabled:var(--base-color-scale-gray-1);--brand-control-color-fg-default:var(--brand-color-text-default);--brand-control-color-fg-disabled:var(--base-color-scale-gray-4);--brand-control-color-focus:var(--base-color-scale-blue-6);--brand-control-checkbox-bg-default:var(--base-color-scale-white-0);--brand-control-checkbox-bg-hover:var(--brand-color-canvas-subtle);--brand-control-checkbox-bg-checked:var(--base-color-scale-green-6);--brand-control-checkbox-bg-checked-hover:color-mix(in srgb, var(--brand-color-text-emphasized), #000 26%);--brand-control-checkbox-bg-indeterminate:var(--base-color-scale-green-6);--brand-control-checkbox-bg-indeterminate-hover:color-mix(in srgb, var(--brand-color-text-emphasized), #000 26%);--brand-control-checkbox-bg-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #fff 65%);--brand-control-checkbox-fg-checked:var(--base-color-scale-white-0);--brand-control-checkbox-fg-checked-disabled:var(--base-color-scale-white-0);--brand-control-checkbox-border-default:var(--base-color-scale-gray-4);--brand-control-checkbox-border-hover:var(--base-color-scale-gray-4);--brand-control-checkbox-border-checked:var(--base-color-scale-green-6);--brand-control-checkbox-border-checked-hover:var(--brand-color-text-emphasized);--brand-control-checkbox-border-indeterminate:var(--base-color-scale-green-6);--brand-control-checkbox-border-indeterminate-hover:var(--brand-color-text-emphasized);--brand-control-checkbox-border-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #fff 65%);--brand-control-checkbox-border-unchecked-disabled:var(--base-color-scale-gray-1);--brand-control-radio-bg-default:var(--base-color-scale-white-0);--brand-control-radio-bg-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-checked:var(--base-color-scale-white-0);--brand-control-radio-bg-checked-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-disabled:var(--brand-color-canvas-default);--brand-control-radio-border-default:var(--brand-control-color-border-default);--brand-control-radio-border-hover:var(--base-color-scale-gray-4);--brand-control-radio-border-checked:var(--brand-control-color-border-default);--brand-control-radio-border-checked-hover:var(--brand-control-color-border-default);--brand-control-radio-border-disabled:var(--base-color-scale-gray-4);--brand-control-radio-dot-default:var(--base-color-scale-black-0);--brand-control-radio-dot-checked:var(--base-color-scale-green-6);--brand-control-radio-dot-checked-hover:color-mix(in srgb, var(--brand-color-text-emphasized), #000 26%)}[data-color-mode=dark]{--brand-control-color-border-default:var(--base-color-scale-gray-4);--brand-control-color-border-disabled:var(--base-color-scale-gray-5);--brand-control-color-canvas-disabled:var(--base-color-scale-gray-8);--brand-control-color-fg-default:var(--brand-color-text-default);--brand-control-color-fg-disabled:var(--base-color-scale-gray-5);--brand-control-color-focus:var(--base-color-scale-blue-2);--brand-control-checkbox-bg-default:var(--base-color-scale-gray-7);--brand-control-checkbox-bg-hover:var(--brand-color-canvas-subtle);--brand-control-checkbox-bg-checked:var(--base-color-scale-green-5);--brand-control-checkbox-bg-checked-hover:#309a4d;--brand-control-checkbox-bg-indeterminate:var(--base-color-scale-green-5);--brand-control-checkbox-bg-indeterminate-hover:#309a4d;--brand-control-checkbox-bg-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #000 35%);--brand-control-checkbox-fg-checked:var(--base-color-scale-white-0);--brand-control-checkbox-fg-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-5), #000 20%);--brand-control-checkbox-border-default:var(--base-color-scale-gray-4);--brand-control-checkbox-border-hover:var(--base-color-scale-gray-5);--brand-control-checkbox-border-checked:#077726;--brand-control-checkbox-border-checked-hover:#0000001f;--brand-control-checkbox-border-indeterminate:#077726;--brand-control-checkbox-border-indeterminate-hover:#0000001f;--brand-control-checkbox-border-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #000 35%);--brand-control-checkbox-border-unchecked-disabled:var(--base-color-scale-gray-5);--brand-control-radio-bg-default:var(--base-color-scale-black-0);--brand-control-radio-bg-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-checked:var(--base-color-scale-black-0);--brand-control-radio-bg-checked-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-disabled:var(--brand-color-canvas-default);--brand-control-radio-border-default:var(--base-color-scale-gray-4);--brand-control-radio-border-hover:var(--base-color-scale-gray-5);--brand-control-radio-border-checked:var(--base-color-scale-gray-4);--brand-control-radio-border-checked-hover:var(--base-color-scale-gray-4);--brand-control-radio-border-disabled:var(--base-color-scale-gray-5);--brand-control-radio-dot-default:var(--base-color-scale-white-0);--brand-control-radio-dot-checked:var(--base-color-scale-green-5);--brand-control-radio-dot-checked-hover:#309a4d}.Primer_Brand__Checkbox-module__Checkbox-wrapper___qo8KL{grid-row:1;position:relative}.Primer_Brand__Checkbox-module__Checkbox___T8FJa{background-color:var(--brand-control-checkbox-bg-default);border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);cursor:pointer;border-radius:3px;outline:1px solid #0000;justify-content:center;align-items:center;width:20px;height:20px;margin:3px 0;transition:all .35s ease-out;display:inline-flex;box-shadow:0 0 0 3px #0000}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s{clip:rect(1px, 1px, 1px, 1px);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__Checkbox-module__Checkbox-checkmark___atiwt{height:var(--base-size-12);width:var(--base-size-12)}.Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:var(--brand-control-checkbox-fg-checked);stroke-dashoffset:111.46px;stroke-dasharray:111.46;transition:all .35s var(--brand-control-animation-easing)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa,.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k{background:var(--brand-control-checkbox-bg-checked);border-color:var(--brand-control-checkbox-border-checked)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:not(:checked):not([disabled])+.Primer_Brand__Checkbox-module__Checkbox___T8FJa:not(.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k):hover{background:var(--brand-control-checkbox-bg-hover);border-color:var(--brand-control-checkbox-border-hover)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked:not([disabled])+.Primer_Brand__Checkbox-module__Checkbox___T8FJa:hover{background:var(--brand-control-checkbox-bg-checked-hover);border-color:var(--brand-control-checkbox-border-checked-hover)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:not([disabled])+.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k:hover{background:var(--brand-control-checkbox-bg-indeterminate-hover);border-color:var(--brand-control-checkbox-border-indeterminate-hover)}.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k .Primer_Brand__Checkbox-module__Checkbox-checkmark___atiwt{fill:var(--brand-control-checkbox-fg-checked)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb,.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:var(--brand-control-checkbox-fg-checked);stroke-dashoffset:0}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:focus+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{box-shadow:0 0 0 3px var(--brand-control-color-focus)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked:focus+.Primer_Brand__Checkbox-module__Checkbox___T8FJa,.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:focus+.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k{border-color:var(--brand-control-checkbox-border-checked)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s[disabled]+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;border-color:var(--brand-control-checkbox-border-unchecked-disabled);opacity:1;background-color:#0000}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s[disabled]:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{background-color:var(--brand-control-checkbox-bg-checked-disabled);border-color:var(--brand-control-checkbox-border-checked-disabled)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s[disabled]:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:var(--brand-control-checkbox-fg-checked-disabled)}@media (forced-colors:active){.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:focus+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{outline:var(--brand-borderWidth-thin) solid Highlight;outline-offset:var(--base-size-2)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:highlight}.Primer_Brand__Checkbox-module__Checkbox___T8FJa{transition:none}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Checkbox-module__Checkbox___T8FJa,.Primer_Brand__Checkbox-module__Checkbox___T8FJa:before,.Primer_Brand__Checkbox-module__Checkbox___T8FJa:after,.Primer_Brand__Checkbox-module__Checkbox___T8FJa *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Select-module__Select___Jqn1f{appearance:none;color:var(--brand-control-color-fg-default);cursor:pointer;background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);line-height:var(--brand-text-lineHeight-200);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);border:none;grid-area:1/1/auto/-1;width:100%;transition-property:color,background-color,box-shadow,border-color}@media screen and (forced-colors:active){.Primer_Brand__Select-module__Select___Jqn1f:disabled{background-color:-moz-combobox}}.Primer_Brand__Select-module__Select___Jqn1f::placeholder{color:var(--brand-color-text-muted);opacity:1}.Primer_Brand__Select-module__Select___Jqn1f:focus-visible{border-color:var(--brand-control-color-focus);box-shadow:0 0 0 2px var(--brand-control-color-focus);outline:none}@media (forced-colors:active){.Primer_Brand__Select-module__Select___Jqn1f:focus-visible{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}.Primer_Brand__Select-module__Select___Jqn1f[disabled]{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-color-canvas-disabled);border-color:var(--brand-control-color-border-disabled);opacity:1}.Primer_Brand__Select-module__Select-wrapper--disabled___Ka43y.Primer_Brand__Select-module__Select-wrapper___iV0Tg:after{background-color:var(--brand-control-color-fg-disabled)}.Primer_Brand__Select-module__Select-wrapper--medium___xjmMc{height:var(--brand-control-medium-size)}.Primer_Brand__Select-module__Select-wrapper--medium___xjmMc:after{margin-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) / 2)}.Primer_Brand__Select-module__Select--medium___kckBr{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding-inline:var(--brand-control-medium-paddingInline-condensed);padding-block:0;padding-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-16))}.Primer_Brand__Select-module__Select-wrapper--large___Q4_2q{height:var(--brand-control-large-size)}.Primer_Brand__Select-module__Select-wrapper--large___Q4_2q:after{margin-inline-end:var(--base-size-8)}.Primer_Brand__Select-module__Select--large___A7u6F{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);padding-inline:var(--brand-control-large-paddingInline-condensed);padding-block:0;padding-inline-end:calc(var(--brand-control-large-paddingInline-condensed) + var(--base-size-16))}.Primer_Brand__Select-module__Select-wrapper___iV0Tg{border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);border-radius:6px;border-radius:var(--brand-borderRadius-medium,6px);font-family:var(--brand-body-fontFamily);grid-template-columns:minmax(0, auto) var(--base-size-16);display:inline-grid;position:relative}.Primer_Brand__Select-module__Select-wrapper___iV0Tg:after{content:"";width:var(--base-size-16);height:var(--base-size-16);pointer-events:none;background-color:var(--brand-control-color-fg-default);grid-area:1/2;place-self:center flex-end;position:absolute;right:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzU4NjA2OSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=) 0 0/contain no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzU4NjA2OSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=) 0 0/contain no-repeat}.Primer_Brand__Select-module__Select-wrapper--disabled___Ka43y{border-color:var(--brand-control-color-border-disabled)}.Primer_Brand__Select-module__Select-wrapper--fullWidth___oOOo4{width:100%}.Primer_Brand__Select-module__Select--success___pkmVg{border-color:var(--brand-color-success-fg)}.Primer_Brand__Select-module__Select--error___A9JuG{border-color:var(--brand-color-danger-fg)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Select-module__Select___Jqn1f,.Primer_Brand__Select-module__Select___Jqn1f:before,.Primer_Brand__Select-module__Select___Jqn1f:after,.Primer_Brand__Select-module__Select___Jqn1f *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__TextInput-module__TextInput___EtKj3{color:var(--brand-control-color-fg-default);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);line-height:var(--brand-text-lineHeight-100);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);border:none;transition-property:color,background-color,box-shadow;display:flex}.Primer_Brand__TextInput-module__TextInput___EtKj3::placeholder{color:var(--brand-color-text-muted);opacity:1}.Primer_Brand__TextInput-module__TextInput___EtKj3[disabled]{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-color-canvas-disabled);opacity:1}.Primer_Brand__TextInput-module__TextInput___EtKj3:focus{outline:none}.Primer_Brand__TextInput-module__TextInput-wrapper--small___IyT4V{height:var(--brand-control-small-size)}.Primer_Brand__TextInput-module__TextInput--small___jNp_Y{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding:var(--brand-control-small-paddingBlock) var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-wrapper--medium___K9iTj{height:var(--brand-control-medium-size)}.Primer_Brand__TextInput-module__TextInput--medium___kJrew{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding:var(--brand-control-medium-paddingBlock-normal) var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput--large___zpUvY{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);padding:var(--brand-control-large-paddingBlock-normal) var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-wrapper--large___lga4f{height:var(--brand-control-large-size)}.Primer_Brand__TextInput-module__TextInput--fullWidth___rbllM{width:100%}.Primer_Brand__TextInput-module__TextInput-wrapper--disabled___HWTx_{border-color:var(--brand-control-color-border-disabled)}.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu{font-family:var(--brand-body-fontFamily);border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);border-radius:var(--brand-borderRadius-medium);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);transition-property:border;display:inline-flex;position:relative}.Primer_Brand__TextInput-module__TextInput-wrapper--invisible___cKDcl{border-color:#0000}.Primer_Brand__TextInput-module__TextInput-wrapper--fullWidth___eclO4{width:100%;display:flex}.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu:not(.Primer_Brand__TextInput-module__TextInput-wrapper--fullWidth___eclO4){width:min-content}.Primer_Brand__TextInput-module__TextInput-wrapper--monospace___y1fd6{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu:focus-within{border-color:var(--brand-control-color-focus);box-shadow:0 0 0 1px var(--brand-control-color-focus);outline:none}@media (forced-colors:active){.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu:focus-within{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}.Primer_Brand__TextInput-module__TextInput-wrapper--success___g5ODK,.Primer_Brand__TextInput-module__TextInput-wrapper--success___g5ODK.Primer_Brand__TextInput-module__TextInput-wrapper--disabled___HWTx_{border-color:var(--brand-color-success-fg)}.Primer_Brand__TextInput-module__TextInput-wrapper--error___V7qtN,.Primer_Brand__TextInput-module__TextInput-wrapper--error___V7qtN.Primer_Brand__TextInput-module__TextInput-wrapper--disabled___HWTx_{border-color:var(--brand-color-danger-fg)}.Primer_Brand__TextInput-module__TextInput--has-leading-visual--small___Chfzr{padding-inline-start:calc(var(--brand-control-small-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-small-gap))}.Primer_Brand__TextInput-module__TextInput--has-leading-visual--medium___i7gLS{padding-inline-start:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-medium-gap))}.Primer_Brand__TextInput-module__TextInput--has-leading-visual--large___nCVT9{padding-inline-start:calc(var(--brand-control-large-paddingInline-condensed) + var(--base-size-20) + var(--brand-control-large-gap))}.Primer_Brand__TextInput-module__TextInput--has-trailing-visual--small___gl_37{padding-inline-end:calc(var(--brand-control-small-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-small-gap))}.Primer_Brand__TextInput-module__TextInput--has-trailing-visual--medium___pP4lM{padding-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-medium-gap))}.Primer_Brand__TextInput-module__TextInput--has-trailing-visual--large___n1U0P{padding-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-20) + var(--brand-control-medium-gap))}.Primer_Brand__TextInput-module__TextInput-leading-visual___tk7Yz,.Primer_Brand__TextInput-module__TextInput-trailing-visual___k0E6L{width:var(--base-size-16);height:100%;color:var(--brand-color-text-default);pointer-events:none;align-items:center;display:flex;position:absolute;top:0}.Primer_Brand__TextInput-module__TextInput-leading-visual--medium___BW5d2{left:var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-trailing-visual--medium___WMlar{right:var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-visual--small___im1Vd{left:var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-trailing-visual--small___cYDMo{right:var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-visual--large___LoDri{left:var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-trailing-visual--large___pdxBc{right:var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-visual-icon--medium___y_4Pu,.Primer_Brand__TextInput-module__TextInput-leading-visual-icon--small___IvacS{width:var(--base-size-16);height:var(--base-size-16)}.Primer_Brand__TextInput-module__TextInput-leading-visual-icon--large___VPOF7{width:var(--base-size-20);height:var(--base-size-20)}.Primer_Brand__TextInput-module__TextInput-leading-text___H5Cfr,.Primer_Brand__TextInput-module__TextInput-trailing-text___ikt8X{color:var(--brand-color-text-muted);pointer-events:none;white-space:nowrap;align-items:center;display:flex}.Primer_Brand__TextInput-module__TextInput-leading-text--disabled___APVY0,.Primer_Brand__TextInput-module__TextInput-trailing-text--disabled___oM2Ls{color:var(--brand-control-color-fg-disabled);background-color:var(--brand-control-color-canvas-disabled)}.Primer_Brand__TextInput-module__TextInput-leading-text___H5Cfr{border-top-left-radius:6px;border-top-left-radius:var(--brand-borderRadius-medium,6px);border-bottom-left-radius:6px;border-bottom-left-radius:var(--brand-borderRadius-medium,6px);border-right:0}.Primer_Brand__TextInput-module__TextInput-trailing-text___ikt8X{border-top-right-radius:6px;border-top-right-radius:var(--brand-borderRadius-medium,6px);border-bottom-right-radius:6px;border-bottom-right-radius:var(--brand-borderRadius-medium,6px);border-left:0}.Primer_Brand__TextInput-module__TextInput-leading-text-inner___wsz6j,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner___hHCPx{color:var(--brand-color-text-muted);display:inline-flex}.Primer_Brand__TextInput-module__TextInput-leading-text-inner--medium___B7Rra,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner--medium___P9cYA{padding-inline:var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-text-inner--small___scMhg,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner--small___B4sQm{padding-inline:var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-text-inner--large___HfLcI,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner--large___LTt33{padding-inline:var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-text-inner___wsz6j{border-right:1px solid var(--brand-color-border-default)}.Primer_Brand__TextInput-module__TextInput-trailing-text-inner___hHCPx{border-left:1px solid var(--brand-color-border-default)}.Primer_Brand__TextInput-module__TextInput--has-leading-text___u7qke{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.Primer_Brand__TextInput-module__TextInput--has-trailing-text___Rsoog{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.Primer_Brand__TextInput-module__TextInput-leading-text--success___LLFx7,.Primer_Brand__TextInput-module__TextInput-trailing-text--success___EfLVd{border-color:var(--brand-color-success-fg)}.Primer_Brand__TextInput-module__TextInput-leading-text--error___TM77D,.Primer_Brand__TextInput-module__TextInput-trailing-text--error___R96jr{border-color:var(--brand-color-danger-fg)}@media (prefers-reduced-motion:reduce){.Primer_Brand__TextInput-module__TextInput___EtKj3,.Primer_Brand__TextInput-module__Checkbox___TOylA:before,.Primer_Brand__TextInput-module__Checkbox___TOylA:after,.Primer_Brand__TextInput-module__Checkbox___TOylA *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Textarea-module__Textarea___xmKD5{color:var(--brand-control-color-fg-default);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);line-height:var(--brand-text-lineHeight-100);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);border:none;transition-property:color,background-color,box-shadow;display:flex}.Primer_Brand__Textarea-module__Textarea___xmKD5::placeholder{color:var(--brand-color-text-muted);opacity:1}.Primer_Brand__Textarea-module__Textarea___xmKD5[disabled]{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-color-canvas-disabled);opacity:1;resize:none}.Primer_Brand__Textarea-module__Textarea___xmKD5:focus{outline:none}.Primer_Brand__Textarea-module__Textarea-resize--vertical___uAPaM{resize:vertical}.Primer_Brand__Textarea-module__Textarea-resize--horizontal___gT0d4{resize:horizontal}.Primer_Brand__Textarea-module__Textarea-resize--none___VNofG{resize:none}.Primer_Brand__Textarea-module__Textarea-resize--both___bDJp5{resize:both}.Primer_Brand__Textarea-module__Textarea--medium___pMZGb{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding:var(--brand-control-medium-paddingBlock-normal) var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__Textarea-module__Textarea--large___wCPXA{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);padding:var(--brand-control-large-paddingBlock-normal) var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__Textarea-module__Textarea--fullWidth___lPWcQ{width:100%}.Primer_Brand__Textarea-module__Textarea-wrapper--disabled___fg8We{border-color:var(--brand-control-color-border-disabled)}.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG{font-family:var(--brand-body-fontFamily);border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);border-radius:var(--brand-borderRadius-medium);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);transition-property:border;display:inline-flex;position:relative}.Primer_Brand__Textarea-module__Textarea-wrapper--invisible___fF78K{border-color:#0000}.Primer_Brand__Textarea-module__Textarea-wrapper--fullWidth___EtLL9{display:flex}.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG:not(.Primer_Brand__Textarea-module__Textarea-wrapper--fullWidth___EtLL9){width:min-content}.Primer_Brand__Textarea-module__Textarea-wrapper--monospace___lA41d{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG:focus-within{border-color:var(--brand-control-color-focus);box-shadow:0 0 0 1px var(--brand-control-color-focus);outline:none}@media (forced-colors:active){.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG:focus-within{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}.Primer_Brand__Textarea-module__Textarea-wrapper--success___RaDVX,.Primer_Brand__Textarea-module__Textarea-wrapper--success___RaDVX.Primer_Brand__Textarea-module__Textarea-wrapper--disabled___fg8We{border-color:var(--brand-color-success-fg)}.Primer_Brand__Textarea-module__Textarea-wrapper--error___zcHSQ,.Primer_Brand__Textarea-module__Textarea-wrapper--error___zcHSQ.Primer_Brand__Textarea-module__Textarea-wrapper--disabled___fg8We{border-color:var(--brand-color-danger-fg)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Textarea-module__Textarea___xmKD5,.Primer_Brand__Textarea-module__Textarea___xmKD5:before,.Primer_Brand__Textarea-module__Textarea___xmKD5:after,.Primer_Brand__Textarea-module__Textarea___xmKD5 *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Radio-module__Radio-wrapper___Gt9uM{-webkit-user-select:none;user-select:none;cursor:pointer;grid-row:1;position:relative}.Primer_Brand__Radio-module__Radio___JycTo{background-color:var(--brand-control-radio-bg-default);border:solid 1px var(--brand-control-radio-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-radio-border-default);cursor:pointer;margin:3px 0;border-radius:50%;outline:none;justify-content:center;align-items:center;width:20px;height:20px;margin:3px 3px 0 5px;display:inline-flex;position:relative;box-shadow:0 0 0 3px #0000}.Primer_Brand__Radio-module__Radio___JycTo:before{content:"";pointer-events:none;border:var(--brand-borderWidth-thin) solid transparent;border-radius:50%;width:24px;height:24px;position:absolute;inset:-4px -2px -2px -4px}.Primer_Brand__Radio-module__Radio-input___n3jX4{clip:rect(1px, 1px, 1px, 1px);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__Radio-module__Radio-dot___rmEAJ{border-color:var(--brand-control-radio-dot-checked);background:var(--brand-control-radio-dot-checked);opacity:0;width:12px;height:12px;transition:transform .35s var(--brand-animation-easing-glide), opacity .35s var(--brand-animation-easing-glide);border-radius:50%;display:block;position:absolute;transform:scale(.7)}@media (prefers-reduced-motion){.Primer_Brand__Radio-module__Radio-dot___rmEAJ{transition:none}}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked+.Primer_Brand__Radio-module__Radio___JycTo{background-color:var(--brand-control-radio-bg-checked);border-color:var(--brand-control-radio-border-checked)}.Primer_Brand__Radio-module__Radio-input___n3jX4:not(:checked):not([disabled])+.Primer_Brand__Radio-module__Radio___JycTo:hover{background-color:var(--brand-control-radio-bg-hover);border-color:var(--brand-control-radio-border-hover)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked:not([disabled])+.Primer_Brand__Radio-module__Radio___JycTo:hover{background-color:var(--brand-control-radio-bg-checked-hover);border-color:var(--brand-control-radio-border-checked-hover)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked:not([disabled])+.Primer_Brand__Radio-module__Radio___JycTo:hover .Primer_Brand__Radio-module__Radio-dot___rmEAJ{background:var(--brand-control-radio-dot-checked-hover);border-color:var(--brand-control-radio-dot-checked-hover)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked+.Primer_Brand__Radio-module__Radio___JycTo .Primer_Brand__Radio-module__Radio-dot___rmEAJ{opacity:1;transform:scale(1)}.Primer_Brand__Radio-module__Radio-input___n3jX4:focus+.Primer_Brand__Radio-module__Radio___JycTo{box-shadow:0 0 0 4px var(--brand-control-color-focus)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked:focus+.Primer_Brand__Radio-module__Radio___JycTo{border-color:var(--brand-control-radio-border-checked)}.Primer_Brand__Radio-module__Radio-input___n3jX4[disabled]+.Primer_Brand__Radio-module__Radio___JycTo,.Primer_Brand__Radio-module__Radio-input___n3jX4[disabled]:checked+.Primer_Brand__Radio-module__Radio___JycTo{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-radio-bg-disabled);border-color:var(--brand-control-radio-border-disabled);opacity:1}.Primer_Brand__Radio-module__Radio-input___n3jX4[disabled]:checked+.Primer_Brand__Radio-module__Radio___JycTo .Primer_Brand__Radio-module__Radio-dot___rmEAJ{background:var(--brand-control-color-fg-disabled);border-color:var(--brand-control-color-fg-disabled)}@media (forced-colors:active){.Primer_Brand__Radio-module__Radio-input___n3jX4:focus+.Primer_Brand__Radio-module__Radio___JycTo{outline:var(--brand-borderWidth-thin) solid Highlight;outline-offset:var(--base-size-4)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked+.Primer_Brand__Radio-module__Radio___JycTo .Primer_Brand__Radio-module__Radio-dot___rmEAJ{background-color:highlight}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Radio-module__Radio___JycTo,.Primer_Brand__Radio-module__Radio___JycTo:before,.Primer_Brand__Radio-module__Radio___JycTo:after,.Primer_Brand__Radio-module__Radio___JycTo *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__FormControl-module__FormControl___ZJtXy{font-family:var(--brand-body-fontFamily);gap:var(--base-size-8);flex-direction:column;display:inline-flex}.Primer_Brand__FormControl-module__FormControl--fullWidth___QyLCS{width:100%}.Primer_Brand__FormControl-module__FormControl--checkbox___R2ng7{grid-template-columns:auto 1fr;display:grid}.Primer_Brand__FormControl-module__FormControl--border___CRSaq{border:1px solid var(--brand-control-color-border-default);border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-12)}.Primer_Brand__FormControl-module__FormControl-label___meeuB{color:var(--brand-color-text-default);font-weight:var(--base-text-weight-medium);font-family:var(--brand-body-fontFamily)}.Primer_Brand__FormControl-module__FormControl-label--visually-hidden___cFizI{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__FormControl-module__FormControl-label--medium___inrKd{letter-spacing:var(--brand-text-letterSpacing-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__FormControl-module__FormControl-label--large___okLn6{letter-spacing:var(--brand-text-letterSpacing-300);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300)}.Primer_Brand__FormControl-module__FormControl-label--checkbox___x2U9X{cursor:pointer;font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-medium);line-height:var(--base-size-24);width:100%;position:relative;top:1px}.Primer_Brand__FormControl-module__FormControl-control--radio___aSHRG{margin:2px 0 0}.Primer_Brand__FormControl-module__FormControl-hint___dbP0O{grid-column:1/3;display:block}.Primer_Brand__FormControl-module__FormControl-validation___vG5tm{gap:var(--base-size-4);align-items:center;display:flex}.Primer_Brand__FormControl-module__FormControl-validation--success___fGV4L{color:var(--brand-color-success-fg)}.Primer_Brand__FormControl-module__FormControl-validation--error___DJVR5{color:var(--brand-color-danger-fg)}.Primer_Brand__FormControl-module__FormControl-validation-success-icon___UgUzb,.Primer_Brand__FormControl-module__FormControl-validation-error-icon___o3GQW{display:flex}.Primer_Brand__FormControl-module__FormControl-validation--animate-in___C_pxB{animation:.17s cubic-bezier(.44,.74,.36,1) Primer_Brand__FormControl-module__FormControlValidationFadeIn___hRw_R}@keyframes Primer_Brand__FormControl-module__FormControlValidationFadeIn___hRw_R{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.Primer_Brand__FormControl-module__FormControl-validation-checkbox___Cigqb{grid-column:1/3}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK{z-index:90;background:var(--brand-color-canvas-default);height:var(--SubdomainNavBar-height);font-weight:550;position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK:after{content:"";z-index:3;height:var(--brand-borderWidth-thin);background-color:var(--brand-SubdomainNavBar-border-nav-default);pointer-events:none;position:absolute;inset-block-start:100%;inset-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container___aE8uv{--SubdomainNavBar-height:var(--base-size-64);z-index:90}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container___aE8uv{--SubdomainNavBar-height:calc(var(--base-size-64) - var(--base-size-8))}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container___aE8uv:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container--fixed___ZhyZf){position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container--fixed___ZhyZf{position:fixed;top:0;left:0;right:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{padding:4px 28px;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--centered___FXUTh{max-width:1280px;margin:0 auto}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{padding:4px 32px}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--search-open___nhMNU{animation:.15s Primer_Brand__SubdomainNavBar-module__fade-out___fhdxi}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{align-items:center;gap:var(--base-size-8);max-width:340px;color:var(--brand-color-text-default);padding:0;padding:var(--base-size-16) 0;margin:0;list-style-type:none;display:inline-flex}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{gap:var(--base-size-16)}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{color:var(--brand-color-text-default);align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_{position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-back-arrow___OOrj8{color:var(--brand-color-text-muted);opacity:0;transform:translate(var(--base-size-4), -50%);transition:opacity var(--brand-animation-duration-fast), transform var(--brand-animation-duration-fast) ease;display:flex;position:absolute;inset-block-start:50%;inset-inline-start:calc(-1 * var(--base-size-24) + var(--base-size-4))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_:hover .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-back-arrow___OOrj8{opacity:1;transform:translateY(-50%)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_ svg{width:32px;height:32px}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{line-height:var(--base-size-32);white-space:nowrap;padding-inline-end:var(--base-size-16);-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-featured___i_EMH .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-prefix___MCu96{color:var(--brand-color-text-default)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-label___C3mii{color:inherit}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{align-self:stretch;align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child:after{content:"";box-sizing:border-box;width:var(--brand-borderWidth-thin);height:var(--SubdomainNavBar-height);margin-inline:var(--base-size-16);background-color:var(--brand-color-border-muted);flex:none;align-self:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{align-items:center;min-width:0;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{margin-inline-end:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{margin-inline-start:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn{flex:1 1 0;align-items:center;min-width:0;margin:0;padding:0;list-style-type:none;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{list-style-type:none}@media screen and (width<=767px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--invisible___HnkQO{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--visible___ZeoFv{margin:0;padding:0;display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{box-sizing:border-box;width:100%;padding-block:var(--base-size-16);padding-inline:var(--base-size-16);flex:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{margin-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{margin-inline-start:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{top:var(--SubdomainNavBar-height);z-index:2;background-color:var(--brand-color-canvas-default);width:100%;max-height:calc(100vh - var(--SubdomainNavBar-height) - 0px);max-height:calc(100vh - var(--SubdomainNavBar-height) - var(--SubdomainNavBar-menu-offset-block-start,0px));border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);animation:.5s Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g;animation-timing-function:var(--brand-animation-easing-default);flex-direction:column;justify-content:flex-start;display:flex;position:absolute;left:0;right:0;overflow-y:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper--close___NzelD{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer___VLcHd{flex-direction:column;flex:none;width:100%;display:flex}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow___OXKBt{min-width:0;margin:0 var(--base-size-24) 0 0;flex:1 1 0;align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{min-width:0;block-size:var(--base-size-48);max-block-size:var(--base-size-48);flex-wrap:nowrap;flex:auto;align-items:center;margin:0;padding:0;display:flex;overflow:hidden}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9{white-space:nowrap;flex:none}@media screen and (width<=767px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9{animation-name:Primer_Brand__SubdomainNavBar-module__fade-in-down-staggered___zQfEQ;animation-duration:.5s;animation-delay:calc(var(--animation-order) * 80ms);animation-fill-mode:both;animation-timing-function:var(--brand-animation-easing-default)}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item--overflowed___vVhQg{visibility:hidden;pointer-events:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item--overflow___FXC7u{visibility:hidden;pointer-events:none;flex:none;align-items:center;display:flex;position:absolute;inset-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow--has-overflow___zoCZu .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item--overflow___FXC7u{visibility:visible;pointer-events:auto;position:relative}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{align-items:center;gap:var(--base-size-8);color:var(--brand-color-text-default);font-family:var(--brand-heading-fontFamily);font-weight:var(--base-text-weight-normal);flex-direction:row;-webkit-text-decoration:none;text-decoration:none;display:flex;position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-text___a540y{position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{align-items:center;gap:var(--base-size-8);display:inline-flex}@media screen and (width<=767px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link--title___ApFQt{font-weight:var(--base-text-weight-medium)}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{width:100%;min-height:var(--base-size-40);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-color-text-muted);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200);transition:background-color var(--brand-animation-easing-default) .25s}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible{color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible{box-shadow:inset 0 0 0 var(--brand-borderWidth-thick) var(--brand-color-focus);outline:none}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2{display:none}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2{cursor:pointer;appearance:none;align-items:center;gap:var(--base-size-4);background-color:#0000;border:none;display:inline-flex}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu___RXj_t{z-index:100;background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);animation:Primer_Brand__SubdomainNavBar-module__fade-in-down-overflow____WJvz var(--brand-animation-duration-faster);animation-timing-function:var(--brand-animation-easing-default);min-width:calc(var(--base-size-128) + var(--base-size-32));transform:translateY(calc(0px - var(--base-size-4)));border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:var(--brand-borderRadius-medium);border-end-start-radius:var(--brand-borderRadius-medium);position:absolute;right:auto;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-list___EbzqG{grid-gap:var(--brand-borderWidth-thin);gap:var(--brand-borderWidth-thin);padding:var(--base-size-8);width:100%;margin:0;list-style-type:none;display:grid}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{flex:0 auto;align-items:center;min-width:0;margin-left:auto;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{box-sizing:border-box;align-items:center;min-width:0;display:flex}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{--SubdomainNavBar-search-input-width:calc(var(--base-size-128) * 2 + var(--base-size-24));flex:0 9999 var(--SubdomainNavBar-search-input-width);width:var(--SubdomainNavBar-search-input-width);max-width:100%;min-width:calc(var(--base-size-128) + var(--base-size-32))}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J{cursor:pointer;appearance:none;border:var(--brand-borderWidth-thick) solid transparent;color:var(--brand-color-text-default);width:calc(48px - var(--brand-borderWidth-thick));height:calc(48px - var(--brand-borderWidth-thick));transition:border .25s var(--brand-animation-easing-default), box-shadow .25s ease;border-radius:var(--brand-borderRadius-medium);background-color:#0000;justify-content:center;align-items:center;gap:0;display:flex;position:relative;box-shadow:0 0 0 2px #0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J svg{width:24px;height:24px}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{cursor:pointer;appearance:none;justify-content:space-between;align-items:center;gap:var(--base-size-16);width:100%;block-size:var(--base-size-32);min-block-size:var(--base-size-32);padding:var(--base-size-4) var(--base-size-4) var(--base-size-4) calc(var(--base-size-8) + var(--base-size-2));color:var(--brand-color-text-muted);background-color:var(--brand-color-canvas-subtle);border-radius:var(--brand-borderRadius-medium);font-family:var(--brand-body-fontFamily);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default), box-shadow var(--brand-animation-duration-fast) var(--brand-animation-easing-default);border:0;display:flex;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7:hover{box-shadow:inset 0 0 0 var(--brand-borderWidth-thin) var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7:active{box-shadow:inset 0 0 0 var(--brand-borderWidth-thin) var(--brand-color-border-default)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx{align-items:center;gap:var(--base-size-8);min-width:0;color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-normal);white-space:nowrap;text-overflow:ellipsis;line-height:1.2;display:inline-flex;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx svg{flex:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx span{text-overflow:ellipsis;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-shortcut___M8tMd{min-width:var(--base-size-24);padding-inline:var(--base-size-8);color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-radius:calc(var(--brand-borderRadius-medium) / 2);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-normal);flex:none;justify-content:center;align-self:stretch;align-items:center;line-height:1.6;display:inline-flex}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{flex:0 0 var(--base-size-48);width:var(--base-size-48);justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:var(--base-size-32);padding:var(--base-size-8);background-color:#0000;justify-content:center;gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx{gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx span,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-shortcut___M8tMd{display:none}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J{align-self:center;align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-icon___dXvjL{gap:calc(var(--base-size-4) - var(--brand-borderWidth-thin));flex-direction:column;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-label___iD85T{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{background-color:var(--brand-color-text-default);width:22px;height:2px;margin:var(--base-size-4) auto;border-radius:var(--brand-borderRadius-large);display:block}@media (prefers-reduced-motion:no-preference){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{transition-timing-function:var(--brand-animation-easing-default);transition-property:opacity,transform;transition-duration:.5s}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform-origin:100% 100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform-origin:100% 0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform:rotate(-45deg)translateY(-3px)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(2){opacity:0;transform:scale(0)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform:rotate(45deg)translateY(3px)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT{z-index:3;background-color:var(--brand-color-canvas-muted);position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT:focus-visible{box-shadow:none;outline:none;transition:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT:focus-visible:before{content:"";z-index:2;pointer-events:none;border:var(--brand-borderWidth-thick) solid var(--brand-color-focus);position:absolute;inset:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT:after{content:"";z-index:1;height:calc(var(--brand-borderWidth-thin) * 2);background-color:var(--brand-color-canvas-muted);position:absolute;inset-block-end:calc(var(--brand-borderWidth-thin) * -2);inset-inline:0}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J:hover{border:var(--brand-borderWidth-thick) solid var(--brand-SubdomainNavBar-border-button-hover);background-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J:active{box-shadow:0 0 0 1px var(--brand-SubdomainNavBar-border-button-hover);background-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{display:none}}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{flex:none;align-self:stretch;position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{--SubdomainNavBar-tablet-search-width:calc(var(--base-size-128) * 2 + var(--base-size-2));flex:0 0 var(--SubdomainNavBar-tablet-search-width);width:var(--SubdomainNavBar-tablet-search-width);padding-inline:var(--base-size-8);border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{justify-content:center;align-self:stretch;align-items:center;gap:var(--base-size-8);width:max-content;min-width:calc(var(--base-size-64) + var(--base-size-32));height:100%;padding-inline:var(--base-size-16);color:var(--brand-color-text-default);border:0;border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);border-radius:0;flex-direction:row;flex:none;overflow:visible}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-label___iD85T{white-space:nowrap;align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-icon___dXvjL{width:var(--base-size-16);height:var(--base-size-16);flex:none;justify-content:center;align-items:stretch;overflow:visible}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-icon___dXvjL .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{width:var(--base-size-16);height:var(--base-size-2);transform-origin:50%;margin:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform:translateY(calc(var(--base-size-6) - var(--brand-borderWidth-thin))) rotate(45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform:translateY(calc(var(--brand-borderWidth-thin) - var(--base-size-6))) rotate(-45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{inset-inline:0;top:var(--SubdomainNavBar-height);z-index:2;box-sizing:border-box;width:100%;max-height:calc(100vh - var(--SubdomainNavBar-height) - 0px);max-height:calc(100vh - var(--SubdomainNavBar-height) - var(--SubdomainNavBar-menu-offset-block-start,0px));background-color:var(--brand-color-canvas-default);border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);animation:Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g var(--brand-animation-duration-default);animation-timing-function:var(--brand-animation-easing-default);flex-direction:column;justify-content:flex-start;display:flex;position:absolute;overflow-y:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{width:max(100%, calc(var(--base-size-128) * 3));min-width:0;inset-inline:auto 0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper--close___NzelD{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--visible___ZeoFv{grid-gap:var(--brand-borderWidth-thin);gap:var(--brand-borderWidth-thin);padding:var(--base-size-8) var(--base-size-16);margin:0;display:grid}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer___VLcHd{flex-direction:column;flex:none;width:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{box-sizing:border-box;width:100%;min-height:var(--base-size-40);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-color-text-muted);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx){width:100%;height:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{padding:var(--base-size-8) var(--base-size-12)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{background-color:#0000;border-radius:0;width:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:active>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc[aria-current]:not([aria-current=false])>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{background-color:#0000;outline:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:active,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc[aria-current]:not([aria-current=false]){color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible{box-shadow:inset 0 0 0 var(--brand-borderWidth-thick) var(--brand-color-focus);outline:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link--title___ApFQt{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{box-sizing:border-box;width:100%;height:auto;padding:var(--base-size-16);flex:none;margin-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{width:100%;height:auto;padding:0;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{box-sizing:border-box;width:100%;margin-block:var(--base-size-24);padding-inline:var(--base-size-16);flex-direction:column}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer--has-leading-item___WS7Rf,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--visible___ZeoFv,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer___VLcHd .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{gap:var(--base-size-16);align-items:center;min-width:0;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{gap:var(--base-size-8);min-width:0;display:flex}@media screen and (width<=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area--visible___fLvbf{z-index:99;width:100%;height:auto;animation-name:Primer_Brand__SubdomainNavBar-module__fade-in-down-staggered___zQfEQ;animation-duration:.5s;animation-delay:.8s;animation-fill-mode:both;animation-timing-function:var(--brand-animation-easing-default);display:flex;left:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--search-open___nhMNU .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area--visible___fLvbf{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{box-sizing:border-box;width:100%;margin-block:var(--base-size-24);padding-inline:var(--base-size-24);flex-direction:column;min-width:0}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-cta-button___g_9BM{white-space:nowrap}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{top:var(--SubdomainNavBar-height);height:auto;max-height:calc(100vh - var(--SubdomainNavBar-height) - 0px);max-height:calc(100vh - var(--SubdomainNavBar-height) - var(--SubdomainNavBar-menu-offset-block-start,0px))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-backdrop___sLFAC{inset-block-start:calc(var(--SubdomainNavBar-height) + 0px);z-index:1;background-color:var(--brand-SubdomainNavBar-searchDialog-backdropColor);animation:Primer_Brand__SubdomainNavBar-module__fade-in___u4FB2 var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);position:fixed;inset-block-start:calc(var(--SubdomainNavBar-height) + var(--SubdomainNavBar-menu-offset-block-start,0px));inset-block-end:0;inset-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--search-open___nhMNU{animation:none}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK{--SubdomainNavBar-mobile-control-size:var(--base-size-48)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{gap:0;max-width:none;height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li{height:100%;padding-inline:0 var(--base-size-16);align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{width:auto;padding-inline:var(--base-size-16) var(--base-size-8);justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_{justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_ svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{padding-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2>*{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{height:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{flex:0 0 var(--SubdomainNavBar-mobile-control-size);width:var(--SubdomainNavBar-mobile-control-size);border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);justify-content:center;height:100%;padding-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{box-sizing:border-box;flex:0 0 var(--SubdomainNavBar-mobile-control-size);width:var(--SubdomainNavBar-mobile-control-size);height:100%;padding-inline:var(--base-size-16);border-radius:0;flex-direction:column;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{gap:calc(var(--base-size-4) - var(--brand-borderWidth-thin));border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{width:var(--base-size-16);height:var(--base-size-2);transform-origin:50%;margin:0 auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform:translateY(calc(var(--base-size-6) - var(--brand-borderWidth-thin))) rotate(45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform:translateY(calc(var(--brand-borderWidth-thin) - var(--base-size-6))) rotate(-45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{padding:var(--base-size-16);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link--title___ApFQt{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{padding-inline:var(--base-size-16)}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{max-width:none;height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{gap:0;max-width:none;height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li{height:100%;padding-inline:0 var(--base-size-16);border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{width:auto;padding-inline:var(--base-size-16) var(--base-size-8);border-inline-end:0;justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{padding-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child:after{margin-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-item___CclaY{padding-inline:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_{justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_ svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{padding-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2>*{font-size:var(--base-size-16);line-height:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow___OXKBt,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{height:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{padding-inline:var(--base-size-16);margin-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{block-size:100%;max-block-size:100%;align-items:stretch;margin:0;padding-inline-start:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow___OXKBt{margin:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9{align-items:center;height:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{height:100%;padding:0 var(--base-size-16);color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200);align-items:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2{padding-inline:var(--base-size-4)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{gap:var(--base-size-4);padding:var(--base-size-4) var(--base-size-12);border-radius:var(--brand-borderRadius-full);background-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:active>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc[aria-current]:not([aria-current=false])>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:hover>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:active>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2[aria-expanded=true]>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{background-color:var(--brand-SubdomainNavBar-color-link-bgColor)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:focus-visible{outline:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:focus-visible>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}@media (prefers-reduced-motion:no-preference){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default)}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{height:100%;padding-inline:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger--has-trailing-item___sHQYt{border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{padding-inline:var(--base-size-16);align-items:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area--has-leading-item___HsvBF{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{--SubdomainNavBar-search-input-width:max(calc(var(--base-size-128) + var(--base-size-32)), min(28.5vw, calc(var(--base-size-128) * 3 + var(--base-size-36))));align-self:stretch}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-primary-nav___QwOCp{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);height:calc(var(--SubdomainNavBar-height) + var(--base-size-48))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp:after{inset-block-start:var(--SubdomainNavBar-height)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:var(--SubdomainNavBar-height);display:grid}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-primary-nav___QwOCp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{grid-template-rows:var(--SubdomainNavBar-height) var(--base-size-48)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-navigation___QI1qZ{grid-area:1/1;min-width:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);grid-area:2/1/auto/-1;min-width:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{padding-inline-start:calc(var(--base-size-64) + var(--brand-borderWidth-thin))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{border-inline-start:0;grid-area:1/2;justify-self:start}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{grid-area:1/3}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:var(--base-size-32);padding:var(--base-size-8);background-color:#0000;justify-content:center;gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx{gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder-text___W96nO,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-shortcut___M8tMd{display:none}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{flex:0 0 var(--base-size-48);width:var(--base-size-48);min-width:var(--base-size-48);padding-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:100%;block-size:100%;padding-inline:var(--base-size-16);border-radius:0}}@media screen and (width>=1024px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-cta-button--secondary___P0FJH{display:inline-flex}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-form___zoZB5{width:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-area___DttZX{align-items:center;gap:var(--base-size-8);width:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ{cursor:pointer;appearance:none;min-block-size:var(--base-size-32);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle);border-radius:var(--brand-borderRadius-medium);font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-medium);line-height:var(--base-size-14);letter-spacing:var(--brand-text-letterSpacing-100);border:0;flex:none;justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ:hover{background-color:var(--brand-color-canvas-inset)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog-control-area___KlFbq{height:var(--base-size-40);background:0 0;align-items:center;max-width:none;margin:0;padding:0;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-text-input___kDY_0{border-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-area___y0BAA{width:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-container___kow2P{padding:var(--base-size-24);background-color:var(--base-color-scale-white-0);border-radius:var(--brand-borderRadius-large);width:80%;max-width:570px;height:70vh;max-height:514px;margin:0 auto;animation:.5s Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g;box-shadow:0 8px 24px #01040926}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results___haCH9{padding:0 var(--base-size-24) 0 0;height:90%;margin:0;list-style:none;overflow-y:scroll}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-heading___FTzyR{font-weight:var(--brand-heading-weight-600);font-size:var(--base-size-20);line-height:var(--base-size-24);margin-bottom:var(--base-size-20);padding:0 var(--base-size-8);color:var(--base-color-scale-black-0);display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-list___vCi4S{margin:0;padding:0;list-style:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec{margin-block-start:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-heading___wULje{margin:0 0 var(--base-size-20);padding:0 var(--base-size-8);color:var(--brand-color-text-muted);font-weight:var(--brand-heading-weight-600);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z{padding:var(--base-size-16) var(--base-size-8);border-bottom:1px solid #b7bfc7;border-bottom:solid var(--brand-borderWidth-thin,1px) var(--brand-SubdomainNavBar-search-results-border-default,#b7bfc7)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a[aria-selected=true]{outline:var(--brand-color-focus) auto var(--brand-borderWidth-thick)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd{letter-spacing:var(--brand-heading-letterSpacing-400);font-size:var(--brand-text-size-400)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a{color:var(--base-color-scale-black-0);margin:0 0 var(--base-size-12);font-size:var(--base-size-16);font-weight:var(--brand-heading-weight-400);font-family:var(--brand-heading-fontFamily);line-height:var(--brand-text-lineHeight-400);-webkit-text-decoration:none;text-decoration:none;display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a svg{flex:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-desc___Rb5Tm{color:var(--base-color-scale-black-0)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5{inset-block-start:calc(var(--base-size-64) + var(--base-size-8));inset-block-end:auto;inset-inline:calc(var(--base-size-64) + var(--base-size-8));z-index:99;width:min(calc(100vw - ((var(--base-size-64) + var(--base-size-8)) * 2)), calc((var(--base-size-128) * 6) + var(--base-size-36)));max-height:calc(100vh - ((var(--base-size-64) + var(--base-size-8)) * 2));height:auto;padding:var(--base-size-16);color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-large);box-shadow:0 0 calc(var(--base-size-32) + var(--base-size-2)) var(--brand-SubdomainNavBar-searchDialog-shadowColor);margin-inline:auto;position:fixed;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog--has-results___fcWO5{padding-block-end:var(--base-size-32)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5::backdrop{background-color:var(--brand-SubdomainNavBar-searchDialog-backdropColor);-webkit-backdrop-filter:blur(var(--base-size-24));backdrop-filter:blur(var(--base-size-24))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-area___DttZX{gap:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-form___zoZB5{min-width:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-form___zoZB5 section>span:focus-within{box-shadow:none;border-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-text-input___kDY_0{color:var(--brand-color-text-default);font-size:calc(var(--base-size-16) + var(--base-size-2));font-weight:var(--base-text-weight-medium);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ{background-color:var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-area--visible___lo6ji{border-block-start:var(--brand-borderWidth-thin) dashed var(--brand-color-border-muted);margin-block-start:var(--base-size-24);padding-block-start:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-container___kow2P{width:100%;max-width:none;height:auto;max-height:calc(100vh - (((var(--base-size-64) + var(--base-size-8)) * 2) + var(--base-size-128)));box-shadow:none;background-color:#0000;border-radius:0;margin:0;padding:0;animation:none;overflow-y:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results___haCH9{height:auto;margin:0;padding:0;overflow:visible}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-heading___FTzyR,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-heading___wULje{color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);font-weight:var(--brand-heading-weight-600);line-height:var(--brand-text-lineHeight-100);margin-block-end:var(--base-size-20);padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec{margin-block-start:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z{padding:var(--base-size-16) var(--base-size-4);border-block-end:0;border-block-start:var(--brand-borderWidth-thin) dashed var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-list___vCi4S>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z:first-child,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results___haCH9>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z:first-child{border-block-start:0;padding-block-start:var(--base-size-12)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd{font-size:var(--brand-text-size-300);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a{align-items:center;gap:calc(var(--base-size-8) + var(--base-size-2));width:100%;color:var(--brand-color-text-default);font-size:var(--brand-text-size-300);font-weight:var(--brand-heading-weight-600);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-100);margin:0;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-desc___Rb5Tm,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-meta___HjhRd{display:none}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5{inset-block-start:var(--base-size-16);inset-block-end:auto;inset-inline:var(--base-size-16);width:calc(100vw - (var(--base-size-16) * 2));max-height:calc(100vh - (var(--base-size-16) * 2));height:auto}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-skip-to-content___WMHSh{z-index:100;position:absolute;inset-block-start:calc(var(--SubdomainNavBar-height) / 2);inset-inline-start:var(--base-size-16);transform:translateY(-50%)}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in___u4FB2{0%{opacity:0}to{opacity:1}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in-down-overflow____WJvz{0%{opacity:0;transform:translateY(calc(0px - var(--base-size-24)))}to{opacity:1;transform:translateY(calc(0px - var(--base-size-4)))}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-out___fhdxi{0%{opacity:1}to{opacity:0}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in-down-staggered___zQfEQ{0%{opacity:0;transform:scale(.6)translateY(-8px)}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK:before,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK:after,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-SubdomainNavBar-canvas-default:#ffffff80;--brand-SubdomainNavBar-canvas-search:var(--base-color-scale-white-0);--brand-SubdomainNavBar-canvas-overflow-default:var(--base-color-scale-white-0);--brand-SubdomainNavBar-canvas-overflow-hover:var(--base-color-scale-gray-0);--brand-SubdomainNavBar-fg-overflow-default:var(--brand-color-text-default);--brand-SubdomainNavBar-color-link-bgColor:var(--base-color-scale-gray-1);--brand-SubdomainNavBar-searchDialog-shadowColor:#0000001a;--brand-SubdomainNavBar-searchDialog-backdropColor:#0003;--brand-SubdomainNavBar-border-nav-default:var(--base-color-scale-green-6);--brand-SubdomainNavBar-border-nav-pressed:var(--base-color-scale-black-0);--brand-SubdomainNavBar-border-button-hover:var(--base-color-scale-black-0)}[data-color-mode=dark]{--brand-SubdomainNavBar-canvas-default:#0d111780;--brand-SubdomainNavBar-canvas-search:var(--base-color-scale-black-0);--brand-SubdomainNavBar-canvas-overflow-default:var(--base-color-scale-white-0);--brand-SubdomainNavBar-canvas-overflow-hover:var(--base-color-scale-gray-0);--brand-SubdomainNavBar-fg-overflow-default:var(--brand-color-text-onEmphasis);--brand-SubdomainNavBar-color-link-bgColor:var(--base-color-scale-gray-6);--brand-SubdomainNavBar-searchDialog-shadowColor:#0000001a;--brand-SubdomainNavBar-searchDialog-backdropColor:#0003;--brand-SubdomainNavBar-border-nav-default:var(--base-color-scale-green-3);--brand-SubdomainNavBar-border-nav-pressed:var(--base-color-scale-white-0);--brand-SubdomainNavBar-border-button-hover:var(--base-color-scale-white-0)}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-InlineLink-color-rest:var(--brand-color-text-link-rest);--brand-InlineLink-color-pressed:var(--brand-color-text-link-pressed)}:root{--brand-InlineLink-transition-timing:var(--brand-animation-duration-fast)}.Primer_Brand__InlineLink-module__InlineLink___U_Ama{-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__InlineLink-module__InlineLink___U_Ama:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__InlineLink-module__InlineLink___U_Ama,.Primer_Brand__InlineLink-module__InlineLink___U_Ama>span{font-size:inherit;font-weight:inherit;line-height:inherit;color:var(--brand-InlineLink-color-rest)}.Primer_Brand__InlineLink-module__InlineLink___U_Ama:active,.Primer_Brand__InlineLink-module__InlineLink___U_Ama:active>span{color:var(--brand-InlineLink-color-pressed)}[data-color-mode=dark] .Primer_Brand__InlineLink-module__InlineLink___U_Ama{-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:auto}@media (prefers-reduced-motion:reduce){.Primer_Brand__InlineLink-module__InlineLink___U_Ama,.Primer_Brand__InlineLink-module__InlineLink___U_Ama:before,.Primer_Brand__InlineLink-module__InlineLink___U_Ama:after,.Primer_Brand__InlineLink-module__InlineLink___U_Ama *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__InlineCode-module__InlineCode___NJ7el{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);-webkit-box-decoration-break:clone;box-decoration-break:clone;white-space:normal;word-wrap:anywhere;line-height:1.6}.Primer_Brand__InlineCode-module__InlineCode___NJ7el.Primer_Brand__InlineCode-module__InlineCode--nowrap___mcEPL{white-space:nowrap;word-wrap:normal}:where(h1,h2,h3,h4,h5,h6) .Primer_Brand__InlineCode-module__InlineCode___NJ7el{border-radius:var(--base-size-4)}:where(h1,h2,h3,h4,h5,h6) .Primer_Brand__InlineCode-module__InlineCode__text___N7vdd{color:var(--brand-InlineCode-color-fg-heading)}.Primer_Brand__InlineCode-module__InlineCode__text___N7vdd{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto;position:relative;inset-block-start:-.03em}:root,[data-color-mode=light]{--brand-Token-bgColor-default:var(--base-color-scale-gray-0);--brand-Token-bgColor-accent:var(--base-color-scale-green-6);--brand-Token-bgColor-hover-default:var(--base-color-scale-gray-1);--brand-Token-bgColor-hover-accent:var(--base-color-scale-green-7);--brand-Token-bgColor-hover-outline:#0000000f;--brand-Token-bgColor-hover-invisible:#0000000f;--brand-Token-bgColor-invisible:var(--base-color-scale-gray-1);--brand-Token-bgColor-outline:transparent;--brand-Token-border-outline:var(--brand-color-border-muted);--brand-Token-fgColor-default:var(--brand-color-text-default);--brand-Token-fgColor-accent:var(--base-color-scale-white-0);--brand-Token-fgColor-outline:var(--brand-color-text-default);--brand-Token-fgColor-invisible:var(--brand-color-text-default)}[data-color-mode=dark]{--brand-Token-bgColor-default:var(--base-color-scale-gray-7);--brand-Token-bgColor-accent:var(--base-color-scale-green-2);--brand-Token-bgColor-hover-default:var(--base-color-scale-gray-6);--brand-Token-bgColor-hover-accent:var(--base-color-scale-green-1);--brand-Token-bgColor-hover-outline:var(--brand-color-canvas-subtle);--brand-Token-bgColor-hover-invisible:var(--brand-color-canvas-subtle);--brand-Token-bgColor-invisible:transparent;--brand-Token-bgColor-outline:transparent;--brand-Token-border-outline:var(--brand-color-border-default);--brand-Token-fgColor-default:var(--brand-color-text-default);--brand-Token-fgColor-accent:var(--brand-color-text-onEmphasis);--brand-Token-fgColor-outline:var(--brand-color-text-default);--brand-Token-fgColor-invisible:var(--brand-color-text-default)}.Primer_Brand__Token-module__Token___r7qQC{border:var(--brand-borderWidth-thin) solid transparent;border-radius:var(--brand-borderRadius-small);align-items:center;gap:var(--base-size-8);min-width:0;max-width:100%;padding-inline:var(--base-size-8);padding-block:var(--base-size-6);vertical-align:middle;padding-block-end:var(--base-size-6);display:inline-flex}.Primer_Brand__Token-module__Token--hasLeadingVisual___cPRLz{padding-inline:calc((var(--base-size-4) + var(--base-size-8)) / 2);padding-block:calc((var(--base-size-4) + var(--base-size-8)) / 2)}.Primer_Brand__Token-module__Token--interactive___aQ1rk{cursor:pointer;-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Token-module__Token--interactive___aQ1rk:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}[data-color-mode=dark] .Primer_Brand__Token-module__Token___r7qQC{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Token-module__Token--variant-default___NBxMW{background-color:var(--brand-Token-bgColor-default);color:var(--brand-Token-fgColor-default)}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-default___NBxMW:hover{background-color:var(--brand-Token-bgColor-hover-default)}.Primer_Brand__Token-module__Token--variant-accent___Ji_P4{background-color:var(--brand-Token-bgColor-accent);color:var(--brand-Token-fgColor-accent)}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-accent___Ji_P4:hover{background-color:var(--brand-Token-bgColor-hover-accent)}.Primer_Brand__Token-module__Token--variant-outline___X52wp{background-color:var(--brand-Token-bgColor-outline);border-color:var(--brand-Token-border-outline);color:var(--brand-Token-fgColor-outline)}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-outline___X52wp:hover{background-color:var(--brand-Token-bgColor-hover-outline)}.Primer_Brand__Token-module__Token--variant-invisible___bJrcK{color:var(--brand-Token-fgColor-invisible);background-color:#0000}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-invisible___bJrcK:hover{background-color:var(--brand-Token-bgColor-hover-invisible)}.Primer_Brand__Token-module__Token__label___wC8Q5{text-overflow:ellipsis;min-width:0;font-weight:var(--base-text-weight-normal);line-height:var(--brand-text-lineHeight-100);white-space:nowrap;letter-spacing:var(--brand-text-letterSpacing-100);flex:auto;display:block;overflow:hidden}.Primer_Brand__Token-module__Token___r7qQC>.Primer_Brand__Token-module__Token__label___wC8Q5{color:inherit}.Primer_Brand__Token-module__Token__leading-visual___SDos3{width:calc((var(--base-size-16) + var(--base-size-20)) / 2);height:calc((var(--base-size-16) + var(--base-size-20)) / 2);flex-shrink:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__Token-module__Token__visual___U0j1l{display:block}.Primer_Brand__Token-module__Token__leading-visual___SDos3>.Primer_Brand__Token-module__Token__visual___U0j1l{width:calc((var(--base-size-16) + var(--base-size-20)) / 2);height:calc((var(--base-size-16) + var(--base-size-20)) / 2);max-width:calc((var(--base-size-16) + var(--base-size-20)) / 2);max-height:calc((var(--base-size-16) + var(--base-size-20)) / 2);border-radius:2px}.Primer_Brand__Token-module__Token__leading-visual___SDos3>.Primer_Brand__Token-module__Token__visual___U0j1l svg,.Primer_Brand__Token-module__Token__leading-visual___SDos3>.Primer_Brand__Token-module__Token__visual___U0j1l img{width:100%;height:100%}@media (forced-colors:active){.Primer_Brand__Token-module__Token___r7qQC{outline:var(--brand-borderWidth-thin) solid transparent}.Primer_Brand__Token-module__Token--interactive___aQ1rk:focus-visible{outline-color:highlight}}:root{--brand-FAQ-maxWidth-list:51rem}:root,[data-color-mode=light]{--brand-FAQ-color-heading:var(--brand-color-text-default);--brand-FAQ-color-tabLabel-selected:var(--brand-color-text-default);--brand-FAQGroup-buttonIndicator-idle:var(--base-color-scale-gray-3);--brand-FAQGroup-buttonIndicator-hover:var(--base-color-scale-gray-5);--brand-FAQGroup-buttonIndicator-active:var(--brand-color-accent-primary)}[data-color-mode=dark]{--brand-FAQ-color-heading:var(--brand-color-text-default);--brand-FAQ-color-tabLabel-selected:var(--brand-color-text-default);--brand-FAQGroup-buttonIndicator-idle:var(--base-color-scale-gray-7);--brand-FAQGroup-buttonIndicator-hover:var(--base-color-scale-gray-5);--brand-FAQGroup-buttonIndicator-active:var(--brand-color-accent-primary)}:root{--brand-FAQ-heading-marginBottom:var(--base-size-40)}@media (width>=544px){:root{--brand-FAQ-heading-marginBottom:var(--base-size-40)}}@media (width>=768px){:root{--brand-FAQ-heading-marginBottom:var(--base-size-64)}}@media (width>=1012px){:root{--brand-FAQ-heading-marginBottom:var(--base-size-96)}}.Primer_Brand__FAQ-module__FAQ___R3vLU{max-width:var(--brand-FAQ-maxWidth-list);margin:0 auto}.Primer_Brand__FAQ-module__FAQ--variant-gridline___mM5vd{border-block-end:var(--brand-color-border-muted) var(--brand-borderWidth-thin) solid;max-width:100%;padding-block-end:var(--base-size-40)}.Primer_Brand__FAQ-module__FAQ__content-wrapper--gridline___XqrgD{padding-inline:var(--base-size-20);max-width:var(--brand-FAQ-maxWidth-list);margin:0 auto}.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{padding-inline:var(--base-size-20);border-block-end:var(--brand-color-border-muted) var(--brand-borderWidth-thin) solid;margin-block-end:var(--base-size-40)}.Primer_Brand__FAQ-module__FAQ__heading___bH0aG{color:var(--brand-FAQ-color-heading);margin-bottom:var(--brand-FAQ-heading-marginBottom)}.Primer_Brand__FAQ-module__FAQ__subheading___I4puv{margin-bottom:var(--base-size-16);color:var(--brand-color-text-muted);text-transform:uppercase;font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__FAQ-module__FAQ__heading--start___eHaT3{text-align:left}.Primer_Brand__FAQ-module__FAQ__heading--center___xMpbW{text-align:center;max-width:18ch;margin-left:auto;margin-right:auto}.Primer_Brand__FAQ-module__FAQ__heading--large___pBEPT{font-weight:var(--brand-text-weight-normal);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800)}.Primer_Brand__FAQ-module__FAQ___R3vLU details+.Primer_Brand__FAQ-module__FAQ__subheading___I4puv{margin-top:var(--base-size-48)}.Primer_Brand__FAQ-module__FAQ___R3vLU.Primer_Brand__FAQ-module__details__summary___zIBcp{font-weight:var(--brand-text-weight-normal);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800);color:var(--brand-FAQ-color-heading);cursor:pointer;background:0 0;border:none;outline:none;margin:0;padding:0}@media screen and (width>=48rem){.Primer_Brand__FAQ-module__FAQ__content-wrapper--gridline___XqrgD,.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{padding-inline:var(--base-size-36)}}@media screen and (width>=63.25rem){.Primer_Brand__FAQ-module__FAQ__content-wrapper--gridline___XqrgD,.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{padding-inline:0}.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{margin-block-end:var(--base-size-48)}.Primer_Brand__FAQ-module__FAQ--variant-gridline___mM5vd{padding-block-end:var(--base-size-64)}}.Primer_Brand__FAQGroup-module__FAQGroup___D0VvR{justify-content:space-between;gap:var(--brand-stack-gap-spacious);display:none}.Primer_Brand__FAQGroup-module__FAQGroup__accordion___dkveP{margin-block-start:var(--base-size-48)}.Primer_Brand__FAQGroup-module__FAQGroup__panel-subHeading___F0U3h{text-transform:uppercase;font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);margin-block-start:calc(var(--base-size-8) + 1px)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist___WdY5Z .Primer_Brand__FAQGroup-module__FAQ__heading___w52lv{display:none}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC{appearance:none;padding-block:var(--base-size-8);cursor:pointer;align-items:center;gap:var(--base-size-12);width:100%;font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-100);letter-spacing:.15px;text-transform:uppercase;text-align:start;color:var(--brand-color-text-muted);text-overflow:ellipsis;white-space:nowrap;transition:gap var(--brand-animation-duration-fast) var(--brand-animation-easing-default);background-color:#0000;border:none;padding-inline:0;display:flex;overflow:hidden}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:2px}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC:before{content:"";width:calc(var(--base-size-8) + var(--base-size-2));height:var(--base-size-12);background-color:var(--brand-FAQGroup-buttonIndicator-idle);transform-origin:0;transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-default), background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default);flex-shrink:0;display:block;transform:scaleX(.7)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC:hover:before{background-color:var(--brand-FAQGroup-buttonIndicator-hover)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC[aria-selected=true]{color:var(--brand-FAQ-color-tabLabel-selected);gap:calc(var(--base-size-12) + 3px)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC[aria-selected=true]:before{background-color:var(--brand-FAQGroup-buttonIndicator-active);transform:scaleX(1)}.Primer_Brand__FAQGroup-module__FAQGroup__nested-accordion-item___JGGeC summary h4{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist--gridline___OCZgL{padding-inline-start:var(--base-size-48);padding-block:var(--base-size-80)}.Primer_Brand__FAQGroup-module__FAQGroup__content--gridline___C9omN{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-inline:var(--base-size-64);padding-block-start:var(--base-size-80);padding-block-end:var(--base-size-96)}@media (forced-colors:active){.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC[aria-selected=true]{border-color:highlight;border-width:var(--brand-borderWidth-thicker);color:highlighttext}}.Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{padding-inline:var(--base-size-20)}@media screen and (width>=618px){.Primer_Brand__FAQGroup-module__FAQGroup__gridline-wrapper___OBSr9{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__FAQGroup-module__FAQGroup__accordion___dkveP{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);max-width:618px;margin-block-start:0;margin-inline:auto}.Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{max-width:618px;margin:0 auto}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper___lkgjS{padding-block-end:var(--base-size-40)}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper--gridline___Q_oGI{border-block-end:var(--brand-color-border-muted) var(--brand-borderWidth-thin) solid}.Primer_Brand__FAQGroup-module__FAQGroup__accordion--gridline___zDvVd:first-child summary{border-block-start:none!important}.Primer_Brand__FAQGroup-module__FAQGroup__accordion--gridline___zDvVd:last-child summary{border-block-end:none!important}}@media screen and (width>=63.25rem){.Primer_Brand__FAQGroup-module__FAQGroup___D0VvR{display:grid}.Primer_Brand__FAQGroup-module__FAQGroup__accordion___dkveP{display:none}.Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{max-width:100%;padding-inline:0}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper--gridline___Q_oGI .Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{padding-inline-start:var(--base-size-44)}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper___lkgjS{padding-block-end:var(--base-size-64)}}@media screen and (width>=80rem){.Primer_Brand__FAQGroup-module__FAQGroup__tablist--gridline___OCZgL{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__FAQGroup-module__FAQGroup__content--gridline___C9omN{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__ControlGroup-module__ControlGroup__container___gYDZP{gap:var(--base-size-8);font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-100);border:none;flex-direction:column;margin:0;padding:0;display:flex}.Primer_Brand__ControlGroup-module__ControlGroup__label___scr79{margin:0;margin-block-end:var(--base-size-8);padding:0}.Primer_Brand__ControlGroup-module__ControlGroup__validation___sJqFH{gap:var(--base-size-4);font-weight:var(--base-text-weight-medium);align-items:center;display:flex}.Primer_Brand__ControlGroup-module__ControlGroup__validation--success___eyNH9{color:var(--brand-color-text-emphasized)}.Primer_Brand__ControlGroup-module__ControlGroup__validation--error____n_l3{color:var(--brand-color-danger-fg)}.Primer_Brand__ControlGroup-module__ControlGroup__validation-icon--success___OO92u,.Primer_Brand__ControlGroup-module__ControlGroup__validation-icon--error___rZPNd{display:flex}.Primer_Brand__ControlGroup-module__ControlGroup__validation--animate-in___nHrFv{animation:.17s Primer_Brand__ControlGroup-module__ControlGroupValidationFadeIn___xgh8U var(--brand-animation-easing-glide)}.Primer_Brand__ControlGroup-module__ControlGroup__container___gYDZP label{font-weight:var(--base-text-weight-medium)}@keyframes Primer_Brand__ControlGroup-module__ControlGroupValidationFadeIn___xgh8U{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.Primer_Brand__Avatar-module__Avatar___QrJMw{width:var(--base-size-40);height:var(--base-size-40);display:inline-block;overflow:hidden}.Primer_Brand__Avatar-module__Avatar--shape-circle___VvaB7{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Avatar-module__Avatar--shape-square___hKak4{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Avatar-module__Avatar__image___AajXN{-o-object-fit:cover;object-fit:cover;width:100%;height:100%;display:block}.Primer_Brand__Avatar-module__Avatar--size-32___vJxfW{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar--size-40___RSkow{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar--size-48___TvwXR{width:var(--base-size-48);height:var(--base-size-48)}.Primer_Brand__Avatar-module__Avatar--size-64___rovws{width:var(--base-size-64);height:var(--base-size-64)}.Primer_Brand__Avatar-module__Avatar--size-80___YDbIK{width:var(--base-size-80);height:var(--base-size-80)}.Primer_Brand__Avatar-module__Avatar-narrow--size-32___wmqNx{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar-narrow--size-40___JnS3w{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar-narrow--size-48___X8e2V{width:var(--base-size-48);height:var(--base-size-48)}@media screen and (width>=48rem){.Primer_Brand__Avatar-module__Avatar-regular--size-32___f5goH{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar-regular--size-40___Qaf20{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar-regular--size-48___db8dV{width:var(--base-size-48);height:var(--base-size-48)}.Primer_Brand__Avatar-module__Avatar-regular--size-64___rBoTS{width:var(--base-size-64);height:var(--base-size-64)}.Primer_Brand__Avatar-module__Avatar-regular--size-80___AKjNL{width:var(--base-size-80);height:var(--base-size-80)}}@media screen and (width>=80rem){.Primer_Brand__Avatar-module__Avatar-wide--size-32___Kn8pg{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar-wide--size-40___DBSrS{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar-wide--size-48___ai2Hf{width:var(--base-size-48);height:var(--base-size-48)}.Primer_Brand__Avatar-module__Avatar-wide--size-64___FLSak{width:var(--base-size-64);height:var(--base-size-64)}.Primer_Brand__Avatar-module__Avatar-wide--size-80___h09bA{width:var(--base-size-80);height:var(--base-size-80)}}:root{--brand-Testimonial-quote-letterSpacing-large:var(--brand-text-letterSpacing-900);--brand-Testimonial-quote-letterSpacing-default:var(--brand-text-letterSpacing-400);--brand-Testimonial-quote-fontWeight-large:var(--brand-heading-weight-600);--brand-Testimonial-quote-fontWeight-default:var(--brand-heading-weight-1000);--brand-Testimonial-quote-fontSize-large:var(--brand-text-size-500);--brand-Testimonial-quote-fontSize-default:var(--brand-text-size-400)}:root,[data-color-mode=light]{--brand-Testimonial-quoteMarkBackground-default:var(--base-color-scale-gray-0);--brand-Testimonial-quoteMarkBackground-blue:var(--base-color-scale-blue-0);--brand-Testimonial-quoteMarkBackground-coral:var(--base-color-scale-coral-0);--brand-Testimonial-quoteMarkBackground-green:var(--base-color-scale-green-0);--brand-Testimonial-quoteMarkBackground-gray:var(--base-color-scale-gray-0);--brand-Testimonial-quoteMarkBackground-indigo:var(--base-color-scale-indigo-0);--brand-Testimonial-quoteMarkBackground-lemon:var(--base-color-scale-lemon-0);--brand-Testimonial-quoteMarkBackground-lime:var(--base-color-scale-lime-0);--brand-Testimonial-quoteMarkBackground-orange:var(--base-color-scale-orange-0);--brand-Testimonial-quoteMarkBackground-pink:var(--base-color-scale-pink-0);--brand-Testimonial-quoteMarkBackground-purple:var(--base-color-scale-purple-0);--brand-Testimonial-quoteMarkBackground-red:var(--base-color-scale-red-0);--brand-Testimonial-quoteMarkBackground-teal:var(--base-color-scale-teal-0);--brand-Testimonial-quoteMarkBackground-yellow:var(--base-color-scale-yellow-0);--brand-Testimonial-quoteMarkBackground-blue-purple:var(--base-color-scale-blue-0);--brand-Testimonial-quoteMarkBackground-green-blue:var(--base-color-scale-green-0);--brand-Testimonial-quoteMarkBackground-pink-blue:var(--base-color-scale-pink-0);--brand-Testimonial-quoteMarkBackground-purple-red:var(--base-color-scale-purple-0);--brand-Testimonial-quoteMarkBackground-red-orange:var(--base-color-scale-red-0);--brand-Testimonial-borderMask-default:linear-gradient(180deg, #0009, #0000004d);--brand-Testimonial-borderMask-subtle:linear-gradient(180deg, #0009, #0000004d);--brand-Testimonial-quoteMarkColor-default:var(--brand-color-text-default);--brand-Testimonial-quoteMarkColor-blue:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-blue-purple-start:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-blue-purple-end:var(--base-color-scale-purple-5);--brand-Testimonial-quoteMarkColor-coral:var(--base-color-scale-coral-5);--brand-Testimonial-quoteMarkColor-green:var(--base-color-scale-green-6);--brand-Testimonial-quoteMarkColor-green-blue-start:var(--base-color-scale-green-6);--brand-Testimonial-quoteMarkColor-green-blue-end:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-gray:var(--base-color-scale-gray-5);--brand-Testimonial-quoteMarkColor-indigo:var(--base-color-scale-indigo-5);--brand-Testimonial-quoteMarkColor-lemon:var(--base-color-scale-lemon-5);--brand-Testimonial-quoteMarkColor-lime:var(--base-color-scale-lime-5);--brand-Testimonial-quoteMarkColor-orange:var(--base-color-scale-orange-5);--brand-Testimonial-quoteMarkColor-pink:var(--base-color-scale-pink-5);--brand-Testimonial-quoteMarkColor-pink-blue-start:var(--base-color-scale-pink-5);--brand-Testimonial-quoteMarkColor-pink-blue-end:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-purple:var(--base-color-scale-purple-5);--brand-Testimonial-quoteMarkColor-purple-red-start:var(--base-color-scale-purple-5);--brand-Testimonial-quoteMarkColor-purple-red-end:var(--base-color-scale-red-5);--brand-Testimonial-quoteMarkColor-red:var(--base-color-scale-red-5);--brand-Testimonial-quoteMarkColor-red-orange-start:var(--base-color-scale-red-5);--brand-Testimonial-quoteMarkColor-red-orange-end:var(--base-color-scale-orange-5);--brand-Testimonial-quoteMarkColor-teal:var(--base-color-scale-teal-5);--brand-Testimonial-quoteMarkColor-yellow:var(--base-color-scale-yellow-5);--brand-Testimonial-quote-color-default:var(--brand-color-text-default);--brand-Testimonial-quote-color-emphasis:var(--base-color-scale-green-7)}[data-color-mode=dark]{--brand-Testimonial-quoteMarkBackground-default:var(--base-color-scale-gray-6);--brand-Testimonial-quoteMarkBackground-blue:var(--base-color-scale-blue-8);--brand-Testimonial-quoteMarkBackground-coral:var(--base-color-scale-coral-8);--brand-Testimonial-quoteMarkBackground-green:var(--base-color-scale-green-8);--brand-Testimonial-quoteMarkBackground-gray:var(--base-color-scale-gray-6);--brand-Testimonial-quoteMarkBackground-indigo:var(--base-color-scale-indigo-8);--brand-Testimonial-quoteMarkBackground-lemon:var(--base-color-scale-lemon-8);--brand-Testimonial-quoteMarkBackground-lime:var(--base-color-scale-lime-8);--brand-Testimonial-quoteMarkBackground-orange:var(--base-color-scale-orange-8);--brand-Testimonial-quoteMarkBackground-pink:var(--base-color-scale-pink-8);--brand-Testimonial-quoteMarkBackground-purple:var(--base-color-scale-purple-8);--brand-Testimonial-quoteMarkBackground-red:var(--base-color-scale-red-8);--brand-Testimonial-quoteMarkBackground-teal:var(--base-color-scale-teal-8);--brand-Testimonial-quoteMarkBackground-yellow:var(--base-color-scale-yellow-8);--brand-Testimonial-quoteMarkBackground-blue-purple:var(--base-color-scale-blue-8);--brand-Testimonial-quoteMarkBackground-green-blue:var(--base-color-scale-green-8);--brand-Testimonial-quoteMarkBackground-pink-blue:var(--base-color-scale-pink-8);--brand-Testimonial-quoteMarkBackground-purple-red:var(--base-color-scale-purple-8);--brand-Testimonial-quoteMarkBackground-red-orange:var(--base-color-scale-red-8);--brand-Testimonial-borderMask-default:linear-gradient(180deg, #0009, #0000001a);--brand-Testimonial-borderMask-subtle:linear-gradient(180deg, #0009, #0000001a);--brand-Testimonial-quoteMarkColor-default:var(--brand-color-text-default);--brand-Testimonial-quoteMarkColor-blue:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-blue-purple-start:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-blue-purple-end:var(--base-color-scale-purple-2);--brand-Testimonial-quoteMarkColor-coral:var(--base-color-scale-coral-2);--brand-Testimonial-quoteMarkColor-green:var(--base-color-scale-green-2);--brand-Testimonial-quoteMarkColor-green-blue-start:var(--base-color-scale-green-2);--brand-Testimonial-quoteMarkColor-green-blue-end:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-gray:var(--base-color-scale-gray-2);--brand-Testimonial-quoteMarkColor-indigo:var(--base-color-scale-indigo-2);--brand-Testimonial-quoteMarkColor-lemon:var(--base-color-scale-lemon-2);--brand-Testimonial-quoteMarkColor-lime:var(--base-color-scale-lime-2);--brand-Testimonial-quoteMarkColor-orange:var(--base-color-scale-orange-2);--brand-Testimonial-quoteMarkColor-pink:var(--base-color-scale-pink-2);--brand-Testimonial-quoteMarkColor-pink-blue-start:var(--base-color-scale-pink-2);--brand-Testimonial-quoteMarkColor-pink-blue-end:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-purple:var(--base-color-scale-purple-2);--brand-Testimonial-quoteMarkColor-purple-red-start:var(--base-color-scale-purple-2);--brand-Testimonial-quoteMarkColor-purple-red-end:var(--base-color-scale-red-2);--brand-Testimonial-quoteMarkColor-red:var(--base-color-scale-red-2);--brand-Testimonial-quoteMarkColor-red-orange-start:var(--base-color-scale-red-2);--brand-Testimonial-quoteMarkColor-red-orange-end:var(--base-color-scale-orange-2);--brand-Testimonial-quoteMarkColor-teal:var(--base-color-scale-teal-2);--brand-Testimonial-quoteMarkColor-yellow:var(--base-color-scale-yellow-2);--brand-Testimonial-quote-color-default:var(--brand-color-text-default);--brand-Testimonial-quote-color-emphasis:var(--brand-color-text-emphasized)}.Primer_Brand__Testimonial-module__Testimonial___UUywT{color:var(--brand-color-text-default);font-family:var(--brand-fontStack-sansSerif)}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4{border-radius:var(--brand-borderRadius-xlarge);padding:var(--base-size-48) var(--base-size-32);position:relative}@media screen and (width>=48rem){.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4{padding:var(--base-size-48)}}@media screen and (width>=63.25rem){.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c{padding:var(--base-size-96) var(--base-size-128)}}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4{background-color:var(--brand-color-canvas-default)}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc:before,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4:before{pointer-events:none;content:"";border-radius:inherit;position:absolute;inset:0}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc.Primer_Brand__Testimonial-module__Testimonial--border___B_Qre:before{-webkit-mask-image:var(--brand-Testimonial-borderMask-subtle);-webkit-mask-image:var(--brand-Testimonial-borderMask-subtle);mask-image:var(--brand-Testimonial-borderMask-subtle);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default)}.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4.Primer_Brand__Testimonial-module__Testimonial--border___B_Qre:before{-webkit-mask-image:var(--brand-Testimonial-borderMask-default);-webkit-mask-image:var(--brand-Testimonial-borderMask-default);mask-image:var(--brand-Testimonial-borderMask-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1{--brand-Testimonial-quoteMarkColor-gradient:radial-gradient(circle at top left, var(--brand-Testimonial-quoteMarkColor-start), var(--brand-Testimonial-quoteMarkColor-end));--brand-Testimonial-quoteMarkColor-background:var(--brand-Testimonial-quoteMarkColor-gradient,var(--brand-Testimonial-quoteMarkColor,currentColor));color:var(--brand-Testimonial-quoteMarkColor-start,var(--brand-Testimonial-quoteMarkColor,currentColor));font-size:var(--base-size-48);line-height:var(--base-size-48);font-weight:var(--base-text-weight-extrabold);position:relative}.Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1:before{content:"";background:var(--brand-Testimonial-quoteMarkColor-background);-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask-composite:xor;position:absolute;inset:0;-webkit-mask-composite:xor;mask-composite:exclude}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--hasBackground___VV6UY{width:calc(var(--base-size-48) + var(--base-size-8));height:calc(var(--base-size-48) + var(--base-size-8));border-radius:var(--base-size-12);background-color:var(--brand-Testimonial-quoteMarkBackground,var(--base-color-scale-gray-0));font-size:var(--base-size-64);justify-content:center;align-items:center;line-height:1;display:inline-flex}.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c .Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1:not(.Primer_Brand__Testimonial-module__Testimonial__quoteMark--hasBackground___VV6UY){font-size:7.5rem;line-height:1}.Primer_Brand__Testimonial-module__Testimonial__quoteMarkGlyph___skopW{display:block}.Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-family:var(--brand-fontStack-sansSerif);font-size:var(--brand-Testimonial-quote-fontSize-default);font-weight:var(--brand-Testimonial-quote-fontWeight-default);letter-spacing:var(--brand-Testimonial-quote-letterSpacing-default);line-height:1.2;display:block}.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-size:var(--brand-Testimonial-quote-fontSize-large);font-weight:var(--brand-Testimonial-quote-fontWeight-large);letter-spacing:var(--brand-Testimonial-quote-letterSpacing-large)}.Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F em,.Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F b{color:var(--brand-Testimonial-quote-color-emphasis);font-style:normal;font-weight:inherit}.Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{gap:var(--base-size-16);margin-top:var(--base-size-24);align-items:center;display:flex}.Primer_Brand__Testimonial-module__Testimonial-logo-image___KQQfi{display:block}.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{margin-top:var(--base-size-64)}.Primer_Brand__Testimonial-module__Testimonial-caption___Wvb67{flex-direction:column;display:flex}.Primer_Brand__Testimonial-module__Testimonial-avatar___Kaxqh{flex:none}.Primer_Brand__Testimonial-module__Testimonial-from___Kfj__{font-weight:var(--base-text-weight-normal);text-transform:uppercase}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{gap:var(--base-size-36);width:100%;max-width:1176px;padding-inline:var(--base-size-20);padding-block:var(--base-size-40);flex-direction:column;display:flex}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteWrapper___M9wR7{align-items:flex-start;gap:var(--base-size-36);flex-direction:column;min-width:0;display:flex}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{align-items:flex-start;gap:var(--base-size-28);flex-direction:column;width:100%;margin-block-start:0}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-avatar___Kaxqh{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-caption___Wvb67{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);gap:var(--base-size-6);width:100%;padding-block-start:var(--base-size-20)}@media screen and (width>=48rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteWrapper___M9wR7{gap:var(--base-size-40)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{width:356px}}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-from___Kfj__{font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-heading-weight-500);line-height:var(--brand-text-lineHeight-100);text-transform:uppercase;letter-spacing:.0107em;align-items:center;display:flex}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-position___j2h0f{font-size:var(--brand-text-size-200);font-weight:var(--base-text-weight-normal);letter-spacing:.01em;line-height:1.6}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1{font-family:var(--brand-fontStack-monospace);font-weight:var(--brand-fontWeight-300)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteMarkGlyph___skopW{transform:translateY(var(--base-size-12))}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1:not(.Primer_Brand__Testimonial-module__Testimonial__quoteMark--hasBackground___VV6UY){margin-left:-.18em}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-family:var(--brand-fontStack-monospace);letter-spacing:-.01em;font-size:1.5rem;font-weight:425;line-height:var(--brand-text-lineHeight-100);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (width>=48rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{max-width:618px;padding-inline:var(--base-size-36);padding-block:var(--base-size-44);margin-inline:auto}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{letter-spacing:-.02em;font-size:1.625rem}}@media screen and (width>=63.25rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{grid-column-gap:calc(var(--base-size-96) + var(--base-size-24));-moz-column-gap:calc(var(--base-size-96) + var(--base-size-24));column-gap:calc(var(--base-size-96) + var(--base-size-24));max-width:1176px;padding-inline:var(--base-size-48);padding-block:var(--base-size-88);grid-template-columns:minmax(0,744px) 312px;align-items:end;margin-inline:auto;display:grid}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM.Primer_Brand__Testimonial-module__Testimonial--hasLink___Qr_M5{row-gap:var(--base-size-48)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteWrapper___M9wR7{gap:var(--base-size-48);grid-area:1/1}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{gap:var(--base-size-32);grid-area:1/2;width:312px}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM.Primer_Brand__Testimonial-module__Testimonial--hasLink___Qr_M5 .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{grid-row:1/span 2}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-caption___Wvb67{padding-block-start:var(--base-size-24)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-size:var(--base-size-32)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-link___gHJ58{grid-area:2/1}}@media screen and (width>=80rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{padding-inline:0}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-avatar___Kaxqh{width:var(--base-size-48);height:var(--base-size-48)}}.Primer_Brand__Testimonial-module__Testimonial-link___gHJ58{margin-top:var(--base-size-8)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-link___gHJ58{align-self:flex-start;width:fit-content;margin-top:0}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--default___nAhKC{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-default);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-default)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--blue___gf2qX{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-blue);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-blue)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--blue-purple___Ec9P1{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-blue-purple-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-blue-purple-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-blue-purple)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--coral___WzMiA{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-coral);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-coral)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--green___gsL2x{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-green);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-green)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--green-blue___wqq5w{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-green-blue-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-green-blue-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-green-blue)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--gray___WGLgi{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-gray);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-gray)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--indigo___KN9eK{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-indigo);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-indigo)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--lemon___XgAJR{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-lemon);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-lemon)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--lime___DyfRi{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-lime);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-lime)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--orange___wA2te{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-orange);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-orange)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--pink___hrNQC{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-pink);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-pink)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--pink-blue___z73Hz{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-pink-blue-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-pink-blue-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-pink-blue)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--purple___H1_Zx{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-purple);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-purple)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--purple-red___Wb4Yy{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-purple-red-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-purple-red-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-purple-red)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--red___nzAC4{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-red);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-red)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--red-orange___f5Woq{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-red-orange-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-red-orange-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-red-orange)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--teal___EPZ3D{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-teal);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-teal)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--yellow___gFQED{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-yellow);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-yellow)}:root,[data-color-mode=light]{--brand-ComparisonTable-featured-color-start:var(--base-color-scale-pink-4);--brand-ComparisonTable-featured-color-end:var(--base-color-scale-indigo-5)}[data-color-mode=dark]{--brand-ComparisonTable-featured-color-start:var(--base-color-scale-pink-2);--brand-ComparisonTable-featured-color-end:var(--base-color-scale-indigo-3)}:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-8)}@media (width>=544px){:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-40)}}@media (width>=768px){:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-64)}}@media (width>=1012px){:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-96)}}.Primer_Brand__ComparisonTable-module__ComparisonTable--heading___CeSsH{text-align:left;max-width:18ch;margin-bottom:var(--brand-ComparisonTable-heading-marginBottom)}@media screen and (width>=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable--heading___CeSsH{text-align:center;margin-left:auto;margin-right:auto}}.Primer_Brand__ComparisonTable-module__ComparisonTable-footnote___rf35Q{text-align:left;margin:var(--base-size-24) 0}@media screen and (width>=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable-footnote___rf35Q{text-align:center}}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX{border-collapse:collapse;border-spacing:0;font-family:var(--brand-body-fontFamily);width:100%}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr{text-align:left;flex-direction:column;width:100%;display:flex}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR{color:var(--brand-color-text-default);font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);padding-bottom:var(--base-size-24)}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{font-weight:var(--base-text-weight-medium);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container___AHNr0{padding-top:var(--base-size-8);display:block}@media screen and (width<=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{display:none}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR{margin-bottom:var(--base-size-32);padding-bottom:0}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tbody tr{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-default)}.Primer_Brand__ComparisonTable-module__ComparisonTable-inline-cell-label___hE3hL{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400)}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tbody .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{margin-top:var(--base-size-24);margin-bottom:var(--base-size-16);font-weight:var(--brand-heading-weight-300);font-size:var(--brand-text-size-300);line-height:var(--brand-heading-lineHeight-300)}}@media screen and (width>=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr{flex-direction:row}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container___AHNr0{padding-top:var(--base-size-24)}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{text-align:left}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM:first-child{width:25%;margin-right:40px}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr td:first-of-type:not(.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM),.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr:first-of-type .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM:nth-child(2){width:40%}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr td:nth-of-type(2):not(.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM),.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr:first-of-type .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM:nth-child(3){width:35%;margin-left:40px}.Primer_Brand__ComparisonTable-module__ComparisonTable--hide-element-on-narrow___GnYyu{display:none}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container___AHNr0{border-top:var(--brand-borderWidth-thick) solid var(--brand-color-border-default)}}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--first___Ps2aK{color:var(--brand-color-text-muted)}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{padding:var(--base-size-24) 0 var(--base-size-16)}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading-label--featured___c_wMH{z-index:2;position:relative}@media screen and (width<=34rem){.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR:not(.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM){padding-left:25px;position:relative}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR:before{content:"";background:var(--brand-color-border-default);width:5px;position:absolute;top:0;bottom:0;left:0}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk:before{background:linear-gradient(180deg, var(--brand-ComparisonTable-featured-color-start), var(--brand-ComparisonTable-featured-color-end))}}@media screen and (width>=34rem){.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading-label--featured___c_wMH{color:#0000;background:linear-gradient(89.46deg, var(--brand-ComparisonTable-featured-color-start) 0.87%, var(--brand-ComparisonTable-featured-color-end) 75.12%);-webkit-background-clip:text;background-clip:text}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400);align-items:flex-end;display:inline-flex}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--first___Ps2aK{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400)}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk,.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb{padding-left:var(--base-size-24);padding-right:var(--base-size-24);border-right:2px solid var(--brand-ComparisonTable-featured-color-end);border-left:2px solid var(--brand-ComparisonTable-featured-color-start)}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb{background:var(--brand-color-canvas-default);border-top-left-radius:.45rem;border-top-right-radius:.45rem;position:relative}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb:before,.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb:after{z-index:0;content:"";background:linear-gradient(90deg, var(--brand-ComparisonTable-featured-color-start), var(--brand-ComparisonTable-featured-color-end));border-top-left-radius:.45rem;border-top-right-radius:.45rem;position:absolute;inset:-2px -2px 0}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb:after{z-index:1;background:var(--brand-color-canvas-default);border-top-left-radius:.35rem;border-top-right-radius:.35rem;top:0;left:0;right:0}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm{background:var(--brand-color-canvas-default);border-bottom-right-radius:.45rem;border-bottom-left-radius:.45rem;position:relative}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm:after,.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm:before{z-index:0;content:"";background:linear-gradient(90deg, var(--brand-ComparisonTable-featured-color-start), var(--brand-ComparisonTable-featured-color-end));border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem;position:absolute;inset:0 -2px}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm:after{z-index:1;background:var(--brand-color-canvas-default);border-bottom-right-radius:.35rem;border-bottom-left-radius:.35rem;bottom:2px;left:0;right:0}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container--featured___x6tKO{z-index:2;position:relative}}.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{padding:var(--base-size-12) var(--base-size-16);z-index:91;display:flex;position:sticky;top:0;left:0;right:0}.Primer_Brand__AnchorNav-module__AnchorNav--no-bg-scroll___oiJl5{height:100vh;overflow:hidden}.Primer_Brand__AnchorNav-module__AnchorNav--hide-until-sticky___d3Ec2:not(.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO){opacity:0;visibility:hidden;transition:visibility var(--brand-animation-duration-default) var(--brand-animation-easing-default), opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__AnchorNav-module__AnchorNav--hide-until-sticky___d3Ec2.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO{opacity:1;visibility:visible}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO{position:fixed;box-shadow:0 3px 6px #8c959f26,0 1px 1px #0000001a}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk{transform-style:preserve-3d;z-index:91}.Primer_Brand__AnchorNav-module__AnchorNav-link-container___VpHV2{width:100%;display:flex;position:relative}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{z-index:91;width:100%;max-width:1280px;max-height:calc(100vh - var(--base-size-12) * 2);position:relative}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc .Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{background-color:var(--brand-color-canvas-default)}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ:not(.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk) .Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{justify-content:space-between;align-items:center;display:flex}.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container--expanded____aoje{height:auto}.Primer_Brand__AnchorNav-module__AnchorNav-link-container___VpHV2{padding-left:var(--base-size-16);display:none}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link-container___VpHV2{flex-direction:column;display:flex}}@media screen and (width>=40rem) and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq:not(.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer--no-offset___xn5H8){top:var(--base-size-8);position:absolute;right:0}}@media screen and (width>=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{padding:var(--base-size-12) var(--base-size-40);height:75px}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc,.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{align-items:center;margin:0 auto;display:flex}}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{place-items:center flex-start;width:100%;height:48px;-webkit-text-decoration:none;text-decoration:none;display:flex}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{animation:1s Primer_Brand__AnchorNav-module__fade-in___KfA_2;animation-timing-function:var(--brand-animation-easing-glide);margin:0 0 2px}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{padding:0 0 0 var(--base-size-16);position:absolute;left:0}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:before{content:"";background-color:var(--brand-AnchorNav-link-underline-default);width:2px;height:50%;transition:opacity var(--brand-animation-duration-fast), transform var(--brand-animation-duration-fast);opacity:1;transform-origin:0;position:absolute;left:0;transform:scale(0)}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link--is-active___xbYDS:before{transform:scale(1)}}@media screen and (width>=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{margin:0 1px;position:relative}.Primer_Brand__AnchorNav-module__AnchorNav-link--center___aryYq{justify-content:center}.Primer_Brand__AnchorNav-module__AnchorNav-link--start___COZM3{width:auto;margin-right:var(--base-size-48);justify-content:flex-start}}.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{font-weight:var(--brand-text-weight-400);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-200);color:var(--brand-color-text-default);transition:color var(--brand-animation-easing-glide) var(--brand-animation-duration-faster);position:relative}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{background-color:var(--brand-color-canvas-default)}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link-label--is-active___DyUFY{color:var(--brand-color-focus)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:not(.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=true]){visibility:hidden}.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=false][data-first=true],.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=false][data-first=true]{visibility:visible}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container--expanded____aoje .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{text-align:left;flex-direction:column;justify-content:center;align-items:flex-start;display:flex;position:relative;top:auto;left:auto;right:auto;visibility:visible!important}}@media screen and (width>=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{white-space:nowrap}.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{content:"";background-color:var(--brand-AnchorNav-link-underline-default);width:100%;height:2px;transition:opacity var(--brand-animation-duration-fast), transform var(--brand-animation-duration-fast), background-color var(--brand-animation-duration-fast);opacity:1;transform-origin:50%;position:absolute;bottom:-6px;left:0;transform:scale(0)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:hover .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after,.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:focus .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after,.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=true] .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{opacity:1;transform:scaleX(.8)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:active .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{background-color:var(--brand-AnchorNav-link-underline-pressed);transform:scaleX(.9)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=true] .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{background-color:var(--brand-AnchorNav-link-underline-pressed);opacity:1}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:focus-visible .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{opacity:0}}.Primer_Brand__AnchorNav-module__AnchorNav-menu-button___tputP{display:none}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-menu-button___tputP{all:unset;cursor:pointer;padding:var(--base-size-8) var(--base-size-16);height:var(--base-size-32);z-index:2;border-radius:var(--brand-borderRadius-small);align-items:center;padding-left:0;display:inline-flex}.Primer_Brand__AnchorNav-module__AnchorNav-menu-button-arrow___v5tcA{padding:0 calc(var(--base-size-12) / 2);width:32px;height:32px;color:var(--brand-color-text-default)}.Primer_Brand__AnchorNav-module__AnchorNav-menu-button___tputP:focus-visible{border-color:var(--brand-color-focus);box-shadow:0 0 0 2px var(--brand-color-focus);outline:none}.Primer_Brand__AnchorNav-module__AnchorNav-overlay--expanded___xXv6O{z-index:-3;width:100%;height:100dvh;animation:.5s Primer_Brand__AnchorNav-module__fade-in___KfA_2;animation-timing-function:var(--brand-animation-easing-glide);cursor:pointer;background:#00000080;position:absolute;top:0;left:0;right:0;transform:translateZ(-1px)}}.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq{gap:var(--base-size-8);display:flex}.Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{z-index:1;white-space:nowrap;padding-inline:var(--base-size-24);margin-left:auto;display:flex}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{align-self:flex-start}@media screen and (width<=40rem){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{padding:0}.Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{display:none}.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq{flex-direction:column}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{width:100%;margin-top:var(--base-size-8);display:flex}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{padding:var(--base-size-12) var(--base-size-16);overflow-y:auto}}@media screen and (width>=40rem){.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq{gap:var(--base-size-16)}.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer--multiple___hgA_r{margin-inline-start:var(--base-size-16)}}@keyframes Primer_Brand__AnchorNav-module__fade-in___KfA_2{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ,.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ:before,.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ:after,.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-AnchorNav-link-underline-default:var(--base-color-scale-gray-4);--brand-AnchorNav-link-underline-pressed:var(--base-color-scale-black-0)}[data-color-mode=dark]{--brand-AnchorNav-link-underline-default:var(--base-color-scale-gray-3);--brand-AnchorNav-link-underline-pressed:var(--base-color-scale-white-0)}:root,[data-color-mode=light]{--brand-CTABanner-shadow-color-start:var(--base-color-scale-green-6);--brand-CTABanner-shadow-color-end:var(--base-color-scale-blue-5);--brand-CTABanner-bgColor:var(--brand-color-canvas-subtle);--brand-CTABanner-color-heading-emphasis:var(--base-color-scale-green-7);--brand-CTABanner-color-logo-muted:var(--brand-color-text-muted);--brand-CTABanner-color-logo-emphasis:var(--brand-color-text-default);--brand-CTABanner-color-logo-filter-muted:brightness(0) saturate(100%) invert(37%) sepia(7%) saturate(778%) hue-rotate(171deg) brightness(96%) contrast(91%);--brand-CTABanner-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(12%) sepia(20%) saturate(450%) hue-rotate(172deg) brightness(100%) contrast(91%)}[data-color-mode=dark]{--brand-CTABanner-shadow-color-start:var(--base-color-scale-green-2);--brand-CTABanner-shadow-color-end:var(--base-color-scale-blue-3);--brand-CTABanner-bgColor:var(--brand-color-canvas-subtle);--brand-CTABanner-color-heading-emphasis:var(--brand-color-text-emphasized);--brand-CTABanner-color-logo-muted:var(--brand-color-text-muted);--brand-CTABanner-color-logo-emphasis:var(--brand-color-text-default);--brand-CTABanner-color-logo-filter-muted:brightness(0) saturate(100%) invert(61%) sepia(8%) saturate(430%) hue-rotate(171deg) brightness(94%) contrast(92%);--brand-CTABanner-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(91%) sepia(2%) saturate(2455%) hue-rotate(193deg) brightness(107%) contrast(98%)}.Primer_Brand__CTABanner-module__CTABanner___m0t8s{max-width:var(--brand-breakpoint-xlarge);width:100%;margin:0 auto;display:flex;position:relative}.Primer_Brand__CTABanner-module__CTABanner--shadow___BA030:before{content:"";inset:var(--base-size-16);filter:blur(var(--base-size-96));background:linear-gradient(to right, var(--brand-CTABanner-shadow-color-start), var(--brand-CTABanner-shadow-color-end));position:absolute;transform:translateZ(0)}.Primer_Brand__CTABanner-module__CTABanner-grid___u3x9a{--brand-Grid-spacing-row:0;row-gap:0;padding-inline:0}.Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt{align-items:center;display:flex}.Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:center;align-items:center;display:flex}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-end}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-start}@media screen and (width>=63.25rem){.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-end}}@media screen and (width<=63.24rem){.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-start}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{order:-1;margin-block-start:0}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt,.Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{margin-block-start:var(--base-size-24)}}.Primer_Brand__CTABanner-module__CTABanner-outer-container--border___PwQrC{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-64) var(--base-size-20);z-index:1;box-sizing:border-box;width:100%}.Primer_Brand__CTABanner-module__CTABanner-container--rounded___JJhRt{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding-inline:var(--base-size-20);padding-block:var(--base-size-32)}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding-inline:var(--base-size-20);padding-block:var(--base-size-40)}.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{--CTABanner-content-gap:var(--base-size-16);gap:var(--CTABanner-content-gap);flex-direction:column;align-items:flex-start;max-width:800px;margin:0 auto;display:flex}.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_ img,.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_ picture{display:block}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{--CTABanner-content-gap:0}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_,.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{max-width:576px;margin:0}.Primer_Brand__CTABanner-module__CTABanner-container--background___v1yTH{background-repeat:no-repeat;background-color:var(--brand-CTABanner-bgColor);background-image:var(--brand-CTABanner-narrow-background-image-src,var(--brand-CTABanner-background-image-src));background-size:var(--brand-CTABanner-narrow-background-image-size,var(--brand-CTABanner-background-image-size));background-position:50%;background-position:var(--brand-CTABanner-narrow-background-image-position,var(--brand-CTABanner-background-image-position,center))}.Primer_Brand__CTABanner-module__CTABanner-container--border___FbAer{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__CTABanner-module__CTABanner-container--border-gridlines___H1FN8{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);max-width:534px;margin-inline:auto}.Primer_Brand__CTABanner-module__CTABanner-content--center___S0ChQ{text-align:center;align-items:center}.Primer_Brand__CTABanner-module__CTABanner-description___I7md6{margin-bottom:var(--base-size-16)}@media screen and (width>=48rem){.Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-80) var(--base-size-36)}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-36);padding-block-end:var(--base-size-48)}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-36);padding-block:var(--base-size-48)}.Primer_Brand__CTABanner-module__CTABanner-container--background___v1yTH{background-color:var(--brand-CTABanner-regular-background-color,var(--brand-CTABanner-background-color));background-image:var(--brand-CTABanner-regular-background-image-src,var(--brand-CTABanner-background-image-src));background-size:var(--brand-CTABanner-regular-background-image-size,var(--brand-CTABanner-background-image-size));background-position:var(--brand-CTABanner-regular-background-image-position,var(--brand-CTABanner-background-image-position))}}@media screen and (width>=63.25rem){.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{--CTABanner-content-gap:var(--base-size-32)}.Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-96) var(--base-size-64);max-width:100%}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1,.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-64)}}@media screen and (width>=80rem){.Primer_Brand__CTABanner-module__CTABanner-container--background___v1yTH{background-color:var(--brand-CTABanner-wide-background-color,var(--brand-CTABanner-background-color));background-image:var(--brand-CTABanner-wide-background-image-src,var(--brand-CTABanner-background-image-src));background-size:var(--brand-CTABanner-wide-background-image-size,var(--brand-CTABanner-background-image-size));background-position:var(--brand-CTABanner-wide-background-image-position,var(--brand-CTABanner-background-image-position))}}.Primer_Brand__CTABanner-module__CTABanner-image___stI4S{width:100%;height:auto}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-image___stI4S{width:100%;max-width:476px;height:auto}@media screen and (width>=63.25rem){.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-image___stI4S{max-width:100%;height:auto}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt:has(.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn){align-items:stretch}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt:has(.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn)>.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{flex:1}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_:has(>.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn)>.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn+*{margin-block-start:auto}}.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn{align-items:center;gap:var(--base-size-8);width:100%;border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-end:var(--base-size-32);display:flex}.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn>svg,.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn>img{height:var(--base-size-40);width:auto;display:block}.Primer_Brand__CTABanner-module__CTABanner--variant-default___eD19a .Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn{border-block-end:none;width:auto;padding-block-end:0}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn{margin-block-end:var(--base-size-24)}.Primer_Brand__CTABanner-module__CTABanner-link___XxOjC{align-self:auto}.Primer_Brand__CTABanner-module__CTABanner-heading___JYhUV b{color:var(--brand-CTABanner-color-heading-emphasis);font-weight:inherit}.Primer_Brand__CTABanner-module__CTABanner-heading___JYhUV code,.Primer_Brand__CTABanner-module__CTABanner-description___I7md6 code{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);white-space:normal;word-wrap:anywhere;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:1.6}.Primer_Brand__CTABanner-module__CTABanner-buttonGroup___UMs1W{margin-block-start:0;margin-block-start:calc(-1 * var(--CTABanner-content-gap,0px));padding-block-start:var(--base-size-12)}.Primer_Brand__ListItem-module__ListItem___aFf5u{align-items:flex-start;gap:var(--base-size-12);display:flex}.Primer_Brand__ListItem-module__ListItem--default___pqfZV{color:var(--brand-color-text-default)}.Primer_Brand__ListItem-module__ListItem--muted___EzTWR{color:var(--brand-color-text-muted)}.Primer_Brand__ListItem-module__ListItem__leading-visual___Fu5ba{height:1lh}.Primer_Brand__ListItem-module__ListItem__leading-visual--muted___nJk0R{fill:var(--brand-color-text-muted)}.Primer_Brand__ListItem-module__OrderedList__item___BJsQo:before{content:counter(li) ".";counter-increment:li;min-width:var(--base-size-16);text-align:center;font-weight:var(--brand-text-size-200)}.Primer_Brand__list-shared-module__List___dFefs{gap:var(--base-size-8);font-family:var(--brand-body-fontFamily);color:var(--brand-color-text-default);flex-direction:column;margin:0;padding-inline-start:0;list-style:none;display:flex}.Primer_Brand__OrderedList-module__OrderedList___eCBYV{counter-reset:li}.Primer_Brand__CTAForm-module__CTAForm___oOV3J{grid-gap:var(--base-size-16);gap:var(--base-size-16);grid-template-columns:2fr auto;align-items:flex-end;display:grid}.Primer_Brand__CTAForm-module__CTAForm___oOV3J>*{grid-column:span 2;width:100%}.Primer_Brand__CTAForm-module__CTAForm-input___sR5r3{order:1}.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl{order:2;grid-column:span 2}.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC{order:4}.Primer_Brand__CTAForm-module__CTAForm___oOV3J>:not(.Primer_Brand__CTAForm-module__CTAForm-input___sR5r3):not(.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC):not(.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl){order:3;grid-column:span 2}@media screen and (width>=48rem){.Primer_Brand__CTAForm-module__CTAForm___oOV3J>*{grid-column:span 1}.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl{order:3;grid-column:span 2}.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC{order:2}.Primer_Brand__CTAForm-module__CTAForm___oOV3J>:not(.Primer_Brand__CTAForm-module__CTAForm-input___sR5r3):not(.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC):not(.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl){order:4}}:root,[data-color-mode=light]{--brand-footer-borderColor:var(--base-color-scale-green-6);--brand-footer-bg-color:var(--brand-color-canvas-subtle);--brand-footer-backToTop-borderColor-rest:var(--base-color-scale-gray-2);--brand-footer-backToTop-borderColor-hover:var(--base-color-scale-gray-2);--brand-footer-backToTop-borderColor-active:var(--base-color-scale-gray-2);--brand-footer-backToTop-bgColor-rest:#00000003;--brand-footer-backToTop-bgColor-hover:#0000001e;--brand-footer-backToTop-bgColor-active:#00000036;--brand-footer-socialIcon-restFilter:sepia(37%) saturate(152%) hue-rotate(77deg) brightness(57%);--brand-footer-socialIcon-hoverFilter:brightness(0)}[data-color-mode=dark]{--brand-footer-borderColor:var(--base-color-scale-green-3);--brand-footer-bg-color:var(--brand-color-canvas-subtle);--brand-footer-backToTop-borderColor-rest:var(--base-color-scale-gray-6);--brand-footer-backToTop-borderColor-hover:#ffffff1f;--brand-footer-backToTop-borderColor-active:#ffffff1f;--brand-footer-backToTop-bgColor-rest:#00000003;--brand-footer-backToTop-bgColor-hover:#ffffff29;--brand-footer-backToTop-bgColor-active:#ffffff3d;--brand-footer-socialIcon-restFilter:saturate(73%) hue-rotate(-89deg) brightness(110%);--brand-footer-socialIcon-hoverFilter:brightness(2)}:root{--brand-footer-backToTop-minTarget:var(--base-size-44)}.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd{border-top:var(--brand-borderWidth-thick) solid var(--brand-footer-borderColor);background-color:var(--brand-footer-bg-color);position:relative}.Primer_Brand__MinimalFooter-module__MinimalFooter--withFootnotes___r5iQL{border-top:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__container___phzVn{max-width:1280px;max-width:var(--brand-footer-max-width,1280px);padding-inline:var(--base-size-20);margin-left:auto;margin-right:auto}@media screen and (width>=48rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__container___phzVn{padding-inline:var(--base-size-32)}}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms___wPthK{padding:var(--base-size-48) 0}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms-item___ex9bL{margin-bottom:var(--base-size-24)}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms-item___ex9bL sup{font-size:var(--base-size-12);vertical-align:super;margin-right:var(--base-size-4);display:inline-block}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms-item___ex9bL:last-child{margin-bottom:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__top___H_7ju{padding-top:var(--base-size-48);padding-bottom:var(--base-size-32);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle)}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-row___ZGvWR{grid-gap:var(--base-size-24);align-items:center;gap:var(--base-size-24);grid-template-columns:auto 1fr;display:grid}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM{display:contents}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM>.Primer_Brand__MinimalFooter-module__MinimalFooter__links___ukZs1{grid-area:2/1/auto/-1;justify-content:flex-start}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM>.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho{grid-area:1/2;justify-self:flex-end}.Primer_Brand__MinimalFooter-module__MinimalFooter__logo___GvtJc{color:var(--brand-color-text-default);display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__logo___GvtJc>svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__MinimalFooter-module__MinimalFooter__bottom___yXxek{padding-top:var(--base-size-32);padding-bottom:var(--base-size-32)}@media screen and (width>=80rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__top___H_7ju{padding-top:var(--base-size-32)}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-row___ZGvWR{justify-content:space-between;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM{justify-content:flex-end;align-items:center;gap:var(--base-size-20);flex-wrap:wrap;flex:1;min-width:0;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM>.Primer_Brand__MinimalFooter-module__MinimalFooter__links___ukZs1{justify-content:flex-end}.Primer_Brand__MinimalFooter-module__MinimalFooter__logo___GvtJc>svg{width:var(--base-size-32);height:var(--base-size-32)}}.Primer_Brand__MinimalFooter-module__MinimalFooter__section____O9_E{min-width:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__section--footnotes___iIJlL{border-bottom:var(--brand-borderWidth-thick) solid var(--brand-footer-borderColor);background-color:var(--brand-color-canvas-default)}.Primer_Brand__MinimalFooter-module__MinimalFooter__section--center___Tq8St>.Primer_Brand__MinimalFooter-module__MinimalFooter__container___phzVn{padding-top:var(--base-size-32);padding-bottom:var(--base-size-32)}.Primer_Brand__MinimalFooter-module__MinimalFooter__section--center___Tq8St+.Primer_Brand__MinimalFooter-module__MinimalFooter__section--bottom___KBLLb{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle)}.Primer_Brand__MinimalFooter-module__MinimalFooter__bottom-row___Utlyc{align-items:flex-start;gap:var(--base-size-24);flex-direction:column;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-links___L0cTI{justify-content:flex-start;align-items:center;gap:var(--base-size-16);margin:0;padding:0;list-style:none;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-link___T7oRV{min-width:var(--base-size-24);min-height:var(--base-size-24);justify-content:center;align-items:center;display:flex;position:relative}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-link___T7oRV:hover .Primer_Brand__MinimalFooter-module__MinimalFooter__social-icon___rQIEL,.Primer_Brand__MinimalFooter-module__MinimalFooter__social-link___T7oRV:focus-visible .Primer_Brand__MinimalFooter-module__MinimalFooter__social-icon___rQIEL{filter:var(--brand-footer-socialIcon-hoverFilter)}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-icon___rQIEL{width:auto;height:auto;max-height:var(--base-size-20);filter:var(--brand-footer-socialIcon-restFilter);display:block}.Primer_Brand__MinimalFooter-module__MinimalFooter__copyright___Zz0yX{text-transform:uppercase;margin:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__metaText___NDwZ3{font-size:var(--base-size-12)}.Primer_Brand__MinimalFooter-module__MinimalFooter__links___ukZs1{align-items:center;gap:var(--base-size-20);flex-wrap:wrap;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__link___zi47c{color:var(--brand-color-text-muted);cursor:pointer;text-transform:uppercase;background-color:#0000;border:0;align-self:center;padding:0;-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__MinimalFooter-module__MinimalFooter__link___zi47c:where(button){font:inherit}.Primer_Brand__MinimalFooter-module__MinimalFooter__link___zi47c:hover{-webkit-text-decoration:underline;text-decoration:underline}@media screen and (width>=48rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__social-links___L0cTI{gap:var(--base-size-20)}}@media screen and (width>=80rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__bottom-row___Utlyc{flex-direction:row;justify-content:space-between;align-items:center}}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho{appearance:none;font:inherit;color:var(--brand-color-text-default);cursor:pointer;background:0 0;border:0;padding:0;display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:disabled,.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho[aria-disabled=true]{cursor:not-allowed}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-content___fAoRM{align-items:center;gap:var(--base-size-12);display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-icon___tpnv3{border:var(--brand-borderWidth-thin) solid var(--brand-footer-backToTop-borderColor-rest);border-radius:var(--base-size-6);background-color:var(--brand-footer-backToTop-bgColor-rest);min-width:var(--brand-footer-backToTop-minTarget);min-height:var(--brand-footer-backToTop-minTarget);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), border-color var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:not([disabled]):not([aria-disabled=true]):hover .Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-icon___tpnv3{border-color:var(--brand-footer-backToTop-borderColor-hover);background-color:var(--brand-footer-backToTop-bgColor-hover)}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:not([disabled]):not([aria-disabled=true]):active .Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-icon___tpnv3{border-color:var(--brand-footer-backToTop-borderColor-active);background-color:var(--brand-footer-backToTop-bgColor-active)}@media (prefers-reduced-motion:reduce){.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd,.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd:before,.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd:after,.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Pillar-module__Pillar___dHhm7{color:var(--brand-color-text-default);flex-direction:column;display:flex}.Primer_Brand__Pillar-module__Pillar--has-max-width___Rm68E{max-width:50ch}.Primer_Brand__Pillar-module__Pillar--has-border___PSR1K{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-32)}.Primer_Brand__Pillar-module__Pillar___dHhm7.Primer_Brand__Pillar-module__Pillar--align-center___mWN5F{text-align:center;align-items:center}.Primer_Brand__Pillar-module__Pillar___dHhm7.Primer_Brand__Pillar-module__Pillar--align-start___dfipC{text-align:left;align-items:flex-start}.Primer_Brand__Pillar-module__Pillar__image___I_5uJ{margin-bottom:var(--base-size-28);border-radius:var(--brand-borderRadius-medium);overflow:hidden}.Primer_Brand__Pillar-module__Pillar__image___I_5uJ img,.Primer_Brand__Pillar-module__Pillar__image___I_5uJ span,.Primer_Brand__Pillar-module__Pillar__image___I_5uJ picture{display:block}.Primer_Brand__Pillar-module__Pillar__icon___MyYVk{margin-bottom:var(--base-size-48)}.Primer_Brand__Pillar-module__Pillar__icon--with-background___z0eoV{border-radius:var(--base-size-12)}.Primer_Brand__Pillar-module__Pillar__icon--with-background___z0eoV>svg{width:100%;height:100%}.Primer_Brand__Pillar-module__Pillar__heading___C7yPQ{margin-bottom:var(--base-size-16)}.Primer_Brand__Pillar-module__Pillar__description___BPMTa:not(.Primer_Brand__Pillar-module__Pillar--has-border___PSR1K .Primer_Brand__Pillar-module__Pillar__description___BPMTa:last-child){margin-bottom:var(--base-size-24)}.Primer_Brand__Pillar-module__Pillar__link___yiBNY{margin-top:auto}:root{--brand-Card-animation-easing:cubic-bezier(.01, .73, .08, .93);--brand-Card-animation-duration:.4s;--brand-Card-padding-inline:var(--base-size-20);--brand-Card-padding-block:var(--base-size-32);--brand-Card-maxWidth:26.25rem}:root,[data-color-mode=light]{--brand-Card-background-default:var(--brand-color-canvas-default);--brand-Card-background-overlay:#f2f5f333}[data-color-mode=dark]{--brand-Card-background-default:var(--brand-color-canvas-subtle);--brand-Card-background-overlay:#f2f5f30d}.Primer_Brand__Card-module__Card___ByGEk{--Card-grid-template-rows:auto auto auto auto auto auto 1fr auto;color:var(--brand-color-text-default);padding:var(--brand-Card-padding-block) var(--brand-Card-padding-inline);grid-template:"image image""leadingVisual leadingVisual""icon icon""tokens tokens""label label""heading heading""description description"1fr"action action"/1fr 1fr;grid-template-rows:var(--Card-grid-template-rows);border-radius:var(--brand-borderRadius-medium);flex:auto;height:100%;-webkit-text-decoration:none;text-decoration:none;display:grid;position:relative}@media screen and (width>=64rem){.Primer_Brand__Card-module__Card___ByGEk{--brand-Card-padding-inline:var(--base-size-32)}}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card___ByGEk{--brand-Card-padding-block:var(--base-size-64);--brand-Card-padding-inline:var(--base-size-40);text-align:center}@media screen and (width>=64rem){.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card___ByGEk{--brand-Card-padding-inline:var(--base-size-80)}}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card___ByGEk{grid-template-columns:1fr;grid-template-areas:"image""leadingVisual""icon""tokens""label""heading""description""action";justify-items:center}.Primer_Brand__Card-module__Card--backgroundColor-default___azlLW{background-color:var(--brand-Card-background-default)}.Primer_Brand__Card-module__Card--backgroundColor-subtle___GNf9B{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Card-module__Card--backgroundColor-none___ZURf_{background-color:#0000}.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{--Card-grid-template-rows:auto auto auto auto auto 1fr auto auto;grid-template-areas:"image image""leadingVisual leadingVisual""icon icon""label label""heading heading""description description""tokens tokens""action action"}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{grid-template-areas:"image""leadingVisual""icon""label""heading""description""tokens""action"}.Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f{--Card-grid-template-rows:auto auto auto auto auto 1fr auto auto;grid-template-areas:"leadingVisual leadingVisual""icon icon""tokens tokens""label label""heading heading""description description""action action""image image"}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f{grid-template-areas:"leadingVisual""icon""tokens""label""heading""description""action""image"}.Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{--Card-grid-template-rows:auto auto auto auto 1fr auto auto auto;grid-template-areas:"leadingVisual leadingVisual""icon icon""label label""heading heading""description description""tokens tokens""action action""image image"}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{grid-template-areas:"leadingVisual""icon""label""heading""description""tokens""action""image"}.Primer_Brand__Card-module__Card--hasLeadingVisual___JnH6q{--brand-Card-padding-block:var(--base-size-64);--brand-Card-padding-inline:var(--base-size-40)}.Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f .Primer_Brand__Card-module__Card__image___zt4oH{margin-bottom:0;margin-top:var(--base-size-28)}.Primer_Brand__Card-module__Card--maxWidth___sqVhD{max-width:var(--brand-Card-maxWidth)}.Primer_Brand__Card-module__Card--fullWidth___j46z5{max-width:none;max-width:initial}.Primer_Brand__Card-module__Card--variant-minimal___lq45H,.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--variant-minimal___lq45H{padding:0}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa{--Card-arrowAction-endInset:var(--base-size-40)}.Primer_Brand__Card-module__Card___ByGEk:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Card-module__Card__link___Ye5mq{color:currentColor;-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__Card-module__Card__link___Ye5mq code,.Primer_Brand__Card-module__Card__description___KN9CH code{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);white-space:normal;word-wrap:anywhere;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:1.6}.Primer_Brand__Card-module__Card--disableAnimation___Zv8eW:hover .Primer_Brand__Card-module__Card__link___Ye5mq{-webkit-text-decoration:underline!important;text-decoration:underline!important}.Primer_Brand__Card-module__Card__link___Ye5mq:focus{outline:none}.Primer_Brand__Card-module__Card__link___Ye5mq:before{content:"";position:absolute;inset:0}.Primer_Brand__Card-module__Card--border___nNZlZ{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Card-module__Card__outer___QBN0D{height:100%}.Primer_Brand__Card-module__Card__outer___QBN0D:has(.Primer_Brand__Card-module__Card--variant-minimal___lq45H){border-radius:var(--brand-borderRadius-small)}.Primer_Brand__Card-module__Card__outer___QBN0D:focus-within{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Card-module__Card__outer___QBN0D:has(.Primer_Brand__Card-module__Card--variant-minimal___lq45H):focus-within{outline-offset:var(--base-size-12)}.Primer_Brand__Card-module__Card__image___zt4oH{border-radius:var(--brand-borderRadius-medium);grid-area:image;margin-block-end:var(--base-size-28);overflow:hidden}.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-inline:calc(var(--brand-Card-padding-inline) * -1)}.Primer_Brand__Card-module__Card__image--position-block-start___r8NDr.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-start:calc(var(--brand-Card-padding-block) * -1)}.Primer_Brand__Card-module__Card__image--position-block-end___FHlIj.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-end:calc(var(--brand-Card-padding-block) * -1)}.Primer_Brand__Card-module__Card--border___nNZlZ .Primer_Brand__Card-module__Card__image--position-block-start___r8NDr.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{border-end-end-radius:0;border-end-start-radius:0}.Primer_Brand__Card-module__Card--border___nNZlZ .Primer_Brand__Card-module__Card__image--position-block-end___FHlIj.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-start-start-radius:0;border-start-end-radius:0}.Primer_Brand__Card-module__Card--variant-minimal___lq45H .Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-inline:0}.Primer_Brand__Card-module__Card--variant-minimal___lq45H .Primer_Brand__Card-module__Card__image--position-block-start___r8NDr.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-start:0}.Primer_Brand__Card-module__Card--variant-minimal___lq45H .Primer_Brand__Card-module__Card__image--position-block-end___FHlIj.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-end:0}.Primer_Brand__Card-module__Card__image___zt4oH img,.Primer_Brand__Card-module__Card__image___zt4oH picture,.Primer_Brand__Card-module__Card__image___zt4oH span{display:block}.Primer_Brand__Card-module__Card__leadingVisual___hyXFF{grid-area:leadingVisual;align-items:center;margin-block-end:var(--base-size-36);display:flex}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card__leadingVisual___hyXFF{justify-content:center}.Primer_Brand__Card-module__Card__leadingVisualItem___T7Ut8{max-width:100%;height:var(--base-size-40);width:auto;display:block}.Primer_Brand__Card-module__Card__icon___H4tc9{margin-bottom:var(--base-size-24);grid-area:icon}.Primer_Brand__Card-module__Card__tokens___eYuJh{gap:var(--base-size-8);margin-bottom:var(--base-size-20);flex-wrap:wrap;grid-area:tokens;display:flex}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card__tokens___eYuJh{justify-content:center}.Primer_Brand__Card-module__Card__tokens--position-block-end___jQn1b{margin-block-start:var(--base-size-20);margin-block-end:0}.Primer_Brand__Card-module__Card__label___EAot7{grid-area:label;inline-size:fit-content;max-inline-size:100%;margin-block-end:var(--base-size-20)}.Primer_Brand__Card-module__Card__heading___INFhp{grid-area:heading;margin-block-end:var(--base-size-12)}.Primer_Brand__Card-module__Card__description___KN9CH{grid-area:description;margin-block-end:var(--base-size-24)}.Primer_Brand__Card-module__Card__action___C6sRY{pointer-events:none;grid-area:action;align-items:center;max-inline-size:100%;margin-block-start:auto;display:inline-flex}.Primer_Brand__Card-module__Card__actionIcon___RkX8K{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-overflow:clip;white-space:normal;min-inline-size:0;display:block;overflow:visible}.Primer_Brand__Card-module__Card___ByGEk:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__action___C6sRY{inline-size:100%;min-inline-size:0}.Primer_Brand__Card-module__Card___ByGEk:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__action___C6sRY>span:first-child{min-inline-size:0}.Primer_Brand__Card-module__Card___ByGEk:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-overflow:clip;white-space:normal;word-wrap:anywhere;overflow:visible}.Primer_Brand__Card-module__Card--align-center___geXUu:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-align:center}.Primer_Brand__Card-module__Card__actionLabelClip___XkCTY{display:contents}.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M .Primer_Brand__Card-module__Card__action___C6sRY{margin-block-start:var(--base-size-20)}.Primer_Brand__Card-module__Card__action--arrowOnly____4i56{--actionArrow-duration:.3s;min-height:var(--base-size-40);width:auto;min-inline-size:0;max-inline-size:calc(100% - var(--Card-arrowAction-endInset));-moz-column-gap:var(--base-size-8);justify-content:flex-start;column-gap:var(--base-size-8);padding-block:var(--base-size-4);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-Card-background-overlay);flex-shrink:0;margin-block-start:var(--base-size-20);padding-inline-start:var(--base-size-12);padding-inline-end:var(--base-size-4);overflow:hidden}.Primer_Brand__Card-module__Card__actionIcon--arrowOnly___Vi3cC{width:var(--base-size-32);min-width:var(--base-size-32);height:var(--base-size-32);min-height:var(--base-size-32);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-color-canvas-default)}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card__action___C6sRY{justify-content:center}.Primer_Brand__Card-module__Card__action___C6sRY,.Primer_Brand__Card-module__Card__action___C6sRY span{color:var(--brand-Link-color-accent)}.Primer_Brand__Card-module__Card__action___C6sRY,.Primer_Brand__Card-module__Card__action___C6sRY *{cursor:inherit}.Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{margin-inline-start:var(--base-size-4)}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{--ExpandableArrow-duration:var(--brand-Card-animation-duration);--ExpandableArrow-easing:var(--brand-Card-animation-easing)}.Primer_Brand__Card-module__Card__actionIcon--arrowOnly___Vi3cC .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{margin-inline-start:0}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__description___KN9CH{margin-bottom:var(--base-size-12)}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__action___C6sRY{justify-self:start;min-inline-size:0}@media (hover:hover){.Primer_Brand__Card-module__Card__action--arrowOnly____4i56{-moz-column-gap:0;transition:border-color var(--actionArrow-duration) ease-out, background-color var(--actionArrow-duration) ease-out, column-gap var(--actionArrow-duration) ease-out, padding-inline var(--actionArrow-duration) ease-out;transition:border-color var(--actionArrow-duration) ease-out, background-color var(--actionArrow-duration) ease-out, column-gap var(--actionArrow-duration) ease-out, padding-inline var(--actionArrow-duration) ease-out, -moz-column-gap var(--actionArrow-duration) ease-out;background-color:#0000;border-color:#0000;column-gap:0;padding-inline:0}.Primer_Brand__Card-module__Card__actionLabelClip___XkCTY{--actionLabelClip-duration:.4s;opacity:0;min-inline-size:0;max-inline-size:0;transform:translateX(calc(var(--base-size-12) * -1));transition:max-inline-size .4s var(--brand-Card-animation-easing), opacity .4s ease-out, transform .4s ease-out, margin-inline .4s ease-out, padding-inline .4s ease-out;transition:max-inline-size var(--actionLabelClip-duration) var(--brand-Card-animation-easing), opacity var(--actionLabelClip-duration) ease-out, transform var(--actionLabelClip-duration) ease-out, margin-inline var(--actionLabelClip-duration) ease-out, padding-inline var(--actionLabelClip-duration) ease-out;background-color:#0000;flex:auto;align-self:stretch;align-items:center;margin-inline:0;padding-inline:0;display:inline-flex;overflow:hidden}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__action___C6sRY{justify-self:center}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:focus-within .Primer_Brand__Card-module__Card__action--arrowOnly____4i56,.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:hover .Primer_Brand__Card-module__Card__action--arrowOnly____4i56{-moz-column-gap:var(--base-size-8);column-gap:var(--base-size-8);border-color:var(--brand-color-border-default);background-color:var(--brand-Card-background-overlay);padding-inline-start:var(--base-size-12);padding-inline-end:var(--base-size-4)}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:focus-within .Primer_Brand__Card-module__Card__actionLabelClip___XkCTY,.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:hover .Primer_Brand__Card-module__Card__actionLabelClip___XkCTY{opacity:1;max-inline-size:100%;margin-inline-start:calc(var(--base-size-12) * -1);margin-inline-end:0;padding-inline-start:var(--base-size-12);padding-inline-end:var(--base-size-4);transform:translate(0)}.Primer_Brand__Card-module__Card___ByGEk:focus-within .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ,.Primer_Brand__Card-module__Card___ByGEk:hover .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{transform:translateX(var(--base-size-2))}.Primer_Brand__Card-module__Card___ByGEk:hover .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ path:nth-of-type(2),.Primer_Brand__Card-module__Card___ByGEk:focus-within .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ path:nth-of-type(2){stroke-dashoffset:20px}.Primer_Brand__Card-module__Card--disableAnimation___Zv8eW,.Primer_Brand__Card-module__Card--disableAnimation___Zv8eW *{transition:none;animation:none}@media (prefers-reduced-motion:reduce){.Primer_Brand__Card-module__Card___ByGEk,.Primer_Brand__Card-module__Card___ByGEk:before,.Primer_Brand__Card-module__Card___ByGEk:after,.Primer_Brand__Card-module__Card___ByGEk *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__SectionIntro-module__SectionIntro___RduRB{gap:var(--base-size-16);padding-block:var(--base-size-24);flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__SectionIntro-module__SectionIntro___RduRB img,.Primer_Brand__SectionIntro-module__SectionIntro___RduRB picture{display:block}.Primer_Brand__SectionIntro-module__SectionIntro-heading--muted___CdGWF{color:var(--brand-color-text-muted)}.Primer_Brand__SectionIntro-module__SectionIntro-heading--muted___CdGWF em,.Primer_Brand__SectionIntro-module__SectionIntro-heading--muted___CdGWF b{color:var(--brand-color-text-default);font-style:normal;font-weight:inherit}.Primer_Brand__SectionIntro-module__SectionIntro--align-start___C59mu{text-align:start}.Primer_Brand__SectionIntro-module__SectionIntro--align-center___qU_a9{text-align:center;padding-inline:var(--base-size-24);align-items:center}.Primer_Brand__SectionIntro-module__SectionIntro-heading___u6_Wl{max-width:24ch}.Primer_Brand__SectionIntro-module__SectionIntro--full-width___HROKL .Primer_Brand__SectionIntro-module__SectionIntro-heading___u6_Wl{max-width:none}.Primer_Brand__SectionIntro-module__SectionIntro-label___ZjciO{margin-block-end:var(--base-size-2)}.Primer_Brand__SectionIntro-module__SectionIntro-description___Sz93l{max-width:50ch;padding-block-start:var(--base-size-2)}.Primer_Brand__SectionIntro-module__SectionIntro-link___dePuF{margin-top:var(--base-size-16)}@keyframes Primer_Brand__TextRevealAnimation-module__wipe___Mztl1{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq{opacity:0;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--visible___KIbWH{opacity:1}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--animated___NuoAA{width:100%;min-height:1lh;position:relative}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--animated___NuoAA:after{content:"";background-color:var(--brand-color-accent-primary);transform-origin:100%;width:100%;height:100%;animation:Primer_Brand__TextRevealAnimation-module__wipe___Mztl1 var(--brand-animation-duration-extended) forwards var(--brand-animation-easing-default);animation-delay:var(--animation-delay);display:inline;position:absolute;top:0;right:0}@media (prefers-reduced-motion:reduce){.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--animated___NuoAA:after{display:none}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq:before,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq:after,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Prose-module__Prose___X2BXE{font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);color:var(--brand-color-text-default)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo{font-size:var(--brand-text-size-300);line-height:1.7}.Primer_Brand__Prose-module__Prose___X2BXE *+*{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto;margin-block-start:1em;margin-block-start:var(--spacing,1em)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo *+*{--spacing:var(--base-size-40)}.Primer_Brand__Prose-module__Prose--lineLength___ws7gn{max-width:var(--brand-Prose-lineLength)}.Primer_Brand__Prose-module__Prose___X2BXE h1{font-weight:var(--brand-heading-weight-700);font-size:var(--brand-text-size-700);line-height:var(--brand-text-lineHeight-700);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-text-letterSpacing-700)}.Primer_Brand__Prose-module__Prose___X2BXE h2{font-weight:var(--brand-heading-weight-600);font-size:var(--brand-text-size-600);line-height:var(--brand-text-lineHeight-600);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-text-letterSpacing-600)}.Primer_Brand__Prose-module__Prose--lineLength___ws7gn h2{max-width:26ch}.Primer_Brand__Prose-module__Prose___X2BXE h3{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-400)}.Primer_Brand__Prose-module__Prose--lineLength___ws7gn h1{max-width:32ch}.Primer_Brand__Prose-module__Prose___X2BXE h4{--spacing:var(--base-size-48);font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-300)}.Primer_Brand__Prose-module__Prose___X2BXE h5,.Primer_Brand__Prose-module__Prose___X2BXE h6{--spacing:var(--base-size-48);font-weight:var(--brand-text-subhead-weight-medium);font-size:var(--brand-text-subhead-size-medium);line-height:var(--brand-text-subhead-lineHeight-medium);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-200)}.Primer_Brand__Prose-module__Prose___X2BXE h1,.Primer_Brand__Prose-module__Prose___X2BXE h2,.Primer_Brand__Prose-module__Prose___X2BXE h3{--spacing:var(--base-size-64)}.Primer_Brand__Prose-module__Prose___X2BXE h1+*,.Primer_Brand__Prose-module__Prose___X2BXE h2+*,.Primer_Brand__Prose-module__Prose___X2BXE h3+*,.Primer_Brand__Prose-module__Prose___X2BXE p{--spacing:var(--base-size-24)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo p{--spacing:var(--base-size-40)}.Primer_Brand__Prose-module__Prose___X2BXE ul,.Primer_Brand__Prose-module__Prose___X2BXE ol{--spacing:var(--base-size-16);gap:var(--base-size-8);line-height:var(--brand-text-lineHeight-300);flex-direction:column;margin-inline-start:var(--base-size-24);padding:0;display:flex}.Primer_Brand__Prose-module__Prose--editorial___DtuDo ul,.Primer_Brand__Prose-module__Prose--editorial___DtuDo ol{--spacing:var(--base-size-48);gap:var(--base-size-16);line-height:1.7}.Primer_Brand__Prose-module__Prose___X2BXE ul{list-style-type:image;list-style-image:var(--brand-Prose-unorderedList-imageUrl)}.Primer_Brand__Prose-module__Prose___X2BXE li{--spacing:0}.Primer_Brand__Prose-module__Prose___X2BXE strong,.Primer_Brand__Prose-module__Prose___X2BXE b{font-weight:var(--brand-text-weight-heavy)!important}.Primer_Brand__Prose-module__Prose___X2BXE em{font-variation-settings:"ital" 10;font-synthesis:none}.Primer_Brand__Prose-module__Prose___X2BXE a{color:var(--brand-InlineLink-color-rest);-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__Prose-module__Prose___X2BXE a:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__Prose-module__Prose___X2BXE a:active:after{border-color:var(--brand-InlineLink-color-pressed)}.Primer_Brand__Prose-module__Prose___X2BXE code{font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);white-space:break-spaces;padding:var(--base-size-4) var(--base-size-8);border-radius:var(--brand-borderRadius-small);background-color:var(--brand-Prose-code-bgColor)}.Primer_Brand__Prose-module__Prose___X2BXE pre{padding:var(--base-size-16);border-radius:var(--brand-borderRadius-medium);background-color:var(--brand-Prose-code-bgColor)}.Primer_Brand__Prose-module__Prose___X2BXE pre code{padding:0}.Primer_Brand__Prose-module__Prose___X2BXE img{--spacing:var(--brand-Prose-img-spacing);max-width:100%;height:auto;margin-left:auto;margin-right:auto;margin-block-end:var(--spacing);display:block}.Primer_Brand__Prose-module__Prose--editorial___DtuDo figure img{border-radius:var(--brand-borderRadius-medium);margin-block-end:0;display:block}.Primer_Brand__Prose-module__Prose___X2BXE blockquote{--spacing:var(--brand-Prose-blockquote-spacing);font-size:var(--brand-text-size-400);line-height:var(--brand-text-lineHeight-400);padding-top:var(--base-size-48);padding-bottom:var(--base-size-8);margin-bottom:var(--spacing);position:relative}.Primer_Brand__Prose-module__Prose--default___ZqcxT blockquote{padding-left:var(--base-size-40)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo blockquote{font-size:var(--brand-text-size-500);line-height:var(--brand-text-lineHeight-500);font-weight:var(--brand-text-weight-500);padding-top:var(--base-size-64)}@media screen and (width>=87.5rem){.Primer_Brand__Prose-module__Prose--editorial___DtuDo blockquote{margin-block:var(--base-size-40)}}.Primer_Brand__Prose-module__Prose___X2BXE blockquote:before{content:"“";font-size:var(--base-size-48);line-height:var(--base-size-64);font-weight:var(--base-text-weight-extrabold);position:absolute;top:0}.Primer_Brand__Prose-module__Prose--editorial___DtuDo blockquote:before{color:var(--brand-color-accent-primary);font-size:var(--base-size-64);line-height:var(--base-size-64)}.Primer_Brand__Prose-module__Prose--default___ZqcxT blockquote:after{content:"";width:var(--brand-borderWidth-thick);background-color:var(--base-color-scale-indigo-5);background-image:linear-gradient(180deg, var(--base-color-scale-blue-5), var(--base-color-scale-purple-5));height:100%;display:block;position:absolute;top:0;left:0}.Primer_Brand__Prose-module__Prose___X2BXE figure figcaption{--spacing:var(--base-size-24);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);color:var(--brand-color-text-muted)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo figcaption{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);font-weight:var(--brand-text-weight-100)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo hr{--spacing:var(--base-size-64);border:1px solid var(--brand-color-border-muted);margin-block-start:var(--spacing);margin-block-end:var(--spacing)}.Primer_Brand__Prose-module__Prose___X2BXE video,.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube\.com],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtu\.be],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube-nocookie\.com]{--spacing:var(--brand-Prose-img-spacing);border-radius:var(--brand-borderRadius-medium);height:auto;margin-left:auto;margin-right:auto;margin-block-end:var(--spacing);display:block}.Primer_Brand__Prose-module__Prose___X2BXE video{max-width:100%}.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube\.com],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtu\.be],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube-nocookie\.com]{aspect-ratio:16/9;width:100%}@media (prefers-reduced-motion:reduce){.Primer_Brand__Prose-module__Prose___X2BXE a,.Primer_Brand__Prose-module__Prose___X2BXE a:before,.Primer_Brand__Prose-module__Prose___X2BXE a:after,.Primer_Brand__Prose-module__Prose___X2BXE a *{transition:none!important}}.Primer_Brand__Prose-module__Prose___X2BXE table{--spacing:var(--base-size-32);border-collapse:collapse;border-spacing:0;width:100%;font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__Prose-module__Prose___X2BXE table caption{text-align:left;font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-100);line-height:var(--brand-text-lineHeight-100);color:var(--brand-color-text-muted);padding-block-end:var(--base-size-24)}.Primer_Brand__Prose-module__Prose___X2BXE table th,.Primer_Brand__Prose-module__Prose___X2BXE table td{padding-block:var(--base-size-16);padding-inline:var(--base-size-12);text-align:left;vertical-align:top;border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__Prose-module__Prose___X2BXE table th:first-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:first-child,.Primer_Brand__Prose-module__Prose___X2BXE table th:last-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:last-child{padding-inline:0}.Primer_Brand__Prose-module__Prose___X2BXE table th{font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-400);line-height:var(--brand-text-lineHeight-100);color:var(--brand-color-text-muted)}.Primer_Brand__Prose-module__Prose___X2BXE table thead th{border-bottom:var(--brand-borderWidth-thick) solid var(--brand-color-border-default)}.Primer_Brand__Prose-module__Prose___X2BXE table tbody tr:last-child td{border-bottom:none}.Primer_Brand__Prose-module__Prose--editorial___DtuDo table{--spacing:var(--base-size-48)}.Primer_Brand__Prose-module__Prose___X2BXE td>ul:first-child,.Primer_Brand__Prose-module__Prose___X2BXE td>ol:first-child{margin-block-start:0}@media screen and (width>=48rem){.Primer_Brand__Prose-module__Prose___X2BXE table th,.Primer_Brand__Prose-module__Prose___X2BXE table td{padding:var(--base-size-16) var(--base-size-8)}.Primer_Brand__Prose-module__Prose___X2BXE table th:not(:first-child):not(:last-child),.Primer_Brand__Prose-module__Prose___X2BXE table td:not(:first-child):not(:last-child){padding-inline:var(--base-size-16)}.Primer_Brand__Prose-module__Prose___X2BXE table th:first-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:first-child{padding-inline-start:0}.Primer_Brand__Prose-module__Prose___X2BXE table th:last-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:last-child{padding-inline-end:0}.Primer_Brand__Prose-module__Prose___X2BXE table tbody tr:hover{background-color:var(--brand-color-canvas-subtle)}}@media screen and (width<=47.99rem){.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]){border-collapse:separate;border-spacing:0;width:100%;box-shadow:none;font-size:var(--brand-text-size-200);background:0 0}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) thead{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}:is(.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) tbody,.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) tr){width:100%;display:block}:is(.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) th:not(:first-child):not(:last-child),.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) td:not(:first-child):not(:last-child)){padding-inline:0}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) tr{border-block-start:var(--brand-borderWidth-thicker) solid var(--brand-color-border-muted);margin-block-end:var(--spacing);padding-block-start:var(--base-size-20)}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]{width:100%;margin:0 0 16px;margin:0 0 var(--base-size-16,16px) 0;border:none;flex-direction:column;align-items:flex-start;padding:0;display:flex}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]:not(:last-child){border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-end:var(--base-size-20)}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]:before{content:attr(data-label);color:var(--brand-color-text-muted);text-align:left;font-weight:var(--brand-text-weight-400);margin-block-end:var(--base-size-4)}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) td:not([data-label]){width:100%;border:none;margin-block-end:var(--base-size-16);padding:0;display:block}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) td:not([data-label]):not(:last-child){border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-end:var(--base-size-20)}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]:last-child{margin-block-end:0}}:root{--brand-Prose-blockquote-spacing:var(--base-size-24);--brand-Prose-img-spacing:var(--base-size-48);--brand-Prose-lineLength:68ch}:root,[data-color-mode=light]{--brand-Prose-unorderedList-imageUrl:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 aria-hidden=%27true%27 focusable=%27false%27 role=%27img%27 viewBox=%270 -3 16 16%27 width=%2716%27 height=%2716%27 fill=%27black%27 style=%27display: inline-block; vertical-align: text-bottom; overflow: visible;%27%3e%3cpath d=%27M2 7.75A.75.75 0 0 1 2.75 7h10a.75.75 0 0 1 0 1.5h-10A.75.75 0 0 1 2 7.75Z%27%3e%3c/path%3e%3c/svg%3e");--brand-Prose-code-bgColor:var(--base-color-scale-indigo-0)}[data-color-mode=dark]{--brand-Prose-unorderedList-imageUrl:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 aria-hidden=%27true%27 focusable=%27false%27 role=%27img%27 viewBox=%270 -3 16 16%27 width=%2716%27 height=%2716%27 fill=%27white%27 style=%27display: inline-block; vertical-align: text-bottom; overflow: visible;%27%3e%3cpath d=%27M2 7.75A.75.75 0 0 1 2.75 7h10a.75.75 0 0 1 0 1.5h-10A.75.75 0 0 1 2 7.75Z%27%3e%3c/path%3e%3c/svg%3e");--brand-Prose-code-bgColor:var(--base-color-scale-indigo-9)}.Primer_Brand__Captions-module__Captions___xrhu1{flex:0 0 var(--base-size-64);width:100%;padding:var(--base-size-8) var(--base-size-16) 0;pointer-events:none;background-color:var(--base-color-scale-black-0);justify-content:center;align-items:center;display:flex}.Primer_Brand__Captions-module__Captions__text___e1cBR{color:var(--brand-VideoPlayer-closedCaption-text-fgColor)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container___WmQho{border-radius:var(--brand-borderRadius-medium);background-color:var(--base-color-scale-black-0);flex-direction:column;width:100%;display:flex;overflow:hidden}.Primer_Brand__VideoPlayer-module__VideoPlayer__overlayContainer___K_dl1{flex:1;height:100%;position:relative}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__container___WmQho{border:var(--brand-borderWidth-thin) solid ButtonBorder}}.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw{--brand-VideoPlayer-controls-min-height:56px;width:100%;max-height:calc(100vh - 56px);max-height:calc(100vh - var(--brand-VideoPlayer-controls-min-height));margin:0 auto;display:block}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--fullscreen___p73I7 .Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw{height:100%;position:absolute}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz{font:inherit;z-index:1;background:#0003;border:none;width:100%;height:100%;position:absolute;top:0;left:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz svg{top:calc(var(--brand-VideoPlayer-controls-min-height) / 2);position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay--transparent___Nc60m{background:0 0}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz:focus-visible{outline:var(--brand-borderWidth-thicker) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButton___qff0F{width:25%;height:25%;max-width:var(--brand-VideoPlayer-playButton-width);max-height:var(--brand-VideoPlayer-playButton-height);opacity:.8;color:var(--brand-videoPlayer-playButton-fgColor-rest)}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__playButton___qff0F{color:highlight;opacity:1}}.Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j{transition:var(--brand-VideoPlayer-transition);z-index:2;width:100%;padding:var(--base-size-16);color:var(--brand-videoPlayer-title-fgColor);grid-gap:var(--base-size-12);background:var(--brand-videoPlayer-title-bgColor);transition:all var(--brand-animation-duration-fast) var(--brand-animation-easing-default);grid-template-columns:auto auto;justify-content:flex-start;align-items:center;display:grid;position:absolute;top:0;left:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j.Primer_Brand__VideoPlayer-module__VideoPlayer__title--hidden___gJxj8{opacity:0;visibility:hidden}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j{color:canvastext;background:canvas}}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar___L4653{min-height:var(--brand-VideoPlayer-controls-min-height);grid-gap:var(--base-size-16);justify-content:space-between;align-items:center;gap:var(--base-size-16);border-bottom-right-radius:var(--brand-borderRadius-medium);border-bottom-left-radius:var(--brand-borderRadius-medium);width:100%;padding:var(--base-size-12) var(--base-size-16);pointer-events:all;opacity:1;grid-template-columns:1fr;grid-auto-flow:column;display:grid}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar__row1___SdOxD,.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar__row2___EZoJX{align-items:center;gap:var(--base-size-16);display:flex}@media (width<=34rem){.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar___L4653{gap:var(--base-size-12);grid-template-rows:auto auto;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar__row2___EZoJX{justify-self:space-evenly;justify-content:space-evenly;width:100%}}.Primer_Brand__VideoPlayer-module__VideoPlayer__controls___hNpxI:focus,.Primer_Brand__VideoPlayer-module__VideoPlayer__controls___hNpxI:focus-within{bottom:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4{font:inherit;cursor:pointer;width:auto;height:var(--base-size-24);box-sizing:content-box;background:0 0;border:none;padding:0;position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-6);opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4:not(.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt):focus-visible{border-radius:var(--brand-borderRadius-small)}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4 svg{color:var(--brand-videoPlayer-controls-fgColor)}.Primer_Brand__VideoPlayer-module__VideoPlayer__seek___Z4IA2{align-items:center;gap:var(--base-size-16);flex:1;display:flex}.Primer_Brand__VideoPlayer-module__VideoPlayer__progressTime___GvTKs{color:var(--brand-videoPlayer-controls-fgColor)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__totalTime___nWILS{display:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__progressBar___wYSPx{height:var(--base-size-6);flex:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt{border-radius:var(--brand-borderRadius-medium);padding:.125rem var(--base-size-4);border:.125rem solid var(--brand-videoPlayer-closedCaption-borderColor-enabled);background:var(--brand-videoPlayer-closedCaption-bgColor-enabled);position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL{background-color:#0000}.Primer_Brand__VideoPlayer-module__VideoPlayer__ccText___xIu2v{color:var(--brand-videoPlayer-closedCaption-fgColor-enabled);line-height:25px}.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL .Primer_Brand__VideoPlayer-module__VideoPlayer__ccText___xIu2v{color:var(--brand-videoPlayer-closedCaption-fgColor-disabled)}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4 svg{color:buttontext}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4:focus-visible{outline-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt:focus-visible{outline:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt:not(.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL){background:highlight;border-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt:not(.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL) .Primer_Brand__VideoPlayer-module__VideoPlayer__ccText___xIu2v{color:highlighttext;background-color:highlight}}.Primer_Brand__VideoPlayer-module__VideoPlayer__range___Tmjbg{width:100%;min-width:var(--brand-VideoPlayer-range-minWidth);height:var(--brand-VideoPlayer-range-height);background-color:var(--brand-videoPlayer-range-bgColor-default);border-radius:var(--brand-VideoPlayer-range-borderRadius);position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl{font:inherit;appearance:none;z-index:1;width:100%;height:var(--brand-VideoPlayer-range-height);cursor:pointer;opacity:0;background:0 0;margin:0;display:block;position:absolute;top:0;left:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-8);border-radius:var(--brand-borderRadius-small);opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__range___Tmjbg:hover .Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl{opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl::-moz-range-track{background:0 0;border:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl::-webkit-slider-runnable-track{background:0 0;border:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK{appearance:none;border-radius:var(--brand-VideoPlayer-range-borderRadius);width:100%;height:var(--brand-VideoPlayer-range-height);border:0;position:absolute;top:0;left:0;overflow:hidden}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-bar{background-color:var(--brand-videoPlayer-range-bgColor-default)}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-value{background-color:var(--brand-videoPlayer-range-bgColor-progress)}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-moz-progress-bar{background:var(--brand-videoPlayer-range-bgColor-progress)}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-lower{background-color:var(--brand-videoPlayer-range-bgColor-progress);border:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-upper{background-color:var(--brand-videoPlayer-range-bgColor-default);border:none}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-bar{background-color:fieldtext}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-value{background-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-moz-progress-bar{background:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-lower{background-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-upper{background-color:fieldtext}}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltip___mtg_l{z-index:2;width:var(--base-size-8);height:var(--base-size-8);margin-bottom:var(--base-size-16);opacity:0;position:absolute;bottom:100%;left:50%;transform:translate(-50%,50%)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltip___mtg_l:before{bottom:calc(var(--base-size-4) * -1);width:var(--base-size-12);height:var(--base-size-12);content:"";background:var(--base-color-scale-white-0);border-radius:var(--brand-borderRadius-small);position:absolute;left:0;transform:rotate(45deg)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltipContent___BoAqV{z-index:-1;box-shadow:0 var(--base-size-4) var(--base-size-4) #1b1f2433;padding:var(--brand-VideoPlayer-tooltip-padding-block) var(--brand-VideoPlayer-tooltip-padding-inline);border-radius:var(--brand-borderRadius-medium);background:#fff;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltipText____Syz7{color:var(--base-color-scale-gray-9)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltip-visible___xOTRZ{opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlTextColor___YMFpe{color:var(--base-color-scale-white-0)}.Primer_Brand__VideoPlayer-module__VideoPlayer__seekTime___HLf0h{white-space:nowrap}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j span{font-weight:var(--brand-text-weight-300);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-300)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__controls___hNpxI{position:initial;position:static}@media (prefers-reduced-motion:reduce){.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw,.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw:before,.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw:after,.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__VolumeControl-module__VolumeControl___rq9Ra{max-width:100px}:root{--brand-VideoPlayer-tooltip-padding-inline:.3125rem;--brand-VideoPlayer-tooltip-padding-block:.3125rem;--brand-VideoPlayer-transition:all var(--brand-animation-duration-fast) var(--brand-animation-easing-default);--brand-VideoPlayer-range-minWidth:4.6875rem;--brand-VideoPlayer-range-borderRadius:.1875rem;--brand-VideoPlayer-range-height:.375rem;--brand-VideoPlayer-playButton-width:var(--base-size-96);--brand-VideoPlayer-playButton-height:var(--base-size-96);--brand-VideoPlayer-closedCaption-text-padding:.625rem;--brand-VideoPlayer-closedCaption-text-bgColor:#000000bf;--brand-VideoPlayer-closedCaption-text-fgColor:var(--base-color-scale-white-0);--brand-VideoPlayer-closedCaption-margin:0 auto 15px auto}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-videoPlayer-playButton-bgColor-rest:var(--base-color-scale-blue-5);--brand-videoPlayer-playButton-fgColor-rest:var(--base-color-scale-gray-0);--brand-videoPlayer-title-bgColor:linear-gradient(180deg, #000000e6, #00000073 66%, transparent);--brand-videoPlayer-title-fgColor:var(--base-color-scale-gray-0);--brand-videoPlayer-controls-bgColor:var(--base-color-scale-black-0);--brand-videoPlayer-controls-fgColor:var(--base-color-scale-gray-0);--brand-videoPlayer-closedCaption-bgColor-enabled:var(--base-color-scale-gray-0);--brand-videoPlayer-closedCaption-fgColor-enabled:var(--base-color-scale-black-0);--brand-videoPlayer-closedCaption-fgColor-disabled:var(--base-color-scale-gray-0);--brand-videoPlayer-closedCaption-borderColor-enabled:var(--base-color-scale-gray-0);--brand-videoPlayer-range-bgColor-default:var(--base-color-scale-gray-0);--brand-videoPlayer-range-bgColor-progress:var(--base-color-scale-blue-4)}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer___vOvcR{width:100%;position:relative}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__video___Zai7A{width:100%;display:block}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6{right:var(--base-size-24);bottom:var(--base-size-24);width:var(--base-size-36);height:var(--base-size-36);color:var(--brand-color-text-muted);cursor:pointer;background-color:var(--brand-color-canvas-muted);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle);border-radius:var(--brand-borderRadius-full);justify-content:center;align-items:center;padding:0;display:flex;position:absolute}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__video___Zai7A[controls]+.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6{display:none}@media (forced-colors:active){.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer___vOvcR{border:var(--brand-borderWidth-thin) solid CanvasText}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6{color:buttontext;background-color:buttonface;border-color:buttontext}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6:focus-visible{outline-color:highlight}}:root,[data-color-mode=light]{--brand-LogoSuite-color-control-rest:var(--brand-color-canvas-muted);--brand-LogoSuite-color-control-hover:var(--base-color-scale-gray-1);--brand-LogoSuite-color-logo-muted:var(--brand-color-text-muted);--brand-LogoSuite-color-logo-emphasis:var(--brand-color-text-default);--brand-LogoSuite-color-logo-filter-muted:brightness(0) saturate(100%) invert(37%) sepia(7%) saturate(778%) hue-rotate(171deg) brightness(96%) contrast(91%);--brand-LogoSuite-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(12%) sepia(20%) saturate(450%) hue-rotate(172deg) brightness(100%) contrast(91%)}[data-color-mode=dark]{--brand-LogoSuite-color-control-rest:var(--brand-color-canvas-muted);--brand-LogoSuite-color-control-hover:#5a5b7c;--brand-LogoSuite-color-logo-muted:var(--brand-color-text-muted);--brand-LogoSuite-color-logo-emphasis:var(--brand-color-text-default);--brand-LogoSuite-color-logo-filter-muted:brightness(0) saturate(100%) invert(61%) sepia(8%) saturate(430%) hue-rotate(171deg) brightness(94%) contrast(92%);--brand-LogoSuite-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(91%) sepia(2%) saturate(2455%) hue-rotate(193deg) brightness(107%) contrast(98%)}:root{--brand-LogoSuite-logobar-marquee-gap-condensed:var(--base-size-40);--brand-LogoSuite-logobar-marquee-gap-default:var(--base-size-96);--brand-LogoSuite-logobar-marquee-slow:60s;--brand-LogoSuite-logobar-marquee-default:30s;--brand-LogoSuite-logobar-rowGap:var(--base-size-40);--brand-LogoSuite-logobar-columnGap-condensed:var(--base-size-40);--brand-LogoSuite-logobar-columnGap-default:var(--base-size-80)}.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai{padding-block-end:var(--brand-LogoSuite-logobar-rowGap)}.Primer_Brand__LogoSuite-module__LogoSuite--default___EU2sL+.Primer_Brand__LogoSuite-module__LogoSuite--default___EU2sL{padding-block-start:var(--brand-LogoSuite-logobar-rowGap)}.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai:not(:has(.Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM)) .Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw{font-family:var(--brand-fontStack-monospace);font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100);text-transform:uppercase;color:var(--brand-color-text-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw+.Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM{padding-block-start:var(--base-size-16)}.Primer_Brand__LogoSuite-module__LogoSuite--start___Kk6GC{text-align:left}.Primer_Brand__LogoSuite-module__LogoSuite--center___byPyg,.Primer_Brand__LogoSuite-module__LogoSuite--justify___ZFxvW{text-align:center}.Primer_Brand__LogoSuite-module__LogoSuite--default___EU2sL:not(.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai+.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai) .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{padding-block-start:var(--base-size-32)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{row-gap:var(--brand-LogoSuite-logobar-rowGap);flex-wrap:wrap;justify-content:center;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--gap-default___nLZ7M{--marquee-gap:var(--brand-LogoSuite-logobar-marquee-gap-default);-moz-column-gap:var(--brand-LogoSuite-logobar-columnGap-default);column-gap:var(--brand-LogoSuite-logobar-columnGap-default)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--gap-condensed___d2k3z{--marquee-gap:var(--brand-LogoSuite-logobar-marquee-gap-condensed);-moz-column-gap:var(--brand-LogoSuite-logobar-columnGap-condensed);column-gap:var(--brand-LogoSuite-logobar-columnGap-condensed)}.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai:not(.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai+.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai) .Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw:not(.Primer_Brand__LogoSuite-module__LogoSuite__heading--visually-hidden___pTR4r)+.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm,.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai:not(.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai+.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai) .Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM+.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{margin-block-start:var(--base-size-44);padding-block-start:0}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z img,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z a,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb img,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb a{width:auto;height:var(--base-size-32)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm img{display:block}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z path{fill:var(--brand-LogoSuite-color-logo-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z img{filter:var(--brand-LogoSuite-color-logo-filter-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb path{fill:var(--brand-LogoSuite-color-logo-emphasis)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb img{filter:var(--brand-LogoSuite-color-logo-filter-emphasis)}.Primer_Brand__LogoSuite-module__LogoSuite--start___Kk6GC .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{justify-content:center}@media screen and (width>=48rem){.Primer_Brand__LogoSuite-module__LogoSuite--justify___ZFxvW .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{justify-content:space-between}}.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm a:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2);border-radius:var(--base-size-4)}.Primer_Brand__LogoSuite-module__LogoSuite--hasDivider___Znsqm{border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-marquee___d5jZP{align-items:center;gap:var(--base-size-24);flex-direction:row;max-width:100vw;margin:auto;display:flex;position:relative}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf{justify-content:space-around;align-items:center;gap:var(--marquee-gap);min-width:100%;animation-name:Primer_Brand__LogoSuite-module__LogobarScrollX___K2Z30;animation-duration:var(--brand-LogoSuite-logobar-marquee-default);flex-shrink:0;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:normal;animation-play-state:running;animation-fill-mode:none;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup--speed-default___ptGOl{animation-duration:var(--brand-LogoSuite-logobar-marquee-default)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup--speed-slow___s1IKV{animation-duration:var(--brand-LogoSuite-logobar-marquee-slow)}@keyframes Primer_Brand__LogoSuite-module__LogobarScrollX___K2Z30{0%{transform:translate(0)}to{transform:translateX(calc(-100% - var(--marquee-gap)))}}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee___Q0YOr:hover .Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf,.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee___Q0YOr:focus-within .Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf{animation-play-state:paused}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee___Q0YOr{padding-block:var(--base-size-4);-webkit-user-select:none;user-select:none;gap:var(--marquee-gap);flex:1;min-width:0;display:flex;overflow:hidden visible;-webkit-mask-image:linear-gradient(90deg,#0000,#000 20% 80%,#0000);mask-image:linear-gradient(90deg,#0000,#000 20% 80%,#0000)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--paused___i6vSY *{animation-play-state:paused!important}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee--focused___AVQlQ .Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf{animation-name:none}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi{cursor:pointer;width:var(--base-size-32);height:var(--base-size-32);border-radius:var(--base-size-48);border:none;border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);background-color:var(--brand-LogoSuite-color-control-rest);transition:background-color var(--brand-animation-duration-faster);flex-shrink:0;justify-content:center;align-items:center;margin:0;padding:0;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi:hover{background-color:var(--brand-LogoSuite-color-control-hover)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi svg{width:var(--base-size-16);height:var(--base-size-16);fill:var(--brand-color-text-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi path{fill:var(--brand-color-text-muted)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax{padding:0}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{gap:0;padding-inline:0}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__textContainer___hClnV{padding:var(--base-size-20);flex-direction:column;justify-content:center;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{margin-block-start:auto}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_{padding:var(--base-size-32) var(--base-size-20) var(--base-size-32);flex-direction:column;justify-content:center;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm,.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-marquee___d5jZP{width:100%;max-width:none}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw+.Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM{padding-block-start:var(--base-size-8)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{padding-block-start:0}@media screen and (width>=48rem){.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax{padding-inline:91px}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_{padding:var(--base-size-40)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__textContainer___hClnV{border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=64rem){.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax{padding-inline:0}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{max-width:1280px}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__textContainer___hClnV{text-align:left;padding:var(--base-size-64)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_{padding:var(--base-size-64)}}@media screen and (width>=1281px){.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_:first-child{border-inline-start:none}}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm{position:relative;overflow:visible}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:before{content:"";inset:calc(-1 * var(--base-size-16)) 0;z-index:1;pointer-events:none;opacity:0;-webkit-backdrop-filter:blur(var(--base-size-6));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default);position:absolute}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover:before,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within:before{opacity:1}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover img,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within img{opacity:.7;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-takeoverButtonContainer___gguiO{opacity:0;visibility:hidden;z-index:2;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover .Primer_Brand__LogoSuite-module__LogoSuite__logobar-takeoverButtonContainer___gguiO,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within .Primer_Brand__LogoSuite-module__LogoSuite__logobar-takeoverButtonContainer___gguiO{opacity:1;visibility:visible}.Primer_Brand__Timeline-module__Timeline___keSeT{--bulletY:calc(var(--base-size-8) / 2 - var(--brand-Timeline-bullet-size) / 2 + var(--base-size-8));margin:0;padding:0;list-style:none}.Primer_Brand__Timeline-module__Timeline__item____ME4_{max-width:var(--brand-Timeline-lineLength);color:var(--brand-color-text-default);line-height:var(--brand-Timeline-lineHeight);padding-inline-start:calc(var(--brand-Timeline-bullet-size) + var(--brand-Timeline-spacing));position:relative}.Primer_Brand__Timeline-module__Timeline--full-width___XLdKp .Primer_Brand__Timeline-module__Timeline__item____ME4_{max-width:none}.Primer_Brand__Timeline-module__Timeline__item____ME4_:not(:last-child){padding-bottom:var(--base-size-32)}.Primer_Brand__Timeline-module__Timeline__item____ME4_:before,.Primer_Brand__Timeline-module__Timeline__item____ME4_:after{content:"";position:absolute}.Primer_Brand__Timeline-module__Timeline__item____ME4_:before{width:var(--brand-Timeline-bullet-size);height:var(--brand-Timeline-bullet-size);top:var(--bulletY);border-style:solid;border-width:var(--brand-Timeline-strokeWidth);border-color:var(--brand-Timeline-line-color);border-radius:var(--brand-borderRadius-full);left:0}.Primer_Brand__Timeline-module__Timeline__item____ME4_:not(:last-child):after{top:calc(var(--bulletY) + var(--brand-Timeline-bullet-size) + var(--brand-Timeline-bullet-spacing));left:calc(var(--brand-Timeline-bullet-size) / 2 - var(--brand-Timeline-strokeWidth) / 2);width:var(--brand-Timeline-strokeWidth);height:calc(100% - var(--brand-Timeline-bullet-size) - var(--brand-Timeline-bullet-spacing) * 2);background-color:var(--brand-Timeline-line-color);border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Timeline-module__Timeline__item-text___sbSjp em,.Primer_Brand__Timeline-module__Timeline__item-text___sbSjp b{color:var(--brand-color-text-default);font-style:normal;font-weight:var(--base-text-weight-medium)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a{color:var(--brand-InlineLink-color-rest);-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a{font-weight:inherit;color:var(--brand-InlineLink-color-rest)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a:active{color:var(--brand-InlineLink-color-pressed)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Timeline-module__Timeline__item____ME4_,.Primer_Brand__Timeline-module__Timeline__item____ME4_:before,.Primer_Brand__Timeline-module__Timeline__item____ME4_:after,.Primer_Brand__Timeline-module__Timeline__item____ME4_ *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-Timeline-line-color:var(--brand-color-border-default)}[data-color-mode=dark]{--brand-Timeline-line-color:var(--base-color-scale-gray-4)}:root{--brand-Timeline-bullet-spacing:.125rem;--brand-Timeline-bullet-size:var(--base-size-8);--brand-Timeline-spacing:var(--base-size-16);--brand-Timeline-strokeWidth:.125rem;--brand-Timeline-lineLength:44ch;--brand-Timeline-lineHeight:var(--brand-text-lineHeight-200);--brand-Bento-content-padding-spacious:3.5rem;--brand-Bento-content-padding-normal:var(--base-size-24);--brand-Bento-content-padding-condensed:var(--base-size-16);--brand-Bento-item-borderRadius-large:var(--brand-borderRadius-xlarge);--brand-Bento-item-borderRadius-medium:var(--brand-borderRadius-xlarge);--brand-Bento-item-borderRadius-small:var(--brand-borderRadius-large);--brand-Bento-gap-small:var(--base-size-20);--brand-Bento-gap-medium:var(--base-size-32);--brand-Bento-gap-large:var(--base-size-32)}.Primer_Brand__Bento-module__Bento___mNrII{grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-rows:minmax(var(--base-size-80), max-content);grid-gap:var(--brand-Bento-gap-small);width:100%;display:grid;position:relative}.Primer_Brand__Bento-module__Bento__Item___fM9oe{border-radius:var(--brand-Bento-item-borderRadius-small);grid-gap:var(--brand-Bento-content-padding-spacious);grid-template-rows:auto 1fr;grid-template-columns:1fr;display:grid;overflow:hidden}.Primer_Brand__Bento-module__Bento__Item--bgColor-default___AyFWG{background-color:var(--brand-color-canvas-default)}.Primer_Brand__Bento-module__Bento__Item--bgColor-subtle___rIDKo{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q.Primer_Brand__Bento-module__Bento__Item___fM9oe{grid-gap:0}@media screen and (width>=80rem){.Primer_Brand__Bento-module__Bento___mNrII{gap:var(--brand-Bento-gap-large)}.Primer_Brand__Bento-module__Bento__Item___fM9oe{border-radius:var(--brand-Bento-item-borderRadius-large)}}@media screen and (width>=48rem){.Primer_Brand__Bento-module__Bento___mNrII{gap:var(--brand-Bento-gap-medium)}.Primer_Brand__Bento-module__Bento__Item___fM9oe{border-radius:var(--brand-Bento-item-borderRadius-medium)}}.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q .Primer_Brand__Bento-module__Bento__Content___BhnY8{order:1;grid-area:1/1/span 2/span 2}.Primer_Brand__Bento-module__Bento__Content___BhnY8{height:100%;color:var(--brand-color-text-default);flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__Bento-module__Bento__Content-icon___K3van{margin-bottom:var(--base-size-32)}.Primer_Brand__Bento-module__Bento__heading--no-text___FiQWM{margin-bottom:var(--base-size-24)}.Primer_Brand__Bento-module__Bento__heading--muted___un_Vf{color:var(--brand-color-text-muted)}.Primer_Brand__Bento-module__Bento__heading--muted___un_Vf em,.Primer_Brand__Bento-module__Bento__heading--muted___un_Vf b{color:var(--brand-color-text-default);font-style:normal;font-weight:inherit}.Primer_Brand__Bento-module__Bento__heading--with-max-width___B8vBa{max-width:600px}.Primer_Brand__Bento-module__Bento__Visual___uQCng{width:100%;height:100%;display:flex}.Primer_Brand__Bento-module__Bento__Visual--overflow-hidden___KzPcB{overflow:hidden}.Primer_Brand__Bento-module__Bento__Visual--overflow-initial___TJvWe{overflow:visible;overflow:initial}.Primer_Brand__Bento-module__Bento__Visual--horizontalAlign-center___nyK69{justify-content:center}.Primer_Brand__Bento-module__Bento__Visual--horizontalAlign-end___k1jRS{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Visual--horizontalAlign-start___DzeEf{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Visual--verticalAlign-center___nSnau{align-items:center}.Primer_Brand__Bento-module__Bento__Visual--verticalAlign-end___IVb1w{align-items:flex-end}.Primer_Brand__Bento-module__Bento__Visual--verticalAlign-start___pyNZQ{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q .Primer_Brand__Bento-module__Bento__Visual___uQCng{order:-1;grid-area:1/1/-1/-1}.Primer_Brand__Bento-module__Bento__Visual--fill___B70Uy>img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.Primer_Brand__Bento-module__Bento__Visual--no-fill___JcHtr>img{-o-object-fit:contain;object-fit:contain;border-radius:0}.Primer_Brand__Bento-module__Bento--padding-condensed___qkDcr{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--padding-normal___c85Rj{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--padding-spacious___ydfpH{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento--padding-condensed___qkDcr>img,.Primer_Brand__Bento-module__Bento--padding-normal___c85Rj>img{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Bento-module__Bento--padding-spacious___ydfpH>img{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Bento-module__Bento__Item--flow-column___Gd6ts{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item--flow-row___DVol6{grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{justify-content:inherit;margin-top:auto}.Primer_Brand__Bento-module__Bento__Content-text___Q4UA5{margin-top:var(--base-size-8);margin-bottom:var(--base-size-24)}.Primer_Brand__Bento-module__Bento__Content-label___SbyAo{margin-block-end:var(--base-size-16)}.Primer_Brand__Bento-module__Bento__Item--column-span-1___wJS_f{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--column-span-2___wJFH9{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--column-span-3___hskYi{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--column-span-4___EWadX{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--column-span-5___ggzyV{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--column-span-6___UuNEL{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--column-span-7___dnYwC{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--column-span-8___bUlVW{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--column-span-9___Veeak{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--column-span-10___NKxdA{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--column-span-11___ZjirT{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--column-span-12___CaIjg{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--row-span-1____HYWz{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--row-span-2___VYZcw{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--row-span-3___PkNE4{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--row-span-4___FygFo{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--row-span-5___wO0Ev{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--row-span-6___QvMUL{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--row-span-7___KfzTy{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--row-span-8___ctYpA{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--row-span-9___NK44C{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--row-span-10___YeL2N{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--row-span-11___OuImI{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--row-span-12___ZRPCc{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--column-start-1___hJ0es{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--column-start-2___RV3eY{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--column-start-3___M960L{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--column-start-4___V5b3w{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--column-start-5___hCu7p{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--column-start-6___WeOjZ{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--column-start-7___azf_1{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--column-start-8___ufTXp{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--column-start-9___m59SZ{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--column-start-10___pNAFk{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--column-start-11___JPuyR{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--column-start-12___nAVWL{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--row-start-1___ocNBk{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--row-start-2___vcLtw{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--row-start-3___w9cDE{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--row-start-4___Rn8P9{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--row-start-5___c5xci{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--row-start-6___fh6uR{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--row-start-7___jVnOo{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--row-start-8___L4G8w{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--row-start-9___Orw5A{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--row-start-10___IQVeg{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--row-start-11___w0uDj{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--row-start-12___o52Zm{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-start___uJAby{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-start___uJAby .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-center___zOTQa{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-center___zOTQa .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-end___fUd68{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-end___fUd68 .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--horizontalAlign-start___apVss{text-align:start;align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--horizontalAlign-center___DJpgD{text-align:center;align-items:center}@media screen and (width>=0){.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-1___O3dlL{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-2___LLZAj{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-3___SROOQ{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-4___dLcHs{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-5___Zil5S{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-6___pGhxP{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-7___Gmugv{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-8___mNfgZ{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-9___w5AFK{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-10___dEYRU{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-11___cBfF2{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-12___fEgOK{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-1___k41Hr{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-2___qHzNc{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-3___t3hyC{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-4___X_F9d{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-5___UuegS{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-6___W2L8o{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-7___lYC_E{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-8___f66F5{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-9___eU0LD{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-10___beFeO{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-11___DgR1X{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-12___Gl_9d{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-1___xf8R8{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-2___f5xs_{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-3___bl1q4{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-4___PhKl_{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-5___xYV6c{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-6___PYKbP{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-7___NE6p3{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-8___AeJAI{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-9___ikepW{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-10___nGG9V{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-11___UTeRm{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-12___NhrVC{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-1___ISePA{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-2___jM4bs{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-3___FTZiY{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-4___gfyxX{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-5___jO7WM{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-6___nKfix{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-7___NncQO{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-8___wY_Tb{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-9___p5PaK{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-10___MKWyL{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-11___nxv94{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-12___Vbl6J{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-column___WV1h5{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-column___WV1h5>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-column___WV1h5>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-row___k8j9i{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-row___k8j9i>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-row___k8j9i>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-start___cWQRy{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-start___cWQRy .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-center___k4IC6{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-center___k4IC6 .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-end___v_7lF{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-end___v_7lF .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-horizontalAlign-start___dT6ng{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--xsmall-horizontalAlign-center___xcsj2{align-items:center}.Primer_Brand__Bento-module__Bento--xsmall-padding-condensed___Eno9E{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--xsmall-padding-normal___C2rTu{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--xsmall-padding-spacious___kepW0{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--xsmall-gap-condensed___aPIBg{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--xsmall-gap-normal___XrOHt{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--xsmall-gap-spacious___mv1WJ{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=34rem){.Primer_Brand__Bento-module__Bento__Item--small-column-span-1___a6Uk_{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--small-column-span-2___eRR9s{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--small-column-span-3___iBkjl{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--small-column-span-4___iTLL7{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--small-column-span-5___FXZKF{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--small-column-span-6___VEiVP{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--small-column-span-7___RFD8p{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--small-column-span-8___WBTAW{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--small-column-span-9___PDKMV{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--small-column-span-10___ZBSO0{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--small-column-span-11___Or5lx{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--small-column-span-12___xu8z2{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--small-row-span-1___hJcO9{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--small-row-span-2___RdAwK{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--small-row-span-3___CMwq5{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--small-row-span-4___KuACi{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--small-row-span-5___xqZZV{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--small-row-span-6___Q9O51{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--small-row-span-7___MZ6cD{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--small-row-span-8___eIEpG{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--small-row-span-9___HkxM3{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--small-row-span-10___pce_C{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--small-row-span-11___GO_ln{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--small-row-span-12___lUcIB{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--small-column-start-1___blYcd{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--small-column-start-2___z84xb{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--small-column-start-3___jAHiV{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--small-column-start-4___sa5rD{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--small-column-start-5___EjA_Y{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--small-column-start-6___TsMuS{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--small-column-start-7___wzVOe{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--small-column-start-8___Cylzb{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--small-column-start-9___K3kJa{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--small-column-start-10___PwfIO{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--small-column-start-11___HwJrV{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--small-column-start-12___AuD3D{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--small-row-start-1___esfXx{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--small-row-start-2___rMTHJ{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--small-row-start-3___e5nFr{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--small-row-start-4___hWxGW{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--small-row-start-5___kZona{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--small-row-start-6___l17Wp{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--small-row-start-7___nZc8H{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--small-row-start-8___s8jU5{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--small-row-start-9___et36x{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--small-row-start-10___UNRQz{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--small-row-start-11___D0qCf{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--small-row-start-12___Poeju{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--small-flow-column___idFew{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-column___idFew>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-column___idFew>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--small-flow-row___FlDbE{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-row___FlDbE>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-row___FlDbE>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-start___QMpW2{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-start___QMpW2 .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-center___eyrsO{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-center___eyrsO .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-end___t8ken{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-end___t8ken .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--small-horizontalAlign-start____az8o{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--small-horizontalAlign-center___hIKKU{align-items:center}.Primer_Brand__Bento-module__Bento--small-padding-condensed___dV4bU{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--small-padding-normal____b5pg{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--small-padding-spacious___skviu{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--small-gap-condensed____69Z4{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--small-gap-normal___R5AS5{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--small-gap-spacious___ysMFz{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=48rem){.Primer_Brand__Bento-module__Bento__Item--medium-column-span-1___qXoCp{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-2___Or0aW{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-3___rfJlA{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-4___jrzrn{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-5___VX5Xb{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-6___PuJLu{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-7___Gf10h{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-8___EPkMS{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-9___simHy{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-10___vCY7I{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-11___woBRo{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-12___eR9Ow{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-1___vJifa{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-2___rHIIs{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-3___XpZk0{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-4___xPGyT{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-5___XHAdt{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-6___uXSJ0{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-7___V9oop{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-8___bTuWm{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-9___RBjok{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-10___nXL1W{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-11___bp7xe{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-12___QykVK{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-1___ysXie{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-2___obU8P{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-3___ttZ2X{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-4___yd4pw{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-5___wl6Sl{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-6___rlfWR{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-7___dfJXo{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-8___HLzZU{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-9___Jul8L{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-10___NGybV{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-11___vc1Nv{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-12___gZcLo{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-1___s1Rgz{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-2___dsf4y{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-3___rWjRq{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-4___Iiuud{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-5___tbnzw{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-6___jPFm7{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-7___ZqLlM{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-8___TIOvf{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-9___oukNX{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-10___ZCbg8{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-11___bSDUT{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-12___ozUh1{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--medium-flow-column___K27t6{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-column___K27t6>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-column___K27t6>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--medium-flow-row___qACyl{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-row___qACyl>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-row___qACyl>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-start___DOGQs{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-start___DOGQs .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-center___FEwTP{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-center___FEwTP .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-end___b8l2w{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-end___b8l2w .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-horizontalAlign-start___nzIvg{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--medium-horizontalAlign-center___aHFRW{align-items:center}.Primer_Brand__Bento-module__Bento--medium-padding-condensed___BgWOb{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--medium-padding-normal___xjnwE{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--medium-padding-spacious___I5PEZ{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--medium-gap-condensed___Nk4Uj{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--medium-gap-normal___KXAsF{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--medium-gap-spacious___vFlWU{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=63.25rem){.Primer_Brand__Bento-module__Bento__Item--large-column-span-1___sPCsf{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--large-column-span-2___wpcnQ{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--large-column-span-3___z8T3W{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--large-column-span-4___RNQwy{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--large-column-span-5___t06QC{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--large-column-span-6___eUMZR{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--large-column-span-7___mLdYl{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--large-column-span-8___zhtsq{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--large-column-span-9___IrFuA{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--large-column-span-10___d4zEs{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--large-column-span-11___UKFCJ{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--large-column-span-12___lOmLI{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--large-row-span-1___o_4N_{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--large-row-span-2___yJebq{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--large-row-span-3___MsNH2{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--large-row-span-4___aYG1Q{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--large-row-span-5___qiTGf{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--large-row-span-6___yDxVJ{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--large-row-span-7___gfW02{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--large-row-span-8___qrky4{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--large-row-span-9___wluiD{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--large-row-span-10___IXd3G{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--large-row-span-11___OVPxd{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--large-row-span-12___aAmjb{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--large-column-start-1___ogy5Y{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--large-column-start-2___A8Kex{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--large-column-start-3___nCs4W{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--large-column-start-4___k6wxM{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--large-column-start-5___u9g2t{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--large-column-start-6___wT9tc{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--large-column-start-7___cH1Zn{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--large-column-start-8___UsTw7{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--large-column-start-9___txaE3{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--large-column-start-10___uY9Wm{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--large-column-start-11___kwY5A{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--large-column-start-12___B9iMH{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--large-row-start-1___kYB2F{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--large-row-start-2___o21Td{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--large-row-start-3___htfzI{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--large-row-start-4___P2f1W{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--large-row-start-5___HT3C4{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--large-row-start-6___pcerM{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--large-row-start-7___j2ui8{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--large-row-start-8___V82iT{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--large-row-start-9___EG4R2{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--large-row-start-10___EaLQx{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--large-row-start-11___IQx_d{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--large-row-start-12___hlrVv{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--large-flow-column___uvNUE{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-column___uvNUE>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-column___uvNUE>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--large-flow-row___ple3b{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-row___ple3b>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-row___ple3b>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-start___VDcbn{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-start___VDcbn .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-center___mbhdV{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-center___mbhdV .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-end___hj9Dq{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-end___hj9Dq .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--large-horizontalAlign-start___YQT1t{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--large-horizontalAlign-center___YtwaR{align-items:center}.Primer_Brand__Bento-module__Bento-padding--large-condensed___HeO1J{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento-padding--large-normal___LcQOA{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento-padding--large-spacious____8oib{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--large-gap-condensed___Rbi9v{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--large-gap-normal___S9Fjb{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--large-gap-spacious___i_Gyj{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=80rem){.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-1___LC_qv{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-2___PkH2a{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-3___sjEds{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-4___CwpLr{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-5___ATLZK{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-6___wDVtR{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-7___BF_PQ{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-8___Je6tc{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-9___de_EV{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-10___TV_va{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-11___mRbhR{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-12___jCuU4{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-1___k8cvi{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-2___eQ1hk{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-3___FdBn9{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-4___Eu9U7{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-5___AymfS{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-6___ciomo{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-7___bDoNI{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-8___aCyc1{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-9___t6eYp{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-10___Q9UMh{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-11___Oeb8y{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-12___iXpKf{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-1___eTMGO{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-2___ghZ8B{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-3___zIFiN{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-4___Ye3wL{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-5___Vtfhw{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-6___MiwV4{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-7___n3U82{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-8___S45Zc{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-9___bjxcX{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-10___xiPsu{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-11___h6pke{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-12___lINEt{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-1___XJ8IJ{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-2___Jh4mU{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-3___Qaz7u{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-4___Wdsyy{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-5___SWvQD{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-6___YIWd4{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-7___UWo93{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-8___f8RMO{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-9___O7BXf{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-10___g9Tom{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-11___WATnH{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-12___f2aPN{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-column___xXSFC{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-column___xXSFC>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-column___xXSFC>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-row___y5CpT{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-row___y5CpT>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-row___y5CpT>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-start___EyXCQ{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-start___EyXCQ .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-center___P_tSO{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-center___P_tSO .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-end___UwemK{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-end___UwemK .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-horizontalAlign-start___zzvpZ{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--xlarge-horizontalAlign-center___mfany{align-items:center}.Primer_Brand__Bento-module__Bento--xlarge-padding-condensed___mPi3N{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--xlarge-padding-normal___tb1wm{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--xlarge-padding-spacious___bT4bv{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--xlarge-gap-condensed___Fvi39{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--xlarge-gap-normal___uQQu6{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--xlarge-gap-spacious___QxB62{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=87.5rem){.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-1___AChhv{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-2___yj5YI{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-3___jy7Fg{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-4___fXoXs{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-5___hZOPX{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-6___WEvG1{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-7___eliQQ{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-8____DaEU{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-9___PACVQ{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-10___iplz_{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-11___sUFyE{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-12___UauN_{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-1___la7E2{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-2___WXQZy{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-3___K295L{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-4___dizmC{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-5___gxqXP{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-6___fCUrs{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-7___t_vib{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-8___FkHnk{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-9___S9z_S{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-10___MWhmW{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-11___R0fGH{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-12___mgPOb{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-1___IjDaG{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-2___yrjzP{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-3___revB_{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-4___nXjQh{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-5___eKzaF{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-6___poX4Y{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-7___swX7v{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-8___jRIvg{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-9___B6iPN{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-10___U3Q49{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-11___arwBj{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-12___AVlIn{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-1___uKVBZ{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-2___l1Sk8{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-3___a3epC{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-4___cIZFC{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-5___rDSnG{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-6___iFfkQ{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-7___HQgB2{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-8___Kk8Ll{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-9___JA8it{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-10____Xfo3{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-11___GgPCA{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-12___Tauza{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-column___EIhFB{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-column___EIhFB>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-column___EIhFB>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-row___hqL6a{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-row___hqL6a>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-row___hqL6a>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-start___KQhGN{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-start___KQhGN .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-center___MfM4H{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-center___MfM4H .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-end___trbrg{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-end___trbrg .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-horizontalAlign-start___BPlw7{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--xxlarge-horizontalAlign-center___QFMr_{align-items:center}.Primer_Brand__Bento-module__Bento--xxlarge-padding-condensed___L_cr9{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento---xxlarge-padding-normal___TojyH{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--xxlarge-padding-spacious___C_vI2{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--xxlarge-gap-condensed___kImZb{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--xxlarge-gap-normal___bsI4f{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--xxlarge-gap-spacious___tLuXL{grid-gap:var(--brand-Bento-content-padding-spacious)}}.Primer_Brand__Bento-module__Bento-column-padding-override___SxVV5>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento-column-padding-override___SxVV5>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento-row-padding-override___r37Kb>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento-row-padding-override___r37Kb>div:last-of-type{padding-top:0}:root{--brand-EyebrowBanner-subHeading-size:var(--brand-text-size-100);--brand-EyebrowBanner-heading-size:var(--brand-text-size-100);--brand-EyebrowBanner-label-size:var(--brand-text-size-100);--brand-EyebrowBanner-spacing-inner-inline:var(--base-size-16);--brand-EyebrowBanner-spacing-inner-block:.875rem;--brand-EyebrowBanner-borderRadius:var(--base-size-16)}@media (width>=768px){:root{--brand-EyebrowBanner-subHeading-size:var(--brand-text-size-200);--brand-EyebrowBanner-heading-size:var(--brand-text-size-200);--brand-EyebrowBanner-label-size:var(--brand-text-size-200);--brand-EyebrowBanner-spacing-inner-inline:var(--base-size-20);--brand-EyebrowBanner-borderRadius:6.25rem}}:root,[data-color-mode=light]{--brand-Eyebrowbanner-bgColor-rest:#fff9;--brand-Eyebrowbanner-borderColor-rest:var(--brand-color-border-default);--brand-Eyebrowbanner-heading-fgColor:var(--brand-color-text-default);--brand-Eyebrowbanner-subHeading-fgColor:var(--brand-color-text-muted);--brand-Eyebrowbanner-icon-background-default:var(--base-color-scale-gray-0);--brand-Eyebrowbanner-icon-background-blue:var(--base-color-scale-blue-0);--brand-Eyebrowbanner-icon-background-coral:var(--base-color-scale-coral-0);--brand-Eyebrowbanner-icon-background-green:var(--base-color-scale-green-0);--brand-Eyebrowbanner-icon-background-gray:var(--base-color-scale-gray-0);--brand-Eyebrowbanner-icon-background-indigo:var(--base-color-scale-indigo-0);--brand-Eyebrowbanner-icon-background-lemon:var(--base-color-scale-lemon-0);--brand-Eyebrowbanner-icon-background-lime:var(--base-color-scale-lime-0);--brand-Eyebrowbanner-icon-background-orange:var(--base-color-scale-orange-0);--brand-Eyebrowbanner-icon-background-pink:var(--base-color-scale-pink-0);--brand-Eyebrowbanner-icon-background-purple:var(--base-color-scale-purple-0);--brand-Eyebrowbanner-icon-background-red:var(--base-color-scale-red-0);--brand-Eyebrowbanner-icon-background-teal:var(--base-color-scale-teal-0);--brand-Eyebrowbanner-icon-background-yellow:var(--base-color-scale-yellow-0);--brand-Eyebrowbanner-fgColor-default-start:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-default-middle:var(--base-color-scale-pink-5);--brand-Eyebrowbanner-fgColor-default-end:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-blue:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-blue-purple-start:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-blue-purple-end:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-coral:var(--base-color-scale-coral-5);--brand-Eyebrowbanner-fgColor-green:var(--base-color-scale-green-6);--brand-Eyebrowbanner-fgColor-green-blue-start:var(--base-color-scale-green-6);--brand-Eyebrowbanner-fgColor-green-blue-end:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-gray:var(--base-color-scale-gray-5);--brand-Eyebrowbanner-fgColor-indigo:var(--base-color-scale-indigo-5);--brand-Eyebrowbanner-fgColor-lemon:var(--base-color-scale-lemon-5);--brand-Eyebrowbanner-fgColor-lime:var(--base-color-scale-lime-5);--brand-Eyebrowbanner-fgColor-orange:var(--base-color-scale-orange-5);--brand-Eyebrowbanner-fgColor-pink:var(--base-color-scale-pink-5);--brand-Eyebrowbanner-fgColor-pink-blue-start:var(--base-color-scale-pink-5);--brand-Eyebrowbanner-fgColor-pink-blue-end:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-purple:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-purple-red-start:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-purple-red-end:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-red:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-red-orange-start:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-red-orange-end:var(--base-color-scale-orange-5);--brand-Eyebrowbanner-fgColor-teal:var(--base-color-scale-teal-5);--brand-Eyebrowbanner-fgColor-yellow:var(--base-color-scale-yellow-5)}[data-color-mode=dark]{--brand-Eyebrowbanner-bgColor-rest:#0d111799;--brand-Eyebrowbanner-borderColor-rest:var(--base-color-scale-gray-5);--brand-Eyebrowbanner-heading-fgColor:var(--brand-color-text-default);--brand-Eyebrowbanner-subHeading-fgColor:var(--brand-color-text-muted);--brand-Eyebrowbanner-icon-background-default:var(--base-color-scale-gray-6);--brand-Eyebrowbanner-icon-background-blue:var(--base-color-scale-blue-8);--brand-Eyebrowbanner-icon-background-coral:var(--base-color-scale-coral-8);--brand-Eyebrowbanner-icon-background-green:var(--base-color-scale-green-8);--brand-Eyebrowbanner-icon-background-gray:var(--base-color-scale-gray-6);--brand-Eyebrowbanner-icon-background-indigo:var(--base-color-scale-indigo-8);--brand-Eyebrowbanner-icon-background-lemon:var(--base-color-scale-lemon-8);--brand-Eyebrowbanner-icon-background-lime:var(--base-color-scale-lime-8);--brand-Eyebrowbanner-icon-background-orange:var(--base-color-scale-orange-8);--brand-Eyebrowbanner-icon-background-pink:var(--base-color-scale-pink-8);--brand-Eyebrowbanner-icon-background-purple:var(--base-color-scale-purple-8);--brand-Eyebrowbanner-icon-background-red:var(--base-color-scale-red-8);--brand-Eyebrowbanner-icon-background-teal:var(--base-color-scale-teal-8);--brand-Eyebrowbanner-icon-background-yellow:var(--base-color-scale-yellow-8);--brand-Eyebrowbanner-fgColor-default-start:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-default-middle:var(--base-color-scale-pink-3);--brand-Eyebrowbanner-fgColor-default-end:var(--base-color-scale-red-3);--brand-Eyebrowbanner-fgColor-blue:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-blue-purple-start:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-blue-purple-end:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-coral:var(--base-color-scale-coral-2);--brand-Eyebrowbanner-fgColor-green:var(--base-color-scale-green-2);--brand-Eyebrowbanner-fgColor-green-blue-start:var(--base-color-scale-green-2);--brand-Eyebrowbanner-fgColor-green-blue-end:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-gray:var(--base-color-scale-gray-2);--brand-Eyebrowbanner-fgColor-indigo:var(--base-color-scale-indigo-2);--brand-Eyebrowbanner-fgColor-lemon:var(--base-color-scale-lemon-2);--brand-Eyebrowbanner-fgColor-lime:var(--base-color-scale-lime-2);--brand-Eyebrowbanner-fgColor-orange:var(--base-color-scale-orange-2);--brand-Eyebrowbanner-fgColor-pink:var(--base-color-scale-pink-2);--brand-Eyebrowbanner-fgColor-pink-blue-start:var(--base-color-scale-pink-2);--brand-Eyebrowbanner-fgColor-pink-blue-end:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-purple:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-purple-red-start:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-purple-red-end:var(--base-color-scale-red-2);--brand-Eyebrowbanner-fgColor-red:var(--base-color-scale-red-2);--brand-Eyebrowbanner-fgColor-red-orange-start:var(--base-color-scale-red-2);--brand-Eyebrowbanner-fgColor-red-orange-end:var(--base-color-scale-orange-2);--brand-Eyebrowbanner-fgColor-teal:var(--base-color-scale-teal-2);--brand-Eyebrowbanner-fgColor-yellow:var(--base-color-scale-yellow-2)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn{background:var(--brand-Eyebrowbanner-bgColor-rest);border:var(--brand-borderWidth-thin) solid var(--brand-Eyebrowbanner-borderColor-rest);padding:var(--brand-EyebrowBanner-spacing-inner-block) var(--brand-EyebrowBanner-spacing-inner-inline);border-radius:var(--brand-EyebrowBanner-borderRadius);align-self:flex-start;-webkit-text-decoration:none;text-decoration:none;display:inline-block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:hover{-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:2px;transition:none}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__inner___LiSah{align-items:center;display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__headings___Tyish{text-align:start;margin-inline-start:var(--brand-EyebrowBanner-spacing-inner-inline)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f{display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f img,.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f picture,.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f svg{height:var(--base-size-44);width:auto;max-width:var(--base-size-44);max-height:var(--base-size-44)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f img,.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f picture{display:block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__trailingVisual___vQJwY{display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__trailingVisual-icon___m2rYL{color:var(--brand-color-text-default);fill:var(--brand-color-text-default);margin-inline-start:var(--base-size-20)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel___JfbO4{font-family:var(--brand-body-fontFamily);font-weight:var(--base-text-weight-medium);font-size:var(--brand-EyebrowBanner-label-size);letter-spacing:var(--brand-text-letterSpacing-200);background:linear-gradient(92deg, var(--brand-EyebrowBanner-leadingLabel-color-start,var(--brand-Eyebrowbanner-fgColor-default-start)) 12.09%, var(--brand-EyebrowBanner-leadingLabel-color-middle,var(--brand-Eyebrowbanner-fgColor-default-middle)) 42.58%, var(--brand-EyebrowBanner-leadingLabel-color-end,var(--brand-Eyebrowbanner-fgColor-default-end)) 84.96%);text-transform:uppercase;-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;line-height:1em;display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-blue___gWZsh{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-blue);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-blue);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-blue)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-blue-purple___jHrJf{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-blue-purple-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-blue-purple-end);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-blue-purple-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-coral___zDffR{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-coral);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-coral);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-coral)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-green___KfjSH{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-green);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-green);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-green)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-green-blue___IT4vV{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-green-blue-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-green-blue-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-green-blue-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-gray___ZXNfp{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-gray);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-gray);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-gray)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-indigo___jRhXl{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-indigo);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-indigo);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-indigo)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-lemon___VfgJy{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-lemon);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-lemon);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-lemon)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-lime___QxCgJ{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-lime);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-lime);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-lime)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-orange___ctXEe{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-orange);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-orange);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-orange)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-pink___DK8mh{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-pink);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-pink);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-pink)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-pink-blue___taquP{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-pink-blue-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-pink-blue-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-pink-blue-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-purple___SjSu3{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-purple);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-purple);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-purple)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-purple-red___mFOTU{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-purple-red-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-purple-red-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-purple-red-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-red___fvZYM{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-red);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-red);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-red)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-red-orange___MoG8u{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-red-orange-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-red-orange-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-red-orange-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-teal___QCvJH{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-teal);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-teal);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-teal)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-yellow___nHfOQ{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-yellow);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-yellow);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-yellow)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__heading___gGjRD{color:var(--brand-Eyebrowbanner-heading-fgColor);font-size:var(--brand-EyebrowBanner-heading-size);display:block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__subHeading___EHr9v{color:var(--brand-Eyebrowbanner-subHeading-fgColor);font-size:var(--brand-EyebrowBanner-subHeading-size);display:block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{width:var(--base-size-44);height:var(--base-size-44);border-radius:50%;justify-content:center;align-items:center;display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon___RlAjy svg{width:var(--base-size-20);height:var(--base-size-20)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-default___zjZm_{color:var(--brand-color-text-default)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-default___zjZm_.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-default)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-blue___JEOeh{color:var(--brand-Eyebrowbanner-fgColor-blue)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-blue___JEOeh.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-blue)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-coral___f1EgJ{color:var(--brand-Eyebrowbanner-fgColor-coral)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-coral___f1EgJ.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-coral)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-green___l3tOa{color:var(--brand-Eyebrowbanner-fgColor-green)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-green___l3tOa.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-green)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-gray___DfR6X{color:var(--brand-Eyebrowbanner-fgColor-gray)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-gray___DfR6X.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-gray)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-indigo___SwE_O{color:var(--brand-Eyebrowbanner-fgColor-indigo)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-indigo___SwE_O.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-indigo)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lemon___uo7HU{color:var(--brand-Eyebrowbanner-fgColor-lemon)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lemon___uo7HU.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-lemon)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lime___UoH_J{color:var(--brand-Eyebrowbanner-fgColor-lime)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lime___UoH_J.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-lime)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-orange___Oakbb{color:var(--brand-Eyebrowbanner-fgColor-orange)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-orange___Oakbb.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-orange)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-pink___RtapL{color:var(--brand-Eyebrowbanner-fgColor-pink)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-pink___RtapL.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-pink)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-purple___qMl8t{color:var(--brand-Eyebrowbanner-fgColor-purple)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-purple___qMl8t.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-purple)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-red___jbmX3{color:var(--brand-Eyebrowbanner-fgColor-red)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-red___jbmX3.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-red)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-teal___iB9Rw{color:var(--brand-Eyebrowbanner-fgColor-teal)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-teal___iB9Rw.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-teal)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-yellow___Jt5i1{color:var(--brand-Eyebrowbanner-fgColor-yellow)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-yellow___Jt5i1.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-yellow)}@media (prefers-reduced-motion:reduce){.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn,.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:before,.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:after,.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root{--brand-PricingOptions-items4-container-padding-inline:var(--base-size-24);--brand-PricingOptions-items4-gap:var(--base-size-48);--brand-PricingOptions-items3-container-padding-inline:var(--base-size-24);--brand-PricingOptions-items3-gap:var(--base-size-64);--brand-PricingOptions-items2-container-padding-inline:var(--base-size-48);--brand-PricingOptions-items2-gap:var(--base-size-96);--brand-PricingOptions-items1-container-paddingInline:var(--base-size-32);--brand-PricingOptions-items-gap:var(--base-size-24)}:root,[data-color-mode=light]{--brand-PricingOptions-borderMask:linear-gradient(180deg, #0009, #0000004d);--brand-PricingOptions-item-bgColor-solid:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-start:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-end:var(--brand-color-canvas-default);--brand-PricingOptions-featureList-group-heading-color:var(--brand-color-text-default);--brand-PricingOptions-actionsMessage-bgColor:color-mix(in srgb, var(--base-color-scale-blue-4) 10%, transparent);--brand-PricingOptions-actionsMessage-borderColor:color-mix(in srgb, var(--base-color-scale-blue-6) 20%, transparent);--brand-PricingOptions-actionsMessage-accentColor:var(--base-color-scale-blue-5)}[data-color-mode=dark]{--brand-PricingOptions-borderMask:linear-gradient(180deg, #000, #0006);--brand-PricingOptions-item-bgColor-solid:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-start:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-end:var(--brand-color-canvas-default);--brand-PricingOptions-featureList-group-heading-color:var(--brand-color-text-default);--brand-PricingOptions-actionsMessage-bgColor:#0c1c26;--brand-PricingOptions-actionsMessage-borderColor:#0e4678;--brand-PricingOptions-actionsMessage-accentColor:#1095ff}.Primer_Brand__PricingOptions-module__PricingOptions___hjzt8{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items-gap);--brand-pricing-options-container-padding-inline:0;--brand-pricing-options-column-count:1;--brand-pricing-options-template-areas:"labels" "leadingComponent" "header" "description" "price" "actions" "feature-list" "footnote";grid-row-gap:0;grid-row-gap:var(--brand-pricing-options-item-gap,0);row-gap:0;row-gap:var(--brand-pricing-options-item-gap,0);padding-inline:0;padding-inline:var(--brand-pricing-options-container-padding-inline);display:grid}@media screen and (width<=63.24rem){.Primer_Brand__PricingOptions-module__PricingOptions___hjzt8{max-width:488px;margin-inline:auto}}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions___hjzt8{grid-template-areas:var(--brand-pricing-options-template-areas);grid-template-columns:repeat(var(--brand-pricing-options-column-count), minmax(0, 1fr));-moz-column-gap:0;-moz-column-gap:var(--brand-pricing-options-item-gap,0);column-gap:0;column-gap:var(--brand-pricing-options-item-gap,0);row-gap:0}.Primer_Brand__PricingOptions-module__PricingOptions--items1___Do94G{--brand-pricing-options-column-count:1}.Primer_Brand__PricingOptions-module__PricingOptions--items2___Z08y5{--brand-pricing-options-column-count:2}.Primer_Brand__PricingOptions-module__PricingOptions--items3___u4TM8{--brand-pricing-options-column-count:3}.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3{--brand-pricing-options-column-count:4}}.Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw{display:none}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw{--brand-pricing-options-column-count:1;grid-area:labels/1/labels/-1;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-columns:repeat(var(--brand-pricing-options-column-count), minmax(0, 1fr));grid-column-gap:0;grid-column-gap:var(--brand-pricing-options-item-gap,0);-moz-column-gap:0;-moz-column-gap:var(--brand-pricing-options-item-gap,0);column-gap:0;column-gap:var(--brand-pricing-options-item-gap,0);display:grid}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM{min-height:var(--base-size-54);padding-block:var(--base-size-16);background-color:var(--brand-PricingOptions-item-bgColor-solid);align-items:center;display:flex;position:relative}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:after{content:"";inset-block-start:0;inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1);inset-inline-end:0;height:var(--brand-borderWidth-thin);background-color:var(--brand-color-text-emphasized);z-index:1;position:absolute;inset-inline-end:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1)}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:first-child:after{inset-inline-start:0}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:last-child:after{inset-inline-end:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:after{inset-inline:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw{position:relative}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw:after{content:"";inset-block-end:0;inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1);inset-inline-end:0;height:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-subtle);position:absolute;inset-inline-end:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM{margin-inline:calc(var(--brand-pricing-options-item-gap) / 2 * -1);padding-inline:calc(var(--brand-pricing-options-item-gap) / 2)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:first-child{margin-inline-start:calc(var(--brand-pricing-options-container-padding-inline) * -1);padding-inline-start:var(--brand-pricing-options-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:last-child{margin-inline-end:calc(var(--brand-pricing-options-container-padding-inline) * -1);padding-inline-end:var(--brand-pricing-options-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--empty___SSWHp{background-color:#0000;border-block-start-color:#0000}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM+.Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:before{content:"";width:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-subtle);position:absolute;inset-block:0;inset-inline-start:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM+.Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:before{-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM{padding-inline:var(--base-size-28);border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--empty___SSWHp{opacity:0;pointer-events:none}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:after{inset-inline:0}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8{position:relative}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-solid___S7wHh{border:solid 1px var(--brand-color-border-subtle);background-color:var(--brand-PricingOptions-item-bgColor-solid)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ,.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{background:linear-gradient(180deg, var(--brand-PricingOptions-item-bgColor-gradient-start) 0%, var(--brand-PricingOptions-item-bgColor-gradient-end) 100%)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ:before,.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{content:"";pointer-events:none;border-radius:inherit;-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle);position:absolute;inset:0}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8{padding-inline:var(--brand-pricing-options-container-padding-inline)}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{--brand-pricing-options-item-padding-inline:var(--base-size-24);padding-inline:var(--base-size-24);padding-block:var(--base-size-20);position:relative}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{--brand-pricing-options-item-padding-inline:0;padding-inline:0;padding-block:var(--base-size-40)}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{content:"";background-color:var(--brand-color-border-subtle);height:1px;position:absolute;inset-inline:0}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{width:1px;height:auto;margin-block-start:0;margin-inline-start:calc(var(--brand-pricing-options-item-gap) / 2 * -1);inset-block:0;inset-inline:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask)}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{--brand-pricing-options-item-padding-inline:var(--base-size-32);padding-inline:var(--base-size-32);padding-block:var(--base-size-32);position:relative}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--appearance-solid___S7wHh .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{background-color:var(--brand-PricingOptions-item-bgColor-solid);border:solid var(--brand-borderWidth-thin) var(--brand-color-border-subtle)}@media (width>=48rem){:where(.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3){row-gap:var(--brand-pricing-options-item-gap)}}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--items1___Do94G{width:50%;margin-inline:auto}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items1___Do94G{--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items1-container-paddingInline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items2___Z08y5{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items2-gap);--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items2-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items3___u4TM8{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items3-gap);--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items3-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items4-gap);--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items4-container-padding-inline)}}.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{grid-template-areas:var(--brand-pricing-options-template-areas);display:grid}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{grid-row:header/footnote;grid-template-rows:subgrid}.Primer_Brand__PricingOptions-module__PricingOptions__item--has-leading-component___Dzv8_{grid-row:leadingComponent/footnote}}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b{justify-items:center}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__price___qxTEV,.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__description___hb2GR{text-align:center;justify-content:center}@supports not (grid-template-rows:subgrid){@media (width>=63.28rem){.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{grid-template-areas:var(--brand-pricing-options-template-areas);grid-template-rows:auto;grid-template-columns:1fr}}}.Primer_Brand__PricingOptions-module__PricingOptions__header___NCmt2{row-gap:var(--base-size-16);grid-area:header;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:not(.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b) .Primer_Brand__PricingOptions-module__PricingOptions__header___NCmt2{align-items:center;margin-block-end:var(--base-size-16)}.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:not(.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b) .Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{margin-block:var(--base-size-16);flex:0 auto;order:1;align-self:flex-start}@media (width>=63.24rem){.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:not(.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b) .Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{margin-block:0}}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__header___NCmt2{justify-content:center}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{text-align:center;margin-block-start:0;margin-block-end:var(--base-size-16)}.Primer_Brand__PricingOptions-module__PricingOptions__leading-component___FPip4{grid-row:leadingComponent}.Primer_Brand__PricingOptions-module__PricingOptions__leading-component___FPip4 img,.Primer_Brand__PricingOptions-module__PricingOptions__leading-component___FPip4 picture{display:block}.Primer_Brand__PricingOptions-module__PricingOptions__label___VwACa{color:var(--brand-color-text-default);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);letter-spacing:var(--brand-text-letterSpacing-100);line-height:var(--brand-text-lineHeight-200);text-transform:uppercase}.Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{margin-block:var(--base-size-16);flex:0 auto;order:1;align-self:flex-start}.Primer_Brand__PricingOptions-module__PricingOptions__description___hb2GR{grid-row:description}.Primer_Brand__PricingOptions-module__PricingOptions__price___qxTEV{flex-wrap:wrap;grid-row:price;align-items:flex-start;padding-block-start:var(--base-size-20);padding-block-end:var(--base-size-8);display:flex}@media (width<=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions__price-value___XH4vo,.Primer_Brand__PricingOptions-module__PricingOptions__price-currency-symbol___Fv4Ny{font-size:var(--brand-text-size-900)}}.Primer_Brand__PricingOptions-module__PricingOptions__price-amount___tdTS8{align-items:flex-end;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__price-currency-code___kFWAy{color:var(--brand-color-text-muted);margin-block-end:var(--base-size-4);margin-inline-start:var(--base-size-4)}.Primer_Brand__PricingOptions-module__PricingOptions__price-original-price___C9hzM{align-self:center;margin-inline-start:var(--base-size-8);-webkit-text-decoration:none;text-decoration:none;display:inline-flex}.Primer_Brand__PricingOptions-module__PricingOptions__price-original-price-value___Xtjg8{-webkit-text-decoration:line-through;text-decoration:line-through}.Primer_Brand__PricingOptions-module__PricingOptions__price-trailing-text___W2UAb{flex:1 0 100%;display:block}.Primer_Brand__PricingOptions-module__PricingOptions__actions___e2W5P{gap:var(--base-size-8);flex-direction:column;grid-row:actions;align-items:flex-end;padding-block-start:var(--base-size-20);display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message___n7IvJ{gap:var(--base-size-12);inline-size:100%;max-inline-size:100%;padding:var(--base-size-12);border-block:var(--brand-borderWidth-thin) solid var(--brand-PricingOptions-actionsMessage-borderColor);background-color:var(--brand-PricingOptions-actionsMessage-bgColor);border-inline:0;border-radius:0;align-items:flex-start;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-leading-component___Wk0uH{color:var(--brand-PricingOptions-actionsMessage-accentColor);flex:none;margin-block-start:var(--base-size-4);display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-leading-component___Wk0uH :where(svg){inline-size:var(--base-size-16);block-size:var(--base-size-16);display:block}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-content___CKvOG{flex:auto;min-inline-size:0}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-content___CKvOG :where(p){margin:0}.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF,.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF>*{width:100%}.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF>*>*{width:100%;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF>*>*>:first-child{flex:1}.Primer_Brand__PricingOptions-module__PricingOptions__footnote___UwqUw{grid-row:footnote;margin-block-start:var(--base-size-8);display:block}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list___BmoFc{--feature-list-font-size:var(--brand-text-size-200);--feature-list-line-height:var(--brand-text-lineHeight-200);gap:var(--base-size-8);flex-direction:column;grid-row:feature-list;width:100%;margin-block-start:var(--base-size-20);padding-block-start:var(--base-size-20);display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ{margin:0;margin-block-start:var(--base-size-20);padding-block-start:var(--base-size-40);padding-inline:0;position:relative}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{content:"";inset-block-start:0;inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-item-padding-inline,0px) * -1);inset-inline-end:0;height:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-subtle);position:absolute;inset-inline-end:calc(var(--brand-pricing-options-item-padding-inline,0px) * -1)}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1);inset-inline-end:0;inset-inline-end:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:first-child .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before,.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:last-child .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{inset-inline-end:0;inset-inline-end:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask)}}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-set___cJt0a:nth-child(n+2){margin-block-start:var(--base-size-20)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-group-heading___u739o{color:var(--brand-PricingOptions-featureList-group-heading-color);margin-block-start:var(--base-size-12);margin-block-end:var(--base-size-8)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item--excluded___iDvOS span{color:var(--brand-color-text-muted)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item--has-info___zXREr{flex-wrap:nowrap}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item--has-info___zXREr>span{flex:1;justify-content:space-between;align-items:baseline;display:inline-flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item-info___glnBV{all:unset;cursor:pointer;color:var(--brand-color-text-muted);background-color:color-mix(in srgb, var(--brand-color-canvas-invert) 12%, transparent);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);vertical-align:middle;padding:var(--base-size-4);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;margin-inline-start:var(--base-size-8);display:inline-flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item-info___glnBV svg{width:var(--base-size-12);height:var(--base-size-12)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item-info___glnBV:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:2px}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list___BmoFc+.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-group-heading___u739o{margin-block-start:var(--base-size-20)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item___M9A0t,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item___M9A0t span{font-size:var(--feature-list-font-size)!important;line-height:var(--feature-list-line-height)!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-group-heading___u739o{font-size:var(--feature-list-font-size)!important}.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3 .Primer_Brand__PricingOptions-module__PricingOptions__feature-list___BmoFc{--feature-list-font-size:var(--brand-text-size-100);--feature-list-line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF{border:0;padding:0}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF:after{content:none!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW{padding:var(--base-size-8) 0;margin-block-start:calc(var(--base-size-16) * -1);margin-block-end:var(--base-size-8);padding-inline:0!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h1,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h2,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h3,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h4,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h5,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h6{font-size:var(--feature-list-font-size);line-height:var(--feature-list-line-height);font-weight:var(--brand-text-subhead-weight-large);gap:var(--base-size-8);justify-content:space-between;align-items:center;width:100%;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW span{display:none}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-content___hCzO7{padding:0;padding-block-start:var(--base-size-8);padding-inline-start:0!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-chevron___XXErd{margin-inline-end:var(--base-size-4)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF[open] .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-chevron___XXErd{transform:rotate(180deg)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-content___hCzO7{animation:none!important}.Primer_Brand__SubNav-module__SubNav__container___iZQjL{z-index:2;border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);width:100%;position:absolute}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7{display:inline;display:initial;position:relative}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7 .Primer_Brand__SubNav-module__SubNav___dVoQu{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubNav-module__SubNav___dVoQu{z-index:1;background-color:var(--brand-SubNav-bgColor);width:100%;display:flex}[data-color-mode=dark] .Primer_Brand__SubNav-module__SubNav___dVoQu{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.Primer_Brand__SubNav-module__SubNav__heading___MAxf6,.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp{font-size:calc(var(--base-size-16) - 1px);line-height:calc(var(--base-size-16) - 1px);font-weight:var(--brand-text-subhead-weight-medium);color:var(--brand-color-text-default);font-family:var(--brand-heading-fontFamily);-webkit-text-decoration:none;text-decoration:none;display:block}.Primer_Brand__SubNav-module__SubNav__heading___MAxf6:hover,.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp:hover,.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:var(--brand-color-text-muted);-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__SubNav-module__SubNav--header-container-outer___tneuD{width:100%}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{z-index:9998;min-height:60px;padding:var(--base-size-16);border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);align-items:center;display:flex;position:relative}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG+.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline-start:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav--has-shadow___jkyC7{box-shadow:var(--brand-SubNav-shadow);background-color:var(--brand-color-canvas-default)}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq{padding-inline:0}.Primer_Brand__SubNav-module__SubNav__action-container___lgC_T{margin-left:auto}.Primer_Brand__SubNav-module__SubNav__sub-menu-icon___XxnxY{display:none!important}.Primer_Brand__SubNav-module__SubNav__sub-menu-children___t0gfy{display:contents}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND{margin:0;padding:0;list-style:none}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND>span,.Primer_Brand__SubNav-module__SubNav__sub-menu-toggle___FvvL9,.Primer_Brand__SubNav-module__SubNav__overflow-container___GPuX_{display:none}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz{z-index:10;width:max-content;min-width:var(--brand-SubNav-width-overflowMenuMin);max-width:calc(100vw - var(--brand-SubNav-width-overflowMenuInset));max-height:calc(100dvh - var(--brand-SubNav-height-overflowMenuInset));background-color:var(--brand-SubNav-overflowMenu-bgColor-rest);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);box-shadow:none;transform:translateY(calc(0px - var(--brand-SubNav-offset-overflowMenu)));animation:Primer_Brand__SubNav-module__fade-in___t8Rrr var(--brand-animation-duration-faster) var(--brand-animation-easing-default);border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:var(--brand-borderRadius-medium);border-end-start-radius:var(--brand-borderRadius-medium);margin:0;padding:0;position:absolute;inset:auto;overflow:hidden auto}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz::backdrop{background-color:#0000}.Primer_Brand__SubNav-module__SubNav__overflow-menu-list____hd03{grid-gap:var(--brand-borderWidth-thin);gap:var(--brand-borderWidth-thin);padding:var(--base-size-8);width:100%;margin:0;list-style:none;display:grid}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{z-index:91;position:sticky;top:-1px}.Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG{opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), background-color var(--brand-animation-duration-default) var(--brand-animation-easing-default);background-color:#0000}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:focus-within .Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG,.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container--stuck___HlM9i .Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG{opacity:1;background-color:var(--brand-color-canvas-default);transform:translateY(0)}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{height:0;transition:height var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:focus-within,.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container--stuck___HlM9i{height:auto}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), height var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:focus-within .Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG,.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container--stuck___HlM9i .Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{visibility:visible;opacity:1;transform:translateY(0)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-block:var(--base-size-12);border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);display:flex}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__sub-menu-list___aBVGd{gap:var(--base-size-20);margin:0;padding:0;list-style-type:none;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{font-weight:450}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{padding:var(--base-size-6) var(--base-size-12);border-radius:var(--brand-borderRadius-full);transition:background-color var(--brand-animation-duration-default) var(--brand-animation-easing-default), color var(--brand-animation-duration-default) var(--brand-animation-easing-default);background-color:#0000}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link--is-in-view___GqmLc .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{background-color:var(--brand-SubNav-color-link-bgColor)}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after,.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link--is-in-view___GqmLc:focus-visible .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after{opacity:0}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]) *{color:var(--brand-SubNav-color-link-active);-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{transition:color var(--brand-animation-duration-fast) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after{border-color:var(--brand-color-text-default)}@media screen and (width<=63.24rem){.Primer_Brand__SubNav-module__SubNav___dVoQu{position:relative}.Primer_Brand__SubNav-module__SubNav___dVoQu:before{content:"";opacity:0;z-index:9997;position:absolute;inset:0}.Primer_Brand__SubNav-module__SubNav___dVoQu:after{content:"";z-index:-1;background-color:var(--base-color-scale-black-0);opacity:0;visibility:hidden;width:100%;height:100%;position:fixed;inset:0}.Primer_Brand__SubNav-module__SubNav--open___xWq0D:after{opacity:.3;visibility:visible;transition:visibility var(--brand-animation-duration-default) var(--brand-animation-easing-default), opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__heading___MAxf6{font-size:var(--base-size-16);line-height:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav--open___xWq0D{display:block}.Primer_Brand__SubNav-module__SubNav--open___xWq0D .Primer_Brand__SubNav-module__SubNav--header-container-outer___tneuD{max-height:100dvh;max-height:var(--subnav-available-height,100dvh);flex-direction:column;display:flex;overflow:hidden}.Primer_Brand__SubNav-module__SubNav--open___xWq0D .Primer_Brand__SubNav-module__SubNav__header-container___heD5O{flex-shrink:0}.Primer_Brand__SubNav-module__SubNav--open___xWq0D+.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{z-index:-1}.Primer_Brand__SubNav-module__SubNav--open___xWq0D:before{background-color:var(--brand-color-canvas-default);animation:Primer_Brand__SubNav-module__fade-in___t8Rrr .3s var(--brand-animation-easing-glide) forwards}.Primer_Brand__SubNav-module__SubNav__heading-separator--main___sziYb:not(.Primer_Brand__SubNav-module__SubNav__heading-separator--has-adjacent-label___F3S2G),.Primer_Brand__SubNav-module__SubNav__heading-separator--subheading-active___ysuBi,.Primer_Brand__SubNav-module__SubNav__subheading-container-active___EOoAH{display:none}.Primer_Brand__SubNav-module__SubNav__header-container___heD5O{white-space:pre;z-index:9998;width:100%;display:flex;position:relative}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG+.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline-start:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__heading-separator___M5xJp{z-index:9998;margin-inline-end:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND{z-index:9998;padding-inline:var(--base-size-8);flex-direction:column;flex:auto;justify-content:center;display:none;position:relative}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA{gap:var(--base-size-8);padding-block:var(--base-size-16);border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex-direction:column;justify-content:flex-start;min-height:0;display:flex;overflow-y:auto}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:var(--brand-color-text-default)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{z-index:9999;width:100%;justify-content:flex-end;padding-inline-end:var(--base-size-16);display:flex;position:relative}.Primer_Brand__SubNav-module__SubNav--has-sub-heading___YxW9a:not(.Primer_Brand__SubNav-module__SubNav--subHeadingActive___AxXKr) .Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block:var(--base-size-12);margin-block:0;display:block}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content___GYAh4{width:100%;padding-inline-start:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-label___J0P2K{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);padding:var(--base-size-4) var(--base-size-12);gap:var(--base-size-6);cursor:pointer;font:inherit;border:none;align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq .Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{right:0}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ,.Primer_Brand__SubNav-module__SubNav__action-container___lgC_T{-webkit-text-decoration:none;text-decoration:none;display:none}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{position:relative}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]) *{color:var(--brand-SubNav-color-link-active)}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding:var(--base-size-4) var(--base-size-12);margin-inline-start:var(--base-size-8)}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]),.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);display:inline-flex}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{animation:Primer_Brand__SubNav-module__fade-in___t8Rrr .3s var(--brand-animation-easing-glide) forwards;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__action-container___lgC_T{animation:Primer_Brand__SubNav-module__fade-in___t8Rrr .3s var(--brand-animation-easing-glide) forwards;display:block}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{padding-block:0}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__action-container___lgC_T,.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__action___hRMk9{width:100%}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed{gap:var(--base-size-8);flex-direction:column;margin:0;padding:0;padding-block-start:var(--base-size-8);padding-inline-start:var(--base-size-16);list-style:none;display:flex}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{margin-inline-start:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:var(--brand-color-text-default)!important}.Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG{z-index:99;width:100%;overflow:auto hidden}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{position:sticky;top:-1px}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:after{content:"";width:var(--base-size-32);background:linear-gradient(to left, var(--brand-color-canvas-default), transparent);pointer-events:none;z-index:100;position:absolute;top:0;bottom:0;right:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-inline:var(--base-size-16);padding-block-start:var(--base-size-16);padding-block-end:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__sub-menu-list___aBVGd{padding-inline-end:var(--base-size-32)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{white-space:pre;top:var(--base-size-2);display:block;position:relative}}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-icon___AjCc8{fill:var(--brand-color-text-default)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content___GYAh4{align-items:center;gap:var(--base-size-8);display:flex}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content--end___GySmq{justify-content:flex-end}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible,.Primer_Brand__SubNav-module__SubNav__heading___MAxf6:focus-visible,.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp:focus-visible,.Primer_Brand__SubNav-module__SubNav__sub-menu-toggle___FvvL9:focus-visible,.Primer_Brand__SubNav-module__SubNav__overlay-toggle-label___J0P2K:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp{white-space:nowrap;display:block;position:relative}.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp[aria-current]:not([aria-current=false]){background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);padding:var(--base-size-6) var(--base-size-12);border:none}@media screen and (width>=48rem){.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content___GYAh4{padding-inline-start:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA{padding:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq{padding-inline:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-inline:var(--base-size-24)}}.Primer_Brand__SubNav-module__SubNav__heading-label___gwyQg{white-space:pre}@media screen and (width>=63.25rem){.Primer_Brand__SubNav-module__SubNav___dVoQu{z-index:92;padding-inline:var(--base-size-32);align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA{padding:0}.Primer_Brand__SubNav-module__SubNav___dVoQu:has(+.Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG){padding-block-end:0}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline-start:0}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq{padding-inline:0}.Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{display:none}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7 .Primer_Brand__SubNav-module__SubNav__heading___MAxf6{padding-block-end:1px}.Primer_Brand__SubNav-module__SubNav__heading-separator___M5xJp{margin-inline-end:var(--base-size-20);display:inline-flex;top:0}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7 .Primer_Brand__SubNav-module__SubNav__heading-separator___M5xJp{top:-1px}.Primer_Brand__SubNav-module__SubNav--header-container-outer___tneuD{align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav__header-container___heD5O{flex-shrink:0;align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND{align-items:center;gap:var(--base-size-2);z-index:92;min-width:0;flex:1 1 0;align-self:stretch;padding-inline-start:var(--base-size-24);display:flex}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND>li{white-space:nowrap;flex:none}.Primer_Brand__SubNav-module__SubNav__link--in-overlay___osowG{align-items:center;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__link-item--overflowed___x0xat{visibility:hidden;pointer-events:none;width:max-content;position:absolute}.Primer_Brand__SubNav-module__SubNav__overflow-container___GPuX_{visibility:hidden;pointer-events:none;align-self:stretch;align-items:center;display:flex;position:absolute}.Primer_Brand__SubNav-module__SubNav__overflow-container--visible___OLUw7{visibility:visible;pointer-events:auto;position:relative}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18{align-items:center;gap:var(--base-size-4);padding:var(--base-size-4) var(--base-size-12);color:var(--brand-SubNav-color-link-rest);background:var(--brand-SubNav-overflowMenu-toggle-bgColor-rest);border-radius:var(--brand-borderRadius-full);font:inherit;cursor:pointer;border:0;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18:hover{background-color:var(--brand-SubNav-overflowMenu-toggle-bgColor-hover)}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18[aria-expanded=true],.Primer_Brand__SubNav-module__SubNav__overflow-toggle--active___BiGMB{background-color:var(--brand-SubNav-overflowMenu-toggle-bgColor-active)}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18 .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:inherit}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ{transition:color .2s var(--brand-animation-easing-glide);padding:var(--base-size-4) var(--base-size-12);border-radius:var(--brand-borderRadius-full);position:relative;-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{padding:var(--base-size-4) 0}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW:after{content:"";bottom:calc(var(--base-size-12) * -1);width:100%;height:var(--base-size-12);background:0 0;position:absolute;left:0}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN{background-clip:padding-box;background-color:var(--brand-color-canvas-default);border:var(--brand-color-border-muted) solid var(--brand-borderWidth-thin);border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-8);z-index:9998;transition-timing-function:var(--brand-animation-easing-glide);transition-duration:var(--brand-animation-duration-fast);top:90%;left:0;left:var(--base-size-4);visibility:hidden;opacity:0;transform-origin:top;gap:var(--base-size-8);width:var(--brand-SubNav-width-subMenu);flex-direction:column;margin-block-start:var(--base-size-8);list-style:none;transition-property:opacity,transform;display:flex;position:absolute;transform:scale(.99)translateY(-.7em)translate(-8px)}.Primer_Brand__SubNav-module__SubNav__link--expanded___sbpQG .Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN{visibility:visible;opacity:1;transform:scale(1)translateY(0)translate(-8px)}.Primer_Brand__SubNav-module__SubNav__sub-menu-toggle___FvvL9{width:var(--base-size-24);height:var(--base-size-24);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0;margin-inline-end:calc(-1 * var(--base-size-8));padding:0;padding-inline-end:var(--base-size-8);display:inline-flex}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{display:block}.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after{opacity:1;transform:scale(0)}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{align-items:center;gap:var(--base-size-4);cursor:pointer;display:inline-flex;position:relative}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW>.Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding-inline-end:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{padding:var(--base-size-4) 0;position:relative}.Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);padding:0 var(--base-size-8) 0 0;gap:0}.Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN>.Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding:var(--base-size-4) 0 var(--base-size-4) var(--base-size-12)}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding:var(--base-size-12)}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){background-color:var(--brand-SubNav-color-link-bgColor);line-height:1.1em}@supports ((-moz-appearance:none)){.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]) .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{top:0}}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND .Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){padding-inline-end:var(--base-size-4)}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-4) var(--base-size-8) var(--base-size-4) var(--base-size-12);top:auto;top:initial;background-color:#0000}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__SubNav-module__SubNav__sub-menu-icon___XxnxY{fill:var(--brand-color-text-muted);transition:transform var(--brand-animation-duration-fast);display:inline-block!important}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW:not(.Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN) .Primer_Brand__SubNav-module__SubNav__sub-menu-icon___XxnxY{top:calc(-1 * var(--brand-borderWidth-thin));position:relative}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-inline:var(--base-size-32)}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{width:100%;min-height:var(--brand-SubNav-height-overflowMenuItemMin);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-SubNav-overflowMenu-fgColor-rest);white-space:normal;word-wrap:anywhere;border-radius:var(--brand-borderRadius-medium);background-color:var(--brand-SubNav-overflowMenu-bgColor-rest);display:block}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:inherit;font-weight:var(--base-text-weight-normal);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover,.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus,.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible,.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){color:var(--brand-SubNav-overflowMenu-fgColor-hover);background-color:var(--brand-SubNav-overflowMenu-bgColor-hover)}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible{box-shadow:inset 0 0 0 var(--brand-borderWidth-thick) var(--brand-color-focus);outline:none}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{background:0 0;padding:0;display:block}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW:after{content:none}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN{width:auto;background-color:var(--brand-SubNav-overflowMenu-bgColor-rest);visibility:visible;opacity:1;border:0;margin:0;padding:0;padding-inline-start:var(--base-size-16);position:static;transform:none}}@keyframes Primer_Brand__SubNav-module__fade-in___t8Rrr{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__SubNav-module__SubNav___dVoQu,.Primer_Brand__SubNav-module__SubNav___dVoQu:before,.Primer_Brand__SubNav-module__SubNav___dVoQu:after,.Primer_Brand__SubNav-module__SubNav___dVoQu *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root{--brand-SubNav-offset-overflowMenu:.25rem;--brand-SubNav-height-overflowMenuItemMin:2.5rem;--brand-SubNav-height-overflowMenuInset:8rem;--brand-SubNav-width-overflowMenuMin:10rem;--brand-SubNav-width-overflowMenuInset:2rem;--brand-SubNav-width-subMenu:18.75rem}:root,[data-color-mode=light]{--brand-SubNav-bgColor:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-rest:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-hover:var(--brand-color-canvas-subtle);--brand-SubNav-overflowMenu-fgColor-rest:var(--brand-color-text-muted);--brand-SubNav-overflowMenu-fgColor-hover:var(--brand-color-text-default);--brand-SubNav-overflowMenu-toggle-bgColor-rest:transparent;--brand-SubNav-overflowMenu-toggle-bgColor-hover:var(--base-color-scale-gray-1);--brand-SubNav-overflowMenu-toggle-bgColor-active:var(--base-color-scale-gray-1);--brand-SubNav-color-link-rest:var(--brand-color-text-default);--brand-SubNav-color-link-active:var(--brand-color-text-default);--brand-SubNav-color-link-bgColor:#e4ebe6;--brand-SubNav-shadow:0px 100px 80px #00000003, 0px 41px 33px #00000005, 0px 22px 17px #00000005, 0px 12px 10px #00000008, 0px 6px 5px #0000000a, 0px 2px 2px #00000012}[data-color-mode=dark]{--brand-SubNav-bgColor:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-rest:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-hover:var(--brand-color-canvas-subtle);--brand-SubNav-overflowMenu-fgColor-rest:var(--brand-color-text-muted);--brand-SubNav-overflowMenu-fgColor-hover:var(--brand-color-text-default);--brand-SubNav-overflowMenu-toggle-bgColor-rest:transparent;--brand-SubNav-overflowMenu-toggle-bgColor-hover:var(--base-color-scale-gray-6);--brand-SubNav-overflowMenu-toggle-bgColor-active:var(--base-color-scale-gray-6);--brand-SubNav-color-link-rest:var(--brand-color-text-default);--brand-SubNav-color-link-active:var(--brand-color-text-default);--brand-SubNav-color-link-bgColor:#323834;--brand-SubNav-shadow:0px 100px 80px #00000003, 0px 41px 33px #00000005, 0px 22px 17px #00000005, 0px 12px 10px #00000008, 0px 6px 5px #0000000a, 0px 2px 2px #00000012}:root,[data-color-mode=light]{--brand-NavList-activeIndicator-color:var(--brand-color-text-emphasized)}[data-color-mode=dark]{--brand-NavList-activeIndicator-color:var(--brand-color-accent-primary)}.Primer_Brand__NavList-module__NavList___U7Jyj{--brand-NavList-label-indent-level-2:0px;--brand-NavList-label-indent-level-3:var(--base-size-16);--brand-NavList-label-indent-level-4:var(--base-size-32);--brand-NavList-label-indent-level-5:var(--base-size-48);--brand-NavList-item-paddingInlineStart-base:var(--base-size-24);--brand-NavList-control-paddingInlineStart:var(--base-size-8);--brand-NavList-label-paddingInlineStart:var(--base-size-6);box-sizing:border-box;font-family:var(--brand-fontStack-sansSerif);color:var(--brand-color-text-default);width:100%;padding-inline-start:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__list___K5lSx,.Primer_Brand__NavList-module__NavList__subNav___DZ2GX,.Primer_Brand__NavList-module__NavList__groupList___ylfjF{margin:0;padding:0;list-style:none}.Primer_Brand__NavList-module__NavList__list___K5lSx{flex-direction:column;gap:0;display:flex}.Primer_Brand__NavList-module__NavList__list--flat___wuoKR,.Primer_Brand__NavList-module__NavList__groupList___ylfjF{--brand-NavList-item-paddingInlineStart-base:var(--base-size-2)}.Primer_Brand__NavList-module__NavList__groupList___ylfjF .Primer_Brand__NavList-module__NavList__subNav___DZ2GX .Primer_Brand__NavList-module__NavList__item--leaf___SN9hT{--brand-NavList-item-paddingInlineStart-base:0px;--brand-NavList-label-paddingInlineStart:var(--base-size-8)}.Primer_Brand__NavList-module__NavList__item___OceIg,.Primer_Brand__NavList-module__NavList__group___LANuQ{position:relative}.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__item___OceIg+.Primer_Brand__NavList-module__NavList__item___OceIg,.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__item___OceIg+.Primer_Brand__NavList-module__NavList__group___LANuQ,.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__group___LANuQ+.Primer_Brand__NavList-module__NavList__item___OceIg,.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__group___LANuQ+.Primer_Brand__NavList-module__NavList__group___LANuQ{background-image:repeating-linear-gradient(to right, var(--brand-color-border-muted) 0 var(--base-size-2), transparent var(--base-size-2) var(--base-size-4));background-repeat:no-repeat;background-size:100% var(--brand-borderWidth-thin);background-position:0 0}.Primer_Brand__NavList-module__NavList__groupTitle___Ios1h{padding:var(--base-size-24) var(--base-size-16) var(--base-size-16);color:var(--brand-color-text-default);font-size:var(--brand-text-size-200);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200);margin:0}.Primer_Brand__NavList-module__NavList__groupList___ylfjF{flex-direction:column;gap:0;padding-block-end:var(--base-size-16);display:flex}.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{align-items:center;gap:var(--base-size-8);min-width:0;display:flex}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{padding-block:calc(var(--base-size-8) + var(--base-size-2));padding-inline-end:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item--level-2___AEntj{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-2)}.Primer_Brand__NavList-module__NavList__item--level-3___yJC82{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-3)}.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-4)}.Primer_Brand__NavList-module__NavList__item--level-5___euPGq{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-5)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{min-height:var(--base-size-32);padding-block:0;padding-inline-end:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-5___euPGq>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{padding-inline-start:calc(var(--brand-NavList-item-paddingInlineStart-base) + var(--brand-NavList-item-label-indent))}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{padding-inline-start:var(--brand-NavList-control-paddingInlineStart)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{padding-inline-start:var(--brand-NavList-label-paddingInlineStart)}.Primer_Brand__NavList-module__NavList__link___lJiXk{align-items:center;gap:var(--base-size-8);border-radius:var(--brand-borderRadius-medium);min-width:0;color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default), color var(--brand-animation-duration-fast) var(--brand-animation-easing-default);flex:auto;padding:0;display:flex;position:relative;-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{box-sizing:border-box;width:100%;color:var(--brand-color-text-muted);cursor:pointer;text-align:start;background:0 0;border:0;font-family:inherit;position:relative}.Primer_Brand__NavList-module__NavList__link___lJiXk:hover{color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:hover{color:var(--brand-color-text-default);background-color:#0000}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{min-height:var(--base-size-32);order:2}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled):hover .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled){color:var(--brand-color-text-default)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:not(:disabled) .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__link___lJiXk:focus-visible,.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__NavList-module__NavList__subNav___DZ2GX .Primer_Brand__NavList-module__NavList__link___lJiXk:focus-visible,.Primer_Brand__NavList-module__NavList__subNav___DZ2GX .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:focus-visible{outline-offset:calc(-1 * var(--base-size-2))}.Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]){color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts) .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]):before{content:"";inset-block:var(--base-size-8);width:var(--base-size-4);border-radius:var(--base-size-2);background-color:var(--brand-NavList-activeIndicator-color);position:absolute;inset-inline-start:0}.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:not(:disabled):before{content:"";block-size:var(--base-size-16);width:var(--base-size-4);border-radius:var(--base-size-2);background-color:var(--brand-NavList-activeIndicator-color);z-index:1;position:absolute;inset-block-start:50%;transform:translateY(-50%)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:before{inset-inline-start:calc(-1 * var(--base-size-8))}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:before{inset-inline-start:var(--base-size-4)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]{padding-inline-start:var(--base-size-12)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false] .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{padding-inline-start:var(--base-size-2)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]){padding-inline-start:0}.Primer_Brand__NavList-module__NavList__link--disabled___gPpvz{color:var(--brand-color-text-disabled);pointer-events:none}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:disabled{color:var(--brand-color-text-disabled);cursor:not-allowed}.Primer_Brand__NavList-module__NavList__label___cZ4Jt{word-break:break-word;min-width:0}.Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{align-items:center;gap:var(--base-size-8);border-radius:var(--brand-borderRadius-small);flex:auto;min-width:0;display:flex}.Primer_Brand__NavList-module__NavList__leadingVisual___ToOHr,.Primer_Brand__NavList-module__NavList__trailingVisual___q6Uc4{color:inherit;flex:none;display:inline-flex}.Primer_Brand__NavList-module__NavList__trailingVisual___q6Uc4{margin-inline-start:auto;margin-inline-end:var(--base-size-6)}.Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{transform-origin:50%;transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);flex:none}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{transform:rotate(-180deg)}.Primer_Brand__NavList-module__NavList__subNav___DZ2GX{opacity:0;max-height:0;transform:translateY(calc(-1 * var(--base-size-8)));visibility:hidden;transition:max-height var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), visibility 0s linear var(--brand-animation-duration-fast);flex-direction:column;gap:0;margin:0;padding:0;display:flex;overflow:hidden}.Primer_Brand__NavList-module__NavList__subNav--expanded___Wu6L6{max-height:none;max-height:var(--brand-NavList-subNav-height,none);opacity:1;visibility:visible;transition:max-height var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), visibility 0s linear 0s;transform:translateY(0)}.Primer_Brand__NavList-module__NavList__subNav___DZ2GX[aria-hidden=true] .Primer_Brand__NavList-module__NavList__subNav___DZ2GX{visibility:hidden}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{padding:var(--base-size-24) var(--base-size-16) var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts.Primer_Brand__NavList-module__NavList__item--expanded___b3doz{padding-block-end:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{font-size:var(--brand-text-size-200);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-200);order:1}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{color:var(--brand-color-text-default);min-height:var(--base-size-32);margin-block:calc(-1 * var(--base-size-8));border-radius:var(--brand-borderRadius-small);padding-inline-start:0;padding-inline-end:var(--base-size-6)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C>*{z-index:1;position:relative}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled):hover:after,.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled):active:after,.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:not(:disabled):after{content:"";z-index:0;border-radius:var(--brand-borderRadius-small);background-color:var(--brand-color-canvas-subtle);pointer-events:none;position:absolute;inset-block:0;inset-inline:0}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{order:2;margin-inline-start:auto}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{order:1}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{min-height:var(--base-size-32);margin-block:calc(-1 * var(--base-size-8));border-radius:var(--brand-borderRadius-small)}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{position:absolute;inset-block-start:50%;inset-inline-start:calc(-1 * var(--brand-NavList-control-paddingInlineStart));transform:translateY(-50%)}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{transform:translateY(-50%)rotate(-180deg)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{inset-inline-start:calc(-1 * var(--base-size-16))}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-5___euPGq>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);order:2}.Primer_Brand__NavList-module__NavList__list--flat___wuoKR>.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{min-height:var(--base-size-32);border-radius:var(--brand-borderRadius-small)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{min-height:calc(var(--base-size-32) - var(--brand-borderWidth-thin));margin-block-end:var(--brand-borderWidth-thin)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts) .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]){background-color:#0000}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk:hover .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6,.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts) .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]) .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk:hover{background-color:#0000}[data-color-mode=dark] .Primer_Brand__NavList-module__NavList___U7Jyj{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-reduced-motion:reduce){.Primer_Brand__NavList-module__NavList___U7Jyj,.Primer_Brand__NavList-module__NavList___U7Jyj:before,.Primer_Brand__NavList-module__NavList___U7Jyj:after,.Primer_Brand__NavList-module__NavList___U7Jyj *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root{--brand-IDE-height:50rem}:root,[data-color-mode=light]{--brand-IDE-default-bgColor:var(--base-color-scale-gray-1);--brand-IDE-default-editor-bgColor:var(--base-color-scale-white-0);--brand-IDE-default-editor-tabs-bgColor:var(--base-color-scale-gray-0);--brand-IDE-default-editor-tab-bgColor-rest:var(--base-color-scale-gray-0);--brand-IDE-default-editor-tab-bgColor-active:var(--base-color-scale-white-0);--brand-IDE-default-editor-tab-borderColor:var(--base-color-scale-blue-5);--brand-IDE-glass-bgColor-rest:#ffffffd9;--brand-IDE-glass-chat-bgColor:#ffffff0f;--brand-IDE-glass-editor-bgColor:#ffffff0f;--brand-IDE-glass-editor-tabs-bgColor:transparent;--brand-IDE-glass-editor-tab-bgColor-rest:#ffffff1a;--brand-IDE-glass-editor-tab-bgColor-active:#ffffff0f;--brand-IDE-borderColor:var(--brand-color-border-muted);--brand-IDE-autoSuggest-bgColor:#0969da;--brand-IDE-autoSuggest-fgColor:var(--base-color-scale-white-0);--brand-IDE-autoSuggest-borderColor:var(--base-color-scale-blue-5);--brand-IDE-autoSuggestLine-bgColor:var(--base-color-scale-blue-0);--brand-IDE-scrollBar-bgColor:transparent;--brand-IDE-scrollBar-fgColor:var(--base-color-scale-gray-2);--brand-IDE-playPauseControl-rest:var(--base-color-scale-gray-2);--brand-IDE-playPauseControl-hover:var(--base-color-scale-gray-3)}[data-color-mode=dark]{--brand-IDE-default-bgColor:#131337;--brand-IDE-default-editor-bgColor:#242538;--brand-IDE-default-editor-tabs-bgColor:linear-gradient(0deg, #0038ff05 0%, #0038ff05 100%), #17182c;--brand-IDE-default-editor-tab-bgColor-rest:#24253880;--brand-IDE-default-editor-tab-bgColor-active:#242538;--brand-IDE-default-editor-tab-borderColor:var(--base-color-scale-blue-5);--brand-IDE-glass-bgColor-rest:#000000b3;--brand-IDE-glass-chat-bgColor:#0000000f;--brand-IDE-glass-editor-bgColor:#242538c4;--brand-IDE-glass-editor-tabs-bgColor:transparent;--brand-IDE-glass-editor-tab-bgColor-rest:#24253880;--brand-IDE-glass-editor-tab-bgColor-active:#242538c4;--brand-IDE-borderColor:#171d22;--brand-IDE-autoSuggest-bgColor:#0969da;--brand-IDE-autoSuggest-fgColor:var(--base-color-scale-white-0);--brand-IDE-autoSuggest-borderColor:var(--base-color-scale-blue-5);--brand-IDE-autoSuggestLine-bgColor:var(--base-color-scale-blue-9);--brand-IDE-scrollBar-bgColor:transparent;--brand-IDE-scrollBar-fgColor:var(--base-color-scale-gray-5);--brand-IDE-playPauseControl-rest:#4d4e6a;--brand-IDE-playPauseControl-hover:#5a5b7c}.Primer_Brand__IDE-module__IDE__inner___C7yFe{--brand-IDE-lineNumber-width:45px;background:var(--brand-IDE-default-bgColor);border:var(--brand-borderWidth-thin) solid var(--brand-IDE-borderColor)}.Primer_Brand__IDE-module__IDE--glass___uVNlv{-webkit-backdrop-filter:blur(var(--base-size-12));backdrop-filter:blur(var(--base-size-12))}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__inner___C7yFe{background:var(--brand-IDE-glass-bgColor-rest);border-color:#0000!important}.Primer_Brand__IDE-module__IDE__main___UBKnG{width:100%;height:100%;display:flex}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__main___UBKnG{height:var(--brand-IDE-height)}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__main___UBKnG{padding-top:var(--base-size-32)}.Primer_Brand__IDE-module__IDE__inner___C7yFe{width:100%;height:var(--brand-IDE-height);margin:calc(var(--base-size-12) - 2px) auto;border-radius:var(--brand-borderRadius-large);position:relative;overflow:hidden}.Primer_Brand__IDE-module__IDE__Chat___w081c{grid-gap:var(--base-size-16);gap:var(--base-size-16);color:var(--brand-color-text-default);flex-direction:column;grid-area:pane;width:100%;height:100%;display:flex;position:relative;overflow:hidden}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Chat___w081c{background:var(--brand-IDE-glass-chat-bgColor)}.Primer_Brand__IDE-module__IDE--full-exp___QszuK .Primer_Brand__IDE-module__IDE__Chat___w081c{min-width:300px;max-width:450px}@media screen and (width<=63.24rem){.Primer_Brand__IDE-module__IDE--full-exp___QszuK .Primer_Brand__IDE-module__IDE__Chat___w081c{display:none}}.Primer_Brand__IDE-module__IDE__Chat-wrapper___chroS{display:contents}.Primer_Brand__IDE-module__IDE__Chat-message-user___AhfYF{gap:var(--base-size-8);align-items:center;display:inline-flex}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_{scrollbar-width:thin;scrollbar-color:var(--brand-IDE-scrollBar-fgColor) var(--brand-IDE-scrollBar-bgColor);height:calc(100% - 78px);overflow-y:scroll}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_::-webkit-scrollbar{width:var(--base-size-12)}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_::-webkit-scrollbar-track{background:var(--brand-IDE-scrollBar-bgColor)}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_::-webkit-scrollbar-thumb{background-color:var(--brand-IDE-scrollBar-fgColor);border-radius:var(--base-size-20);border:var(--brand-borderRadius-small) solid var(--brand-IDE-scrollBar-bgColor)}.Primer_Brand__IDE-module__IDE__Chat-input-area___OJkxC{bottom:var(--base-size-16);width:100%;padding:0 var(--base-size-20);opacity:.5;position:absolute}.Primer_Brand__IDE-module__IDE__Chat-input___XXUIS{border-color:var(--brand-color-border-default);background:var(--brand-IDE-default-bgColor)!important;color:var(--brand-color-text-muted)!important;-webkit-text-fill-color:var(--brand-color-text-muted)!important}.Primer_Brand__IDE-module__IDE__Chat-input-area___OJkxC svg{fill:var(--brand-color-text-muted)}.Primer_Brand__IDE-module__IDE__Chat-message-content___yFYul{margin-top:var(--base-size-16)}.Primer_Brand__IDE-module__IDE__Chat-message-snippet___DAl6x{background-color:var(--brand-IDE-default-editor-bgColor);overflow-x:hidden}.Primer_Brand__IDE-module__IDE__Chat-message___LMwct{font-family:var(--brand-fontStack-sansSerif);font-size:var(--base-size-16);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding:var(--base-size-20);opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__IDE-module__IDE__Chat-message--visible___hq0hB{opacity:1;transform:translateY(0)}.Primer_Brand__IDE-module__IDE__Chat-message--faded___Mj7EF{opacity:.5}.Primer_Brand__IDE-module__IDE__Chat-message___LMwct pre{border:var(--brand-borderWidth-thick) solid var(--brand-color-border-default);padding:var(--base-size-16);border-radius:var(--brand-borderRadius-large);font-family:var(--brand-fontStack-monospace);font-size:calc(var(--base-size-12) + 2px)!important}.Primer_Brand__IDE-module__IDE__Editor___MkJjR{flex-direction:column;grid-area:editor;width:100%;height:100%;display:flex}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor___MkJjR{width:100%;padding-left:var(--base-size-20)}.Primer_Brand__IDE-module__IDE__Editor-tabs___zFwQA{background:var(--brand-IDE-default-editor-tabs-bgColor);display:inline-flex;overflow-x:auto}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-tabs___zFwQA{background:var(--brand-IDE-default-editor-tabs-bgColor)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tabs___zFwQA{background:var(--brand-IDE-glass-editor-tabs-bgColor)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{padding:var(--base-size-8) var(--base-size-12);align-items:center;gap:var(--base-size-4);font:inherit;font-family:var(--brand-fontStack-monospace);font-size:calc(var(--base-size-12) + 2px);color:var(--brand-color-text-muted);cursor:pointer;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default);opacity:1;border:none;flex-shrink:0;display:flex}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{background:var(--brand-IDE-default-editor-tab-bgColor-rest)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{background:var(--brand-IDE-glass-editor-tab-bgColor-rest)}.Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{color:var(--brand-color-text-default);border-top:var(--brand-borderWidth-thin) solid var(--brand-IDE-default-editor-tab-borderColor);z-index:1}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{background:var(--brand-IDE-default-editor-tab-bgColor-active)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{color:var(--brand-color-text-muted);background:0 0}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{color:var(--brand-color-text-default);background:var(--brand-IDE-glass-editor-tab-bgColor-active)}.Primer_Brand__IDE-module__IDE--full-exp___QszuK.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{background:var(--brand-IDE-default-editor-bgColor)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ:hover{color:var(--brand-color-text-default)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ[disabled]{cursor:not-allowed;opacity:.7;color:var(--brand-color-text-muted)!important}.Primer_Brand__IDE-module__IDE__Editor-tab-close-icon___jxo0b{width:var(--base-size-12);height:var(--base-size-12);fill:var(--brand-color-text-muted);margin-inline-start:var(--base-size-4)}img.Primer_Brand__IDE-module__IDE__Editor-tab-icon___IyrSp{width:var(--base-size-16);height:var(--base-size-16);filter:grayscale(10%)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ:hover .Primer_Brand__IDE-module__IDE__Editor-tab-close-icon___jxo0b{fill:var(--brand-color-text-default)}.Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{height:100%;padding-top:var(--base-size-16);overflow-x:auto}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{background:var(--brand-IDE-default-editor-bgColor)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{background:var(--brand-IDE-glass-editor-bgColor);border-bottom-left-radius:var(--brand-borderRadius-large)}.Primer_Brand__IDE-module__IDE--full-exp___QszuK.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{background:var(--brand-IDE-default-editor-bgColor)}.Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs{margin:0}.Primer_Brand__IDE-module__IDE__Editor-content-wrapper___gb9HC{display:flex}.Primer_Brand__IDE-module__IDE__Editor-content-inner___HAje_{flex:1}.Primer_Brand__IDE-module__IDE__Editor--small____cDnd .Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs,.Primer_Brand__IDE-module__IDE__Editor--small____cDnd .Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{font-size:calc(var(--base-size-12) - 1px)!important;line-height:calc(var(--base-size-16) + 2px)!important}.Primer_Brand__IDE-module__IDE__Editor--medium___Nihdg .Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs,.Primer_Brand__IDE-module__IDE__Editor--medium___Nihdg .Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{font-size:.875rem!important;line-height:19.9px!important}.Primer_Brand__IDE-module__IDE__Editor--large___YlfAf .Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs,.Primer_Brand__IDE-module__IDE__Editor--large___YlfAf .Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{font-size:1.125rem!important;line-height:var(--base-size-24)!important}.Primer_Brand__IDE-module__IDE__Editor-pane--suggested___IXAF0{margin-left:calc(-1 * var(--brand-IDE-lineNumber-width));background-color:var(--brand-IDE-autoSuggestLine-bgColor);border-left:var(--brand-borderWidth-thin) solid var(--brand-IDE-autoSuggest-borderColor);padding-left:calc(var(--base-size-64) - 1px)!important}.Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{z-index:1;font-family:var(--brand-fontStack-monospace);font-weight:var(--brand-text-weight-200);font-feature-settings:"liga" 0, "calt" 0;font-variation-settings:normal;letter-spacing:0;flex:0 0 var(--brand-IDE-lineNumber-width)}.Primer_Brand__IDE-module__IDE__Editor-lineNumber___vSZSt{padding:0 var(--base-size-8);text-align:right;color:var(--brand-color-text-muted);-webkit-user-select:none;user-select:none;cursor:default;white-space:nowrap;text-overflow:ellipsis;display:block;position:relative;overflow:hidden}.Primer_Brand__IDE-module__IDE__Editor-lineNumber-text___Ws1Hq{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-align:right;vertical-align:middle;box-sizing:border-box;cursor:default;height:100%;display:inline-block;position:absolute}.Primer_Brand__IDE-module__IDE__Editor___MkJjR pre{color:var(--brand-color-text-default);font-family:var(--brand-fontStack-monospace);padding-left:calc(var(--base-size-64) - var(--brand-IDE-lineNumber-width))}pre.Primer_Brand__IDE-module__IDE__Chat-copilot-indicator___FhoZe{background-color:var(--brand-IDE-autoSuggest-bgColor);padding-left:0;padding:var(--base-size-8) var(--base-size-24);border-radius:var(--brand-borderRadius-small);gap:var(--base-size-16);margin:var(--base-size-4) 0 0 var(--base-size-16);display:inline-flex;box-shadow:-9px 10px 39px #00000040}.Primer_Brand__IDE-module__IDE__Chat-copilot-indicator-label___IWynN{color:var(--brand-IDE-autoSuggest-fgColor);fill:var(--brand-IDE-autoSuggest-fgColor)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP{cursor:pointer;bottom:var(--base-size-16);right:var(--base-size-16);width:var(--base-size-48);height:var(--base-size-48);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-IDE-playPauseControl-rest);transition:background-color var(--brand-animation-duration-faster);border:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex;position:absolute}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP:hover{background-color:var(--brand-IDE-playPauseControl-hover)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP svg{width:var(--base-size-16);height:var(--base-size-16)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP path{fill:var(--brand-button-subtle-fgColor-rest)}.Primer_Brand__IDE-module__IDE--chat-only___GsGvX .Primer_Brand__IDE-module__IDE__Chat-input-area___OJkxC{width:calc(100% - var(--base-size-64))}.Primer_Brand__IDE-module__IDE--chat-only___GsGvX .Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP{background-color:var(--brand-IDE-playPauseControl-rest)}.Primer_Brand__IDE-module__IDE--chat-only___GsGvX .Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP:hover{background-color:var(--brand-IDE-playPauseControl-hover)}@media (prefers-reduced-motion:reduce){.Primer_Brand__IDE-module__IDE___QDJIE,.Primer_Brand__IDE-module__IDE___QDJIE:before,.Primer_Brand__IDE-module__IDE___QDJIE:after,.Primer_Brand__IDE-module__IDE___QDJIE *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-breadcrumbs-separator-borderColor:var(--base-color-scale-gray-6)}[data-color-mode=dark]{--brand-breadcrumbs-separator-borderColor:var(--base-color-scale-gray-1)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs___ANvyl{font-family:var(--brand-fontStack-sansSerif);justify-content:space-between;display:flex}@media screen and (width<=63.25rem){.Primer_Brand__Breadcrumbs-module__Breadcrumbs___ANvyl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.Primer_Brand__Breadcrumbs-module__Breadcrumbs--default___q2JxW{--brand-InlineLink-color-rest:var(--brand-color-text-default);--brand-InlineLink-color-pressed:var(--brand-color-text-default)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__list___S1xLw{margin:0;padding-inline-start:0}@media screen and (width<=63.25rem){.Primer_Brand__Breadcrumbs-module__Breadcrumbs__list___S1xLw{display:inline-flex}}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P{white-space:nowrap;list-style:none;display:inline-block}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P:after{content:"";height:.8em;margin:0 var(--base-size-12);border-right:var(--brand-borderWidth-thin) solid var(--brand-breadcrumbs-separator-borderColor);display:inline-block;transform:rotate(15deg)translateY(.0625em)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P:first-child{margin-left:0}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P:last-child:after{content:none}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd{font-size:var(--brand-text-size-100);-webkit-text-decoration:none;text-decoration:none;display:inline-block}@media screen and (width<=63.25rem){.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd{white-space:nowrap}}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd:hover,.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd:focus{-webkit-text-decoration:underline;text-decoration:underline}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link--selected___zP0bj{color:var(--brand-color-text-default);pointer-events:none;font-weight:inherit;letter-spacing:inherit}.Primer_Brand__Breadcrumbs-module__Breadcrumbs--default___q2JxW .Primer_Brand__Breadcrumbs-module__Breadcrumbs__link--selected___zP0bj{color:var(--brand-color-text-muted)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link--selected___zP0bj:focus{-webkit-text-decoration:none;text-decoration:none}:root{--brand-Section-variant-gridline-paddingInline:var(--base-size-20);--brand-Section-container-maxWidth:80rem;--brand-Section-padding-spacious:var(--base-size-64);--brand-Section-padding-normal:var(--base-size-48);--brand-Section-padding-condensed:var(--base-size-16)}@media (width>=768px){:root{--brand-Section-variant-gridline-paddingInline:var(--base-size-40);--brand-Section-padding-spacious:var(--base-size-80);--brand-Section-padding-normal:var(--base-size-64);--brand-Section-padding-condensed:var(--base-size-32)}}@media (width>=1024px){:root{--brand-Section-padding-spacious:var(--base-size-128);--brand-Section-padding-normal:var(--base-size-96);--brand-Section-padding-condensed:var(--base-size-48)}}@media (width>=1280px){:root{--brand-Section-variant-gridline-paddingInline:var(--base-size-64)}}.Primer_Brand__Section-module__Section___wNnZR{--rounded-padding-overlap-adjustment:0px;--rounded-radius:var(--brand-borderRadius-xlarge);--padding-block-start:var(--brand-Section-padding-normal);--padding-block-end:var(--brand-Section-padding-normal);--adjusted-padding-block-end:calc(var(--padding-block-end) + var(--rounded-padding-overlap-adjustment));background-repeat:no-repeat;background-color:var(--brand-Section-narrow-background-color,var(--brand-Section-background-color));background-image:var(--brand-Section-narrow-background-image-src,var(--brand-Section-background-image-src));background-size:var(--brand-Section-narrow-background-image-size,var(--brand-Section-background-image-size));background-position:50%;background-position:var(--brand-Section-narrow-background-image-position,var(--brand-Section-background-image-position,center));padding-block-start:var(--padding-block-start);padding-block-end:var(--adjusted-padding-block-end)}.Primer_Brand__Section-module__Section__container___irc5A{width:100%;max-width:var(--brand-Section-container-maxWidth);margin-inline:auto}.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7{max-width:none}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A{padding-inline:var(--brand-Section-variant-gridline-paddingInline)}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container--fullWidth___LwJV7{padding-inline:0}.Primer_Brand__Section-module__Section___wNnZR.Primer_Brand__Section-module__Section--variant-gridline___ULwen:after{bottom:calc(-1 * var(--brand-borderWidth-thin))}.Primer_Brand__Section-module__Section--rounded___y86mS{border-radius:var(--rounded-radius) var(--rounded-radius) 0 0;margin-top:calc(-1 * var(--rounded-radius))}.Primer_Brand__Section-module__Section___wNnZR:has(+.Primer_Brand__Section-module__Section--rounded___y86mS){--rounded-padding-overlap-adjustment:var(--rounded-radius)}.Primer_Brand__Section-module__Section--paddingBlockStart-none___q_KT1,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-none___VKaUr{--padding-block-start:0}.Primer_Brand__Section-module__Section--paddingBlockStart-condensed___jXPMP,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-condensed___MM1ai{--padding-block-start:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section--paddingBlockStart-normal___okSnn,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-normal___EIj1h{--padding-block-start:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section--paddingBlockStart-spacious___Dbzh2,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-spacious___r_4fG{--padding-block-start:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section--paddingBlockEnd-none___OPMCW,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-none___PaxIA{--padding-block-end:0px}.Primer_Brand__Section-module__Section--paddingBlockEnd-condensed___Iq2bF,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-condensed___Nmq0F{--padding-block-end:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section--paddingBlockEnd-normal___wlGa4,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-normal___aMtgm{--padding-block-end:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section--paddingBlockEnd-spacious___BFFzY,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-spacious___LGxf3{--padding-block-end:var(--brand-Section-padding-spacious)}@media screen and (width>=48rem){.Primer_Brand__Section-module__Section___wNnZR{background-color:var(--brand-Section-regular-background-color,var(--brand-Section-background-color));background-image:var(--brand-Section-regular-background-image-src,var(--brand-Section-background-image-src));background-size:var(--brand-Section-regular-background-image-size,var(--brand-Section-background-image-size));background-position:var(--brand-Section-regular-background-image-position,var(--brand-Section-background-image-position))}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-none___HgDah{--padding-block-start:0}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-condensed___JTztM{--padding-block-start:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-normal___JTsVr{--padding-block-start:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-spacious___q_eWC{--padding-block-start:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-none___lPDsS{--padding-block-end:0px}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-condensed___uRtvc{--padding-block-end:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-normal___gtZb4{--padding-block-end:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-spacious___SalhC{--padding-block-end:var(--brand-Section-padding-spacious)}}@media screen and (width>=80rem){.Primer_Brand__Section-module__Section___wNnZR{background-color:var(--brand-Section-wide-background-color,var(--brand-Section-background-color));background-image:var(--brand-Section-wide-background-image-src,var(--brand-Section-background-image-src));background-size:var(--brand-Section-wide-background-image-size,var(--brand-Section-background-image-size));background-position:var(--brand-Section-wide-background-image-position,var(--brand-Section-background-image-position))}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-none___aIgHE{--padding-block-start:0}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-condensed___daJpd{--padding-block-start:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-normal___J4uxA{--padding-block-start:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-spacious___wje1J{--padding-block-start:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-none___FjpEH{--padding-block-end:0px}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-condensed___Lijsj{--padding-block-end:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-normal___u9c2A{--padding-block-end:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-spacious___zMr50{--padding-block-end:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7){border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);position:relative}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):before,.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):after{content:"";width:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-muted);pointer-events:none;position:absolute;inset-block-start:calc(-1 * var(--padding-block-start));inset-block-end:calc(-1 * var(--adjusted-padding-block-end))}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):before{inset-inline-start:calc(-1 * var(--brand-borderWidth-thin))}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):after{inset-inline-end:calc(-1 * var(--brand-borderWidth-thin))}}:root{--brand-Statistic-spacing-spacious:2rem;--brand-Statistic-spacing-normal:1.5rem;--brand-Statistic-spacing-condensed:1rem}.Primer_Brand__Statistic-module__Statistic___sB6bA img,.Primer_Brand__Statistic-module__Statistic___sB6bA picture{display:block}.Primer_Brand__Statistic-module__Statistic--variant-boxed___X9IAB{background-color:var(--brand-color-canvas-subtle);border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Statistic-module__Statistic--variant-boxed___X9IAB,.Primer_Brand__Statistic-module__Statistic--variant-boxed___X9IAB.Primer_Brand__Statistic-module__Statistic--padding-none___mZRAE{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--padding-none___mZRAE{padding:0}.Primer_Brand__Statistic-module__Statistic--padding-condensed___JhuYL{padding:var(--brand-Statistic-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--padding-normal___JcofR{padding:var(--brand-Statistic-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--padding-spacious___njBos{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-condensed___MWqsG{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-normal___yCtE0{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-spacious___iSeZl{padding:var(--base-size-32)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-none___D1xJU{padding:0}@media screen and (width>=48rem){.Primer_Brand__Statistic-module__Statistic--regular-padding-condensed___kJuH6{padding:var(--brand-Statistic-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--regular-padding-normal___UZq0p{padding:var(--brand-Statistic-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--regular-padding-spacious___MODDU{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--regular-padding-none___fR2Ho{padding:0}}@media screen and (width>=80rem){.Primer_Brand__Statistic-module__Statistic--wide-padding-condensed___KVY9L{padding:var(--brand-Statistic-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--wide-padding-normal___WJhTd{padding:var(--brand-Statistic-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--wide-padding-spacious___cnjbs{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--wide-padding-none____fUci{padding:0}}.Primer_Brand__Statistic-module__Statistic__heading___xQ8Ki{position:relative}.Primer_Brand__Statistic-module__Statistic__heading___xQ8Ki sup{font-size:var(--brand-text-size-100);line-height:0;font-weight:var(--brand-text-weight-100);vertical-align:top;top:var(--base-size-6);font-stretch:100%;position:relative}.Primer_Brand__Statistic-module__Statistic__heading___xQ8Ki sup a{padding:var(--base-size-4);line-height:1;display:inline-block}.Primer_Brand__Statistic-module__Statistic__description--accent___wZsb5{color:var(--brand-color-accent-primary)}.Primer_Brand__Statistic-module__Statistic__description___I2lpL{margin-block-start:var(--base-size-8);font-stretch:100%;display:block;position:relative}.Primer_Brand__Statistic-module__Statistic__description___I2lpL sup{font-size:var(--brand-text-size-100);vertical-align:top;line-height:0;position:relative;top:0}.Primer_Brand__Statistic-module__Statistic__description___I2lpL sup a{padding:var(--base-size-4);line-height:1;display:inline-block}.Primer_Brand__BreakoutBanner-module__BreakoutBanner___OholM{max-width:var(--brand-breakpoint-xlarge);border-radius:var(--brand-borderRadius-large);background-repeat:no-repeat;background-color:var(--brand-BreakoutBanner-narrow-background-color,var(--brand-BreakoutBanner-background-color));background-image:var(--brand-BreakoutBanner-narrow-background-image-src,var(--brand-BreakoutBanner-background-image-src));background-size:var(--brand-BreakoutBanner-narrow-background-image-size,var(--brand-BreakoutBanner-background-image-size));background-position:50%;background-position:var(--brand-BreakoutBanner-narrow-background-image-position,var(--brand-BreakoutBanner-background-image-position,center));width:100%;margin:0 auto;display:flex;position:relative}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-container___X145s{border-radius:var(--brand-borderRadius-xlarge);padding:var(--base-size-40) var(--base-size-24) var(--base-size-128);z-index:1;box-sizing:border-box;width:100%}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-content___WPxKC{flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-container--background___i0tOy{background:var(--brand-BreakoutBanner-bgColor)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-content--center___mDWpD{text-align:center;align-items:center}.Primer_Brand__BreakoutBanner-module__BreakoutBanner__heading___mnzmT{max-width:20ch}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-description___xrWUJ{max-width:54ch;margin-block-start:var(--base-size-16)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-linkGroup___s8PUk{margin-block-start:var(--base-size-48)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-leadingVisual___lIc6l{margin-block-end:var(--base-size-48)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-leadingVisual___lIc6l img,.Primer_Brand__BreakoutBanner-module__BreakoutBanner-leadingVisual___lIc6l picture{display:block}@media screen and (width>=48rem){.Primer_Brand__BreakoutBanner-module__BreakoutBanner___OholM{background-color:var(--brand-BreakoutBanner-regular-background-color,var(--brand-BreakoutBanner-background-color));background-image:var(--brand-BreakoutBanner-regular-background-image-src,var(--brand-BreakoutBanner-background-image-src));background-size:var(--brand-BreakoutBanner-regular-background-image-size,var(--brand-BreakoutBanner-background-image-size));background-position:var(--brand-BreakoutBanner-regular-background-image-position,var(--brand-BreakoutBanner-background-image-position))}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-container___X145s{padding:var(--base-size-48)}}@media screen and (width>=80rem){.Primer_Brand__BreakoutBanner-module__BreakoutBanner___OholM{background-color:var(--brand-BreakoutBanner-wide-background-color,var(--brand-BreakoutBanner-background-color));background-image:var(--brand-BreakoutBanner-wide-background-image-src,var(--brand-BreakoutBanner-background-image-src));background-size:var(--brand-BreakoutBanner-wide-background-image-size,var(--brand-BreakoutBanner-background-image-size));background-position:var(--brand-BreakoutBanner-wide-background-image-position,var(--brand-BreakoutBanner-background-image-position))}}.Primer_Brand__Footnotes-module__Footnotes___EvN5V{padding-block:var(--base-size-80);gap:var(--base-size-12);flex-direction:column;display:flex}.Primer_Brand__Footnotes-module__Footnotes--variant-citations___bUHtk{font-family:var(--brand-body-fontFamily);font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100);color:var(--brand-color-text-muted);margin:0;padding-inline-start:var(--base-size-16)}.Primer_Brand__Footnotes-module__Footnotes--variant-citations___bUHtk .Primer_Brand__Footnotes-module__FootnotesItem___QQCwY{padding-inline-start:var(--base-size-12)}.Primer_Brand__Footnotes-module__FootnotesItem___QQCwY{scroll-margin-top:80px}.Primer_Brand__Footnotes-module__FootnotesItem__citationIcon___HeITw{margin-inline-start:var(--base-size-4);transform:scaleY(-1)}.Primer_Brand__Footnotes-module__FootnotesItem__citationText___s2efV{gap:var(--base-size-4);display:inline}:root{--brand-FrostedGlassVFX-blurIntensity-high:var(--base-size-80);--brand-FrostedGlassVFX-blurIntensity-medium:var(--base-size-48);--brand-FrostedGlassVFX-blurIntensity-low:var(--base-size-12)}:root,[data-color-mode=light]{--brand-FrostedGlassVFX-bgColor:#ffffffb3;--brand-FrostedGlassVFX-boxShadow:0 4px 10px 0 #00000005;--brand-FrostedGlassVFX-borderMask:linear-gradient(to bottom, #d8dee480, #d8dee45e 100%)}[data-color-mode=dark]{--brand-FrostedGlassVFX-bgColor:#9c9c9c1a;--brand-FrostedGlassVFX-boxShadow:0 4px 10px 0 #00000005;--brand-FrostedGlassVFX-borderMask:linear-gradient(#000 0, #000 0) exclude, linear-gradient(#000 0, #000 0) content-box}@supports (background:linear-gradient(red 0%, red 0% 1%, red 2%)){[data-color-mode=dark]{--brand-FrostedGlassVFX-borderMask:linear-gradient(#000 0 0) exclude, linear-gradient(#000 0 0) content-box}}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ{background-color:var(--brand-FrostedGlassVFX-bgColor);position:relative}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--rounded-corners___V4gcI{border-radius:var(--brand-borderRadius-xlarge)}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--intensity-low___a87yo{-webkit-backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-low));backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-low))}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--intensity-medium___z1VQ1{-webkit-backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-medium));backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-medium))}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--intensity-high___kUSHI{-webkit-backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-high));backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-high))}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ:before{content:"";z-index:-1;padding:var(--brand-borderWidth-thin);background:var(--brand-FrostedGlassVFX-borderMask);-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0), linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;-webkit-mask-composite:xor;-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0), linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;-webkit-mask-composite:xor;-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;-webkit-mask-composite:xor;position:absolute;inset:0}@supports (background:linear-gradient(red 0%, red 0% 1%, red 2%)){.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ:before{-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0 0), linear-gradient(var(--base-color-scale-black-0) 0 0) content-box;-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0 0) content-box;mask:linear-gradient(var(--base-color-scale-black-0) 0 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0 0) content-box}}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--rounded-corners___V4gcI:before{border-radius:var(--brand-borderRadius-xlarge)}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ>*{background-color:#0000}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ>*,.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ>:before{border-color:#0000}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked___ngJ17{--brand-Grid-spacing-row:var(--base-size-64)}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked___ngJ17{max-width:618px;margin-inline:auto}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked___ngJ17.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{padding-inline:var(--base-size-32);padding-block:calc(var(--base-size-64) - var(--base-size-4));--SectionIntroStacked-item-divider-overflow-start:var(--base-size-32);--SectionIntroStacked-item-divider-overflow-end:var(--base-size-32)}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{padding-inline:var(--base-size-24);padding-block:var(--base-size-32);--SectionIntroStacked-item-divider-overflow-start:var(--base-size-24);--SectionIntroStacked-item-divider-overflow-end:var(--base-size-24);position:relative}@media screen and (width>=63.25rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{padding-inline:var(--base-size-64);padding-block:var(--base-size-64);--SectionIntroStacked-item-divider-overflow-start:0px;--SectionIntroStacked-item-divider-overflow-end:var(--base-size-64)}}@media screen and (width>=80rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading--muted___CHRqJ,.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__item-text--muted___iWmQS{color:var(--brand-color-text-muted)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading--muted___CHRqJ em,.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading--muted___CHRqJ b,.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__item-text___5DHtq em,.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__item-text___5DHtq b{color:var(--brand-color-text-default);font-style:normal;font-weight:var(--base-text-weight-normal)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--full-width___kRyw0 .Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading___tolwP{max-width:none}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-description___zSilb{max-width:50ch;margin-block-start:var(--base-size-16)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-link___Y2Sox{margin-block-start:var(--base-size-16)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}@media screen and (width<=63.24rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading___tolwP{font-size:var(--brand-text-size-600)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{overflow:hidden}}@media screen and (width>=63.25rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{top:var(--base-size-2);position:relative}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);margin-block:calc(-1 * var(--base-size-64));padding-block:calc(var(--base-size-64) - var(--base-size-32));position:static;top:auto}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-content___ULK2q{padding-inline-end:var(--base-size-80)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD{padding-inline-start:var(--base-size-64)}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD{border-block-end:none;position:relative}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:first-child{padding-block-start:var(--base-size-40)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:last-child{padding-block-end:var(--base-size-40)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:not(:last-child):after{content:"";bottom:0;left:calc(-1 * var(--SectionIntroStacked-item-divider-overflow-start));right:calc(-1 * var(--SectionIntroStacked-item-divider-overflow-end));border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);position:absolute}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD{padding-block:var(--base-size-40);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:last-child{border-block-end:none;padding-block-end:0}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:first-child{padding-block-start:0}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item--with-icon___Ej53Q{align-items:flex-start;gap:var(--base-size-24);flex-direction:column;display:flex}@media screen and (width>=48rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item--with-icon___Ej53Q{gap:var(--base-size-48);flex-direction:row}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__content___TdGFS{gap:var(--base-size-12);flex-direction:column;flex:1;min-width:0;display:flex}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__icon___TUK4t{border-radius:var(--base-size-12);flex-shrink:0}:root{--brand-Tabs-container-padding:var(--base-size-4)}:root,[data-color-mode=light]{--brand-Tabs-item-accent-bgColor-rest:var(--base-color-scale-green-6);--brand-Tabs-item-accent-fgColor-rest:var(--base-color-scale-white-0);--brand-Tabs-item-default-bgColor-active:linear-gradient(180deg, #ffffff1f 0%, #9999991f 100%);--brand-Tabs-item-default-borderColor-active:var(--brand-color-border-default);--brand-Tabs-item-underline-rest:var(--base-color-scale-black-0);--brand-Tabs-list-borderWidth-active:var(--brand-borderWidth-thin)}[data-color-mode=dark]{--brand-Tabs-item-accent-bgColor-rest:var(--base-color-scale-green-5);--brand-Tabs-item-accent-fgColor-rest:var(--base-color-scale-white-0);--brand-Tabs-item-default-bgColor-active:linear-gradient(180deg, #ffffff1f 0%, #9999991f 100%);--brand-Tabs-item-default-borderColor-active:var(--base-color-scale-white-0);--brand-Tabs-item-underline-rest:var(--base-color-scale-white-0);--brand-Tabs-list-borderWidth-active:var(--brand-borderWidth-thick)}.Primer_Brand__Tabs-module__Tabs___p41NK{gap:var(--base-size-4);background-color:var(--brand-color-canvas-backdrop);border-radius:var(--brand-borderRadius-large);padding:var(--brand-Tabs-container-padding);width:fit-content;min-height:var(--base-size-48);display:flex;position:relative}.Primer_Brand__Tabs-module__Tabs-container___jByf5{display:grid}@media screen and (width<=48rem){.Primer_Brand__Tabs-module__Tabs-container___jByf5{flex-direction:column;align-items:center;width:100%;display:flex;position:relative}.Primer_Brand__Tabs-module__Tabs-container--align-start___X9kN4{align-items:flex-start}.Primer_Brand__Tabs-module__Tabs-container--align-center___MOjwP{align-items:center}.Primer_Brand__Tabs-module__Tablist__wrapper___Bz69R{width:fit-content;max-width:100%;position:relative;overflow:hidden}.Primer_Brand__Tabs-module__Tablist__wrapper___Bz69R:after{content:"";right:var(--brand-Tabs-list-borderWidth-active);top:var(--base-size-2);bottom:var(--base-size-2);background:linear-gradient(to left, var(--brand-color-canvas-default) 30%, transparent);width:var(--base-size-48);z-index:2;pointer-events:none;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), visibility var(--brand-animation-duration-default) var(--brand-animation-easing-default);opacity:0;opacity:calc(var(--has-overflow,0) * var(--can-scroll-right,0));border-radius:inherit;position:absolute}.Primer_Brand__Tabs-module__Tablist__wrapper--default___pPP9D:after,.Primer_Brand__Tabs-module__Tablist__wrapper--accent___nG4lJ:after{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Tabs-module__Tablist__wrapper--underline___xT6ku:after{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Tabs-module__Tablist__wrapper--lastTabIsActive___DHNPp:after{opacity:0;visibility:hidden}.Primer_Brand__Tabs-module__Tabs___p41NK{scrollbar-width:none;-ms-overflow-style:none;max-width:100%;overflow:auto hidden}.Primer_Brand__Tabs-module__Tabs___p41NK::-webkit-scrollbar{display:none}}.Primer_Brand__Tabs-module__Tabs-container--align-start___X9kN4{justify-items:flex-start}.Primer_Brand__Tabs-module__Tabs-container--align-center___MOjwP{justify-items:center}.Primer_Brand__Tabs-module__Tabs--default___g4Kwt,.Primer_Brand__Tabs-module__Tabs--accent___amEYm{border:var(--brand-Tabs-list-borderWidth-active) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Tabs-module__Tabs--underline___Nm9xx{gap:var(--base-size-24)}.Primer_Brand__Tabs-module__Tabs__item___rPI4n{z-index:1;cursor:pointer;padding:var(--base-size-8) var(--base-size-16);border-radius:var(--brand-borderRadius-full);transition:color var(--brand-animation-duration-fast) ease-in-out;white-space:nowrap;font-family:var(--brand-fontStack-sansSerif);font-weight:var(--brand-text-weight-600);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200);color:var(--brand-color-text-default);background:0 0;border:0;position:relative}.Primer_Brand__Tabs-module__Tabs__slider___hLsBB{top:var(--base-size-4);bottom:var(--base-size-4);transition:all var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);z-index:0;transform:translate(0);transform:translateX(var(--brand-Tabs-slider-x,0px));width:var(--brand-Tabs-slider-width);position:absolute}.Primer_Brand__Tabs-module__Tabs--default___g4Kwt .Primer_Brand__Tabs-module__Tabs__slider___hLsBB{border-radius:var(--brand-borderRadius-full);border:var(--brand-borderWidth-thin) solid var(--brand-Tabs-item-default-borderColor-active);background:var(--brand-Tabs-item-default-bgColor-active)}.Primer_Brand__Tabs-module__Tabs--accent___amEYm .Primer_Brand__Tabs-module__Tabs__slider___hLsBB{border-radius:var(--brand-borderRadius-full);border:var(--brand-borderWidth-thin) solid transparent;background:var(--brand-Tabs-item-accent-bgColor-rest)}.Primer_Brand__Tabs-module__Tabs--underline___Nm9xx .Primer_Brand__Tabs-module__Tabs__slider___hLsBB{border-bottom:var(--brand-borderWidth-thick) solid var(--brand-Tabs-item-underline-rest)}.Primer_Brand__Tabs-module__Tabs__item___rPI4n:focus-visible{outline:var(--base-size-2) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__Tabs-module__Tabs__item--active___ruoXn{color:var(--brand-color-text-default)}.Primer_Brand__Tabs-module__Tabs--underline___Nm9xx .Primer_Brand__Tabs-module__Tabs__item___rPI4n{padding:var(--base-size-8);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Tabs-module__Tabs--accent___amEYm .Primer_Brand__Tabs-module__Tabs__item___rPI4n{transition:color var(--brand-animation-duration-faster) ease}.Primer_Brand__Tabs-module__Tabs--accent___amEYm .Primer_Brand__Tabs-module__Tabs__item--active___ruoXn{color:var(--brand-Tabs-item-accent-fgColor-rest)}.Primer_Brand__Tabs-module__Tabs__panelContainer___oZAgR{margin-top:var(--base-size-16)}.Primer_Brand__Tabs-module__Tabs__panel___JjAmC{color:var(--brand-color-text-default)}.Primer_Brand__Tabs-module__Tabs__controls___OrV44{margin-block-end:var(--base-size-12)}.Primer_Brand__Tabs-module__Tabs__indicator___KDvsE{width:var(--base-size-6);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-color-text-muted);height:var(--base-size-6);transition:width var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Tabs-module__Tabs__indicator--active___XFIc8{background-color:var(--brand-color-text-default);width:var(--base-size-24)}.Primer_Brand__Tabs-module__Tabs__control___crCR5{cursor:pointer;height:var(--base-size-24);width:var(--base-size-24);background-color:#0000;border:none;align-content:center;display:flex}.Primer_Brand__Tabs-module__Tabs__control-icon___cgGsh{top:calc(var(--base-size-2) / -2);position:relative;vertical-align:middle!important}@media screen and (width>=48rem){.Primer_Brand__Tabs-module__Tabs__controls___OrV44{display:none}.Primer_Brand__Tabs-module__Tabs__item___rPI4n{padding-inline:var(--base-size-24)}}:root{--brand-Tiles-item-maxSize:11.5rem}:root,[data-color-mode=light]{--brand-tiles-bgColor-rest:#fafafa;--brand-tiles-bgColor-hover:#f2f5f3;--brand-tiles-highlightColor:#08872b}[data-color-mode=dark]{--brand-tiles-bgColor-rest:#090d0a;--brand-tiles-bgColor-hover:#101411;--brand-tiles-highlightColor:#5fed83}.Primer_Brand__Tiles-module__Tiles___z9bH9{width:100%;color:var(--brand-color-text-default)}.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-xsmall);flex-wrap:wrap;justify-content:center;margin:0;margin-inline:auto;padding:0;list-style:none;display:flex}.Primer_Brand__Tiles-module__Tiles--layout-default___UIRQE .Primer_Brand__Tiles-module__Tiles-grid___PVssB,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-grid___PVssB{max-width:min(100%, calc(var(--brand-Tiles-item-maxSize) * var(--tiles-columns)))}@media screen and (width>=34rem) and (width<=47.99rem){.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-small)}}@media screen and (width>=48rem){.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-medium)}}@media screen and (width>=63.25rem){.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-large)}}.Primer_Brand__Tiles-module__Tiles--variant-gridlines___XV5ah .Primer_Brand__Tiles-module__Tiles-grid___PVssB{padding-right:var(--brand-borderWidth-thin);padding-bottom:var(--brand-borderWidth-thin)}.Primer_Brand__Tiles-module__Tiles-item___NtPvv{--tiles-inset-shadow:inset 0 0 0 transparent;width:calc(100% / var(--tiles-columns));max-width:var(--brand-Tiles-item-maxSize);max-height:var(--brand-Tiles-item-maxSize);box-sizing:border-box;background-color:var(--brand-tiles-bgColor-rest);border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-left:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);box-shadow:var(--brand-borderWidth-thin) 0 0 0 var(--brand-color-border-muted), 0 var(--brand-borderWidth-thin) 0 0 var(--brand-color-border-muted), inset 0 0 0 transparent;box-shadow:var(--brand-borderWidth-thin) 0 0 0 var(--brand-color-border-muted), 0 var(--brand-borderWidth-thin) 0 0 var(--brand-color-border-muted), var(--tiles-inset-shadow);transition:background-color var(--brand-animation-duration-faster) var(--brand-animation-easing-default), box-shadow var(--brand-animation-duration-faster) var(--brand-animation-easing-default);flex-direction:column;display:flex;position:relative}:is(.Primer_Brand__Tiles-module__Tiles-item___NtPvv:has(.Primer_Brand__Tiles-module__Tiles-item-link___OhYck):hover,.Primer_Brand__Tiles-module__Tiles-item___NtPvv:has(.Primer_Brand__Tiles-module__Tiles-item-link___OhYck):focus-within){--tiles-inset-shadow:inset 0 var(--base-size-2) 0 var(--brand-tiles-highlightColor);background-color:var(--brand-tiles-bgColor-hover)}.Primer_Brand__Tiles-module__Tiles-item-link___OhYck{width:100%;color:inherit;flex:1;-webkit-text-decoration:none;text-decoration:none;display:flex}.Primer_Brand__Tiles-module__Tiles-item-link___OhYck:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:calc(-1 * var(--base-size-4));border-radius:var(--brand-borderRadius-small)}.Primer_Brand__Tiles-module__Tiles-item-content___m7HiY{aspect-ratio:1;justify-content:center;align-items:center;width:100%;display:flex;position:relative}.Primer_Brand__Tiles-module__Tiles-item-media___BLrcU{justify-content:center;align-items:center;display:flex}.Primer_Brand__Tiles-module__Tiles-item-media___BLrcU svg,.Primer_Brand__Tiles-module__Tiles-item-media___BLrcU img{width:auto;height:var(--base-size-40);max-width:100%}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU svg,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU img{height:var(--base-size-28)}@media screen and (width>=48rem){.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU svg,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU img{height:var(--base-size-32)}}.Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{justify-content:space-between;align-items:center;gap:var(--base-size-4);padding:var(--base-size-12) var(--base-size-16);display:flex;position:absolute;bottom:0;left:0;right:0}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU{transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-default)}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:hover .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:focus-visible .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU{transform:translateY(calc(-1 * var(--base-size-4)))}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{opacity:0;transform:translateY(var(--base-size-4));transition:opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-default), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-default);pointer-events:none}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:hover .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:focus-visible .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{opacity:1;transform:translateY(0)}.Primer_Brand__Tiles-module__Tiles-item-name___DHlvN{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.Primer_Brand__Tiles-module__Tiles-item-icon___HpkyN{color:var(--brand-color-text-default);flex-shrink:0}@media (prefers-reduced-motion:reduce){.Primer_Brand__Tiles-module__Tiles-item___NtPvv,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{transition:none}}@font-face{font-family:Mona Sans;src:url(/assets/MonaSansVF-wdth-wght-opsz.woff2)format("woff2 supports variations"),url(/assets/MonaSansVF-wdth-wght-opsz.woff2)format("woff2-variations");font-weight:200 900;font-display:swap;font-synthesis:none;font-feature-settings:"liga" 0}@font-face{font-family:MonaSansFallback;size-adjust:104.5%;ascent-override:71%;src:local(Arial)}@font-face{font-family:MonaSansHeaderFallback;size-adjust:103.1%;ascent-override:70%;src:local(Arial Bold)}@font-face{font-family:Hubot Sans;src:url(/assets/Hubot-Sans.woff2)format("woff2 supports variations"),url(/assets/Hubot-Sans.woff2)format("woff2-variations");font-weight:200 900;font-display:swap}@font-face{font-family:Mona Sans Mono;src:url(/assets/MonaSansMonoVF-wght.woff2)format("woff2 supports variations"),url(/assets/MonaSansMonoVF-wght.woff2)format("woff2-variations");font-weight:200 900;font-display:swap;font-synthesis:none}:root,[data-color-mode]{--hub-canvas-default:var(--brand-color-canvas-default);--hub-canvas-white:var(--base-color-scale-white-0);--hub-canvas-muted:var(--brand-color-canvas-muted);--hub-canvas-subtle:var(--brand-color-canvas-subtle);--hub-fg-default:var(--brand-color-text-default);--hub-fg-muted:var(--brand-color-text-muted);--hub-fg-on-emphasis:var(--brand-color-text-onEmphasis);--hub-fg-link:var(--brand-color-text-link-rest);--hub-fg-danger:var(--brand-color-danger-fg);--hub-danger-emphasis:var(--brand-color-danger-emphasis);--hub-fg-on-danger:var(--brand-color-text-onEmphasis);--hub-fg-success:var(--brand-color-success-fg);--hub-success-emphasis:var(--brand-color-success-emphasis);--hub-border-default:var(--brand-color-border-default);--hub-border-muted:var(--brand-color-border-muted);--hub-focus:var(--brand-color-focus);--hub-primary-bg:var(--brand-button-primary-bgColor-rest);--hub-primary-bg-hover:var(--brand-button-primary-bgColor-hover);--hub-primary-bg-active:var(--brand-button-primary-bgColor-active);--hub-primary-fg:var(--brand-button-primary-fgColor-rest);--hub-accent:var(--brand-color-accent-primary);--hub-accent-subtle:color-mix(in srgb, var(--brand-color-accent-primary) 12%, var(--brand-color-canvas-default));--hub-danger-subtle:var(--brand-color-danger-subtle);--hub-success-subtle:var(--brand-color-success-subtle);--hub-attention:var(--brand-color-accent-secondary);--hub-attention-subtle:color-mix(in srgb, var(--brand-color-accent-secondary) 12%, var(--brand-color-canvas-default));--hub-border-width-thick:var(--brand-borderWidth-thick);--hub-text-size-small:var(--base-size-12);--hub-shadow-floating:0 .5rem 1.5rem #00000029;--hub-shadow-control-raised:0 .0625rem .125rem #00000014;--hub-shadow-control-field:0 .0625rem 0 #00000008, 0 .125rem .125rem #00000005;--hub-shadow-selection:0 .0625rem .1875rem #0000001f;--hub-shadow-review-overlay:0 .75rem 2rem #0104094d;--hub-shadow-review-marker:0 0 2px #01040936, 0 3px 5px #01040932;--hub-space-4:var(--base-size-4);--hub-space-8:var(--base-size-8);--hub-space-12:var(--base-size-12);--hub-space-16:var(--base-size-16);--hub-space-24:var(--base-size-24);--hub-space-32:var(--base-size-32);--hub-radius-small:var(--brand-borderRadius-small);--hub-radius-medium:var(--brand-borderRadius-medium);--hub-radius-large:var(--brand-borderRadius-large);--hub-repository-sidebar-width:calc(var(--base-size-128) + var(--base-size-96) + var(--base-size-24) + var(--base-size-2));--hub-repository-sidebar-inset:var(--base-size-16);--hub-repository-sidebar-collapsed-width:calc(var(--base-size-40) + var(--hub-repository-sidebar-inset) + var(--hub-repository-sidebar-inset));--hub-repository-control-width:calc(var(--hub-repository-sidebar-width) - var(--hub-repository-sidebar-inset) - var(--hub-repository-sidebar-inset) - var(--brand-borderWidth-thin));--hub-repository-account-padding-top:var(--base-size-16);--hub-repository-search-width:calc(var(--base-size-128) + var(--base-size-96))}html,body,#app{min-height:100%;margin:0}body{font-family:var(--brand-body-fontFamily);font-feature-settings:"liga" 0;font-variation-settings:"ital" 0, "opsz" 0, "wdth" 100;-webkit-font-smoothing:antialiased}#app{container-type:inline-size}.hub-theme{background:var(--hub-canvas-default);min-height:100vh;color:var(--hub-fg-default);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--brand-body-fontFamily)}:root[data-color-mode=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-color-mode=dark],.hub-theme[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-color-mode=dark]{--hub-shadow-floating:0 .5rem 1.5rem #00000073;--hub-shadow-control-raised:0 .0625rem .125rem #0003;--hub-shadow-control-field:0 .0625rem 0 #00000047, 0 .125rem .125rem #0000000d;--hub-shadow-selection:0 .0625rem .1875rem #00000059;--hub-shadow-review-overlay:0 .75rem 2rem #0000008c;--hub-shadow-review-marker:0 0 2px #00000080, 0 3px 5px #00000073}button,input,textarea,select{font:inherit}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-family:var(--font-sans,-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);color:var(--text-color-default,#1f2328);background:color-mix(in srgb, var(--background-color-default,#fff) 94%, var(--text-color-default,#1f2328))}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}*{box-sizing:border-box}html,body,#root,.canvas-base{width:100%;height:100%;margin:0;overflow:hidden}#root>div{width:100%;height:100%;min-height:0}body,.canvas-base{background:var(--brand-color-canvas-default,#fff)}.canvas-base{--hub-counter-background:color-mix(in srgb, var(--hub-fg-default) 10%, transparent);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--brand-color-text-default,#1f2328);font-family:var(--brand-body-fontFamily,-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);position:relative}.canvas-base[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--hub-shadow-floating:0 .5rem 1.5rem #00000073}.canvas-base button{-webkit-backdrop-filter:none;transition:none}.canvas-base .canvas-icon-button{width:var(--brand-control-small-size);background:0 0;border:0;gap:0;min-width:0;padding:0}.canvas-base .canvas-icon-button:hover{background:var(--brand-color-canvas-subtle,#f6f8fa)}.canvas-base .canvas-icon-button:focus-visible{outline:2px solid var(--hub-accent);outline-offset:2px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.renderer-loading{visibility:hidden}.canvas-shell{--canvas-browser-bar-height:2.5rem;--canvas-toolbar-height:2.75rem;--canvas-preview-top:calc(var(--canvas-browser-bar-height) + var(--canvas-toolbar-height));grid-template-rows:var(--canvas-browser-bar-height) auto minmax(0, 1fr);width:100%;height:100%;min-height:0;display:grid;position:relative;overflow:clip}.prototype-frame{background:var(--hub-canvas-default);border:0;width:100%;height:100%;min-height:0;display:block}.canvas-shell--inactive{z-index:0;pointer-events:none}.canvas-base>.canvas-share-page{z-index:1;position:absolute;inset:0}.thread-sample{--hub-sidebar-top:var(--canvas-preview-top,8.5rem)}.thread-sample__content{flex-direction:column;display:flex;overflow:hidden}.thread-sample__toolbar{color:var(--hub-fg-muted);border-bottom:1px solid var(--hub-border-muted);flex:none;margin:0;padding:.75rem 1rem;font-size:.75rem;line-height:1.5}.thread-sample__filters{justify-content:space-between;align-items:center;gap:var(--base-size-8);display:flex}.thread-sample__empty{padding:var(--base-size-8);color:var(--hub-fg-muted)}.thread-sample__fix-label{align-items:center;gap:var(--hub-space-8);display:inline-flex}.thread-sample__error,.thread-sample__target-status{padding:var(--hub-space-8);color:var(--hub-fg-muted);overflow-wrap:anywhere;flex:none;margin:0}.thread-sample__list{flex:1;min-height:0;padding:.5rem;overflow:auto}.thread-sample__card{margin-bottom:.5rem}.thread-sample__card:before{inset-inline:calc(-1 * var(--hub-space-12)) var(--hub-space-4)}.thread-sample__card:not(.thread-sample__card--resolved) .review-comment-row__author,.thread-sample__card:not(.thread-sample__card--resolved) .review-comment-row__body{color:var(--hub-fg-default)}.thread-sample__card:not(.thread-sample__card--resolved) .review-comment-row__author{font-weight:600}.thread-sample__card-button{padding-inline-end:1.75rem}.thread-sample__heading{align-items:center;gap:var(--base-size-4) var(--base-size-8);flex-wrap:wrap;display:flex}.thread-sample__heading .review-comment-row__author{flex:0 auto}.thread-sample__status{max-width:100%;color:var(--hub-fg-muted);font-size:.6875rem}.thread-sample__status--ready{padding:var(--base-size-2) var(--base-size-8);border:var(--brand-borderWidth-thin) solid var(--hub-fg-success);border-radius:var(--brand-borderRadius-full);color:var(--hub-fg-success);background:0 0}.thread-sample__card svg{flex-shrink:0}.thread-sample__metadata{margin:var(--base-size-4) 0 0 1.75rem;color:var(--hub-fg-muted);overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:.375rem;font-size:.6875rem;display:flex}.thread-sample__metadata code{font-size:inherit}.thread-sample__capture{max-width:calc(100% - 1.75rem);max-height:8rem;margin:var(--base-size-8) 0 0 1.75rem;object-fit:contain;display:block}.thread-sample__follow-ups{align-items:center;gap:var(--base-size-4);color:var(--hub-fg-default);margin:.5rem 0 0 1.75rem;font-size:.75rem;display:flex}.thread-sample__menu{position:absolute;top:.25rem;right:.25rem}.thread-sample__menu button[aria-haspopup=menu]+[popover][aria-hidden=true]{visibility:hidden}.thread-sample__menu-item{column-gap:var(--base-size-8)}.thread-sample__menu-item+.thread-sample__menu-item{margin-block-start:var(--base-size-4)}.thread-sample__surface{z-index:40}.thread-sample__markers{z-index:20}.thread-sample__marker{pointer-events:auto;position:absolute}.thread-sample__conversation .review-thread-conversation__header{grid-template-columns:minmax(0,1fr) auto auto;display:grid}.thread-sample__close{grid-area:1/3;justify-self:end}.thread-sample__copilot-avatar{background:var(--hub-fg-success)}[data-color-mode=dark] .thread-sample__copilot-avatar{background:var(--hub-success-emphasis)}.thread-sample__copilot-avatar img{object-fit:contain;padding:.375rem}.thread-sample__resolve{grid-area:1/2;justify-self:end}.thread-sample__conversation h3{flex:1;margin:0;font-size:.875rem}.thread-sample__delete,.thread-sample__delete span{color:var(--hub-fg-danger)}.thread-sample__menu-item.thread-sample__delete:not([aria-disabled=true]):hover{cursor:default}.thread-sample__quote{border-inline-start:3px solid var(--hub-border-default);white-space:pre-wrap;overflow-wrap:anywhere;margin-block-end:var(--hub-space-16);margin-inline:0;padding-inline-start:1rem}.thread-sample__delete-actions{justify-content:flex-end;align-items:center;gap:var(--hub-space-8);display:flex}.thread-sample__delete-confirm{--brand-button-primary-bgColor-rest:var(--hub-danger-emphasis);--brand-button-primary-bgColor-hover:var(--hub-danger-emphasis);--brand-button-primary-bgColor-active:var(--hub-danger-emphasis);--brand-button-primary-fgColor-rest:var(--hub-fg-on-danger)}.improvement-demo{background:var(--hub-canvas-muted);height:100vh;min-height:100vh;color:var(--hub-fg-default);font-size:.875rem;position:relative;overflow:hidden}.improvement-demo--embedded,.improvement-demo--embedded>.improvement-demo__workspace{display:contents}.improvement-notes-sidebar{--hub-sidebar-top:var(--canvas-preview-top,8.5rem)}.canvas-improvement-markers{z-index:10;inset:var(--canvas-preview-top) 0 0;pointer-events:none;position:absolute;overflow:hidden}.canvas-improvement-markers button{pointer-events:auto}.improvement-demo__browser,.improvement-demo__toolbar,.improvement-demo__actions,.improvement-demo__pages,.improvement-demo__note-header,.improvement-demo__dialog-actions{align-items:center;gap:.75rem;display:flex}.improvement-demo__browser{border-bottom:1px solid var(--hub-border-muted);background:var(--hub-canvas-default);color:var(--hub-fg-muted);padding:.625rem 1rem;font-size:.75rem}.improvement-demo__browser code{flex:1}.improvement-demo__browser-dot{background:var(--hub-fg-success);border-radius:50%;width:.5rem;height:.5rem}.improvement-demo__badge{border:1px solid var(--hub-border-default);border-radius:1rem;padding:.125rem .5rem}.improvement-demo__toolbar{background:var(--hub-canvas-default);border-bottom:1px solid var(--hub-border-default);flex-wrap:wrap;justify-content:space-between;padding:.875rem 1rem}.improvement-demo__identity{gap:.25rem;display:grid}.improvement-demo__identity span{color:var(--hub-fg-muted);font-size:.75rem}.improvement-demo__actions{flex-wrap:wrap}.improvement-demo__split{display:flex}.improvement-demo__split button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.improvement-demo__split button:last-child{border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:-1px}.improvement-demo__split button[aria-pressed=true]{background:var(--brand-button-secondary-bgColor-active)}.improvement-demo__split button:focus-visible{z-index:1;position:relative}.improvement-demo__disclaimer{border-bottom:1px solid var(--hub-border-muted);color:var(--hub-fg-muted);padding:.5rem 1rem;font-size:.75rem}.improvement-demo__workspace{align-items:start;gap:1rem;padding:1rem;display:grid}.improvement-demo__preview{border:1px solid var(--hub-border-default);background:var(--hub-canvas-default);border-radius:.75rem;min-width:0;overflow:hidden}.improvement-demo__pages{border-bottom:1px solid var(--hub-border-default);flex-wrap:wrap;padding:1rem}.improvement-demo__app-name{flex:1;min-width:10rem;font-weight:600}.improvement-demo__pages button{color:var(--hub-fg-muted);cursor:pointer;background:0 0;border:0;border-radius:.375rem;padding:.375rem .75rem}.improvement-demo__pages button[aria-current=page]{background:var(--hub-accent-subtle);color:var(--hub-fg-default)}.improvement-demo select{border:1px solid var(--hub-border-default);background:var(--hub-canvas-default);max-width:100%;color:var(--hub-fg-default);border-radius:.375rem;padding:.375rem .5rem}.improvement-demo__stage{aspect-ratio:960/560;position:relative}.improvement-demo__stage--selecting{cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none}.improvement-demo__scene{width:100%;height:100%;display:block}.improvement-demo__element-target{cursor:crosshair;background:0 0;border:2px solid #0000;border-radius:.375rem;padding:0;position:absolute}.improvement-demo__element-target:hover{background:#155d3d0d;border-color:#155d3d}.improvement-demo__outline{pointer-events:none;border:2px solid var(--hub-fg-success);background:color-mix(in srgb, var(--hub-fg-success) 8%, transparent);border-radius:.25rem;position:absolute}.improvement-demo__outline--saved{background:0 0;border-style:dashed}.improvement-demo__corner{border:2px solid var(--hub-fg-on-emphasis);background:var(--hub-primary-bg);pointer-events:none;width:.75rem;height:.75rem;position:absolute;transform:translate(-50%,-50%)}.improvement-demo__pin{z-index:1;border:2px solid var(--hub-canvas-default);background:var(--hub-primary-bg);min-width:1.75rem;height:1.75rem;color:var(--hub-primary-fg);box-shadow:var(--hub-shadow-selection);cursor:pointer;border-radius:50% 50% 50% 0;padding:0 .25rem;font-size:.75rem;font-weight:600;position:absolute;transform:translate(-30%,-40%)}.improvement-demo__pin--selected{outline:2px solid var(--hub-focus);outline-offset:2px}.improvement-demo__preview-footer{color:var(--hub-fg-muted);justify-content:space-between;gap:1rem;padding:.75rem 1rem;font-size:.75rem;display:flex}.improvement-demo__panel{flex-direction:column;gap:.875rem;min-width:0;padding:1rem;display:flex}.improvement-demo__owner{color:var(--hub-fg-muted);margin:.375rem 0 0;font-size:.75rem;line-height:1.5}.improvement-demo__notice{padding:var(--hub-space-8);overflow-wrap:anywhere;flex:none;margin:0}.improvement-demo__filters{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.improvement-demo__fix-label{align-items:center;gap:.5rem;display:inline-flex}.improvement-demo__note-list{gap:.75rem;display:grid}.improvement-demo__empty{text-align:center;color:var(--hub-fg-muted);padding:2.5rem .5rem}.improvement-demo__empty h2{color:var(--hub-fg-default);font-size:.875rem}.improvement-demo__empty p{margin-bottom:.5rem;font-size:.8125rem;line-height:1.6}.improvement-demo__note{border:1px solid var(--hub-border-default);background:var(--hub-canvas-default);min-width:0;box-shadow:var(--hub-shadow-selection);border-radius:.5rem;padding:.875rem}.improvement-demo__note--focused{border-color:var(--hub-focus);box-shadow:0 0 0 1px var(--hub-focus)}.improvement-demo__note-header{padding-right:calc(var(--brand-control-small-size,1.5rem) + .5rem);display:block;position:relative}.improvement-demo__note-menu{position:absolute;top:0;right:0}.improvement-demo__note-meta{color:var(--hub-fg-muted);overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:.375rem;margin-top:.5rem;font-size:.6875rem;line-height:1.5;display:flex}.improvement-demo__note-meta>span:first-child{min-width:0;max-width:100%}.improvement-demo__note-separator{background:currentColor;border-radius:50%;flex-shrink:0;align-self:center;width:.1875rem;height:.1875rem}.improvement-demo__menu-item{column-gap:var(--brand-control-medium-gap,.5rem)}.improvement-demo__menu-trigger{width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);background:0 0;border-color:#0000;flex-shrink:0;gap:0;padding:0}.improvement-demo__menu-trigger>[data-testid=Button-trailing-visual],.improvement-demo__menu-trigger>span:nth-child(2){display:none}.improvement-demo__delete-item,.improvement-demo__delete-item span{color:var(--hub-fg-danger)}.improvement-demo__note-route{min-width:0;max-width:100%;color:var(--hub-fg-muted);font:inherit;text-align:left;cursor:pointer;overflow-wrap:anywhere;background:0 0;border:0;margin:0;padding:0;display:block}.improvement-demo__note-route:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px;border-radius:.125rem}.improvement-demo__status{border:1px solid var(--hub-border-default);border-radius:1rem;padding:.125rem .375rem;font-size:.6875rem;display:inline-block}.improvement-demo__status--ready,.improvement-demo__status--resolved{color:var(--hub-fg-success);background:var(--hub-success-subtle)}.improvement-demo__status--blocked{color:var(--hub-fg-danger);background:var(--hub-danger-subtle)}.improvement-demo__body{overflow-wrap:anywhere;white-space:pre-wrap;flex:1;min-width:0;margin:0;line-height:1.55}.improvement-demo__note-header+:not(.improvement-demo__note-actions){margin-top:.75rem}.improvement-demo__note-header>.improvement-demo__status{margin-bottom:.5rem}.improvement-demo__note>.improvement-demo__note-meta{margin-top:.5rem}.improvement-demo__solution{margin-top:.75rem}.improvement-demo__solution summary{cursor:pointer;align-items:center;gap:.25rem;font-size:.75rem;font-weight:600;list-style:none;display:flex}.improvement-demo__solution summary::-webkit-details-marker{display:none}.improvement-demo__solution summary svg{flex-shrink:0}.improvement-demo__solution[open] summary svg{transform:rotate(90deg)}.improvement-demo__solution summary:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px}.improvement-demo__solution p{white-space:pre-wrap;overflow-wrap:anywhere;margin:.5rem 0 0;font-size:.875rem;line-height:1.55}.improvement-demo__read-only{color:var(--hub-fg-muted);margin:.75rem 0 0;font-size:.75rem;line-height:1.5}.improvement-demo__note>:last-child{margin-bottom:0}.improvement-demo__thumbnail{border:1px solid var(--hub-border-muted);border-radius:.25rem;max-width:100%;max-height:6rem;display:block}.improvement-demo__result,.improvement-demo__form-hint{color:var(--hub-fg-muted);font-size:.75rem;line-height:1.5}.improvement-demo__note-actions{flex-wrap:wrap;gap:.25rem;margin:.75rem 0;display:flex}.improvement-demo__note-actions:empty{display:none}.improvement-demo__note small{color:var(--hub-fg-muted);font-size:.6875rem}.improvement-demo__simulation{margin-bottom:.75rem;font-size:.75rem}.improvement-demo__simulation summary{cursor:pointer;margin-bottom:.5rem}.improvement-demo__simulation button{margin:.25rem .25rem 0 0}.improvement-demo__note .improvement-demo__sync-error{color:var(--hub-fg-danger)}.improvement-demo__connection{border-top:1px solid var(--hub-border-muted);padding-top:.875rem;font-size:.75rem}.improvement-demo__connection label{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;display:flex}.improvement-demo__connection p{color:var(--hub-fg-danger);line-height:1.5}.improvement-demo__announcement{color:var(--hub-fg-muted);margin:0;padding:0 1rem 1rem;font-size:.75rem}.improvement-demo__composer,.improvement-demo__handoff{width:min(34rem,100vw - 2rem)}.improvement-demo__batch-context{color:var(--hub-fg-muted);flex-wrap:wrap;justify-content:space-between;gap:.5rem;margin:1rem 0;font-size:.75rem;display:flex}.improvement-demo__dialog-actions{flex-wrap:wrap;justify-content:flex-end;margin-top:1rem}.improvement-demo__delete-preview{border-inline-start:3px solid var(--hub-border-default);color:var(--hub-fg-muted);white-space:pre-wrap;overflow-wrap:anywhere;margin:1rem 0;padding-inline-start:1rem;line-height:1.5}.improvement-demo__delete-confirm{--brand-button-primary-bgColor-rest:var(--hub-danger-emphasis);--brand-button-primary-bgColor-hover:color-mix(in srgb, var(--hub-danger-emphasis) 85%, var(--hub-fg-default));--brand-button-primary-bgColor-active:var(--brand-button-primary-bgColor-hover);--brand-button-primary-borderColor-active:var(--brand-button-primary-bgColor-active);--brand-button-primary-fgColor-rest:var(--hub-fg-on-danger);border-color:var(--hub-danger-emphasis)}.improvement-demo__handoff li{border-bottom:1px solid var(--hub-border-muted);padding:.75rem 0}.improvement-demo__handoff li code{color:var(--hub-fg-muted);margin-top:.375rem;font-size:.75rem;display:block}.improvement-demo__handoff li p{overflow-wrap:anywhere;margin-bottom:0}.improvement-demo button:focus-visible,.improvement-demo select:focus-visible,.improvement-demo [tabindex]:focus-visible{outline:2px solid var(--hub-focus);outline-offset:3px}
+.hub-spinner{vertical-align:middle;border:2px solid color-mix(in srgb, currentColor 23%, transparent);border-block-start-color:currentColor;border-radius:50%;flex:none;width:1.25rem;height:1.25rem;display:inline-block}.hub-spinner--small{width:1rem;height:1rem}@media (prefers-reduced-motion:no-preference){.hub-spinner{animation:.75s linear infinite hub-spinner-turn}}@keyframes hub-spinner-turn{to{transform:rotate(360deg)}}.hub-visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.hub-icon-button:is(button,a){width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);flex:none;gap:0;padding:0}.hub-icon-button.hub-icon-button--danger:not(:disabled):not([aria-disabled=true]){color:var(--hub-fg-danger)}.hub-icon-button.hub-icon-button--invisible:is(button,a){box-shadow:none;background-color:#0000;border:0}.canvas-dialog{box-sizing:border-box;width:min(32rem,100% - 2rem);max-height:calc(100% - 2rem);color:var(--hub-fg-default);background:var(--hub-canvas-default);border:1px solid var(--hub-border-default);box-shadow:var(--hub-shadow-floating);border-radius:.75rem;padding:1.25rem}.canvas-dialog::backdrop{background:#00000080}.canvas-dialog-header{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.canvas-dialog-header h2{margin:0}.canvas-dialog>p{margin:.75rem 0}.build-details-list{gap:1.25rem;margin:0;display:grid}.build-details-list dt{color:var(--brand-color-text-muted,#656d76);margin-bottom:.375rem;font-weight:600}.build-details-list dd{min-width:0;font-size:var(--brand-text-size-200,1rem);align-items:center;gap:.5rem;margin:0;display:flex}.build-details-list code{overflow-wrap:anywhere;min-width:0;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace}.build-details-list dd>svg{color:var(--brand-color-text-muted,#656d76);flex:none}.build-details-list button{flex-shrink:0}.build-details-copy-error{color:var(--brand-color-danger-fg,#cf222e);margin-top:1rem;display:block}.hub-connection-approval{gap:var(--base-size-16);margin-block:1rem 0;display:grid}.hub-connection-approval p{margin:0}.hub-connection-approval-actions{border:1px solid var(--brand-button-primary-bgColor-rest);border-radius:var(--base-size-6);justify-self:start;align-items:stretch;gap:0;display:inline-flex}.hub-connection-approval-actions>:is(a,button){box-shadow:none;border:0;border-radius:0;margin:0}.hub-connection-approval-actions>a{overflow-wrap:anywhere;border-start-start-radius:calc(var(--base-size-6) - 1px);border-end-start-radius:calc(var(--base-size-6) - 1px)}.hub-connection-approval-actions>.hub-connection-approval-copy{--hub-approval-separator:var(--brand-button-primary-borderColor-active);--brand-button-secondary-bgColor-rest:var(--brand-button-primary-bgColor-rest);--brand-button-secondary-bgColor-hover:var(--brand-button-primary-bgColor-hover);--brand-button-secondary-bgColor-active:var(--brand-button-primary-bgColor-active);--brand-button-secondary-fgColor-rest:var(--brand-button-primary-fgColor-rest);--brand-button-secondary-borderColor-rest:var(--hub-approval-separator);--brand-button-secondary-borderColor-hover:var(--hub-approval-separator);--brand-button-secondary-borderColor-active:var(--hub-approval-separator);width:var(--brand-control-medium-size);min-width:var(--brand-control-medium-size);border-inline-start:1px solid var(--hub-approval-separator);border-start-end-radius:calc(var(--base-size-6) - 1px);border-end-end-radius:calc(var(--base-size-6) - 1px);height:auto}.hub-connection-approval-actions>:focus-visible{z-index:1;position:relative}.hub-connection-origin{align-items:center;gap:.5rem;margin-bottom:1rem;display:flex}.hub-connection-origin a{min-width:0;color:inherit;overflow-wrap:anywhere;text-decoration:none}.hub-connection-origin a:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px}.hub-connection-origin-field{justify-items:start;gap:.5rem;margin-bottom:1rem;display:grid}.hub-connection-origin-input{align-items:center;gap:.5rem;width:100%;display:flex}.hub-alert{--hub-alert-accent:var(--hub-attention);min-width:0;padding:var(--hub-space-16);align-items:center;gap:var(--hub-space-12);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);border-inline-start:var(--brand-borderWidth-thicker) solid var(--hub-alert-accent);border-radius:var(--hub-radius-small);background:var(--hub-canvas-default);color:var(--hub-fg-default);grid-template-columns:auto minmax(0,1fr) auto;display:grid}.hub-alert--critical{--hub-alert-accent:var(--hub-fg-danger)}.hub-alert--info{--hub-alert-accent:var(--hub-accent)}.hub-alert--success{--hub-alert-accent:var(--hub-fg-success)}.hub-alert--compact{padding:var(--hub-space-12) var(--hub-space-16)}.hub-alert__icon{color:var(--hub-alert-accent);flex:none}.hub-alert__content{min-width:0}.hub-alert__message{overflow-wrap:anywhere;min-width:0;margin:0}.hub-alert__title{font-weight:var(--brand-text-weight-bold)}.hub-alert__description{margin-block-start:var(--hub-space-4);display:block}.hub-alert__action{justify-self:end;align-items:center;gap:var(--hub-space-8);display:flex}@media (width<=48rem){.hub-alert__action{grid-column:2/-1;justify-self:start}}.publish-changes-dialog__actions{gap:var(--base-size-8);flex-wrap:wrap;display:flex}.publish-changes-dialog p{margin:0}.publish-changes-dialog__files{max-height:10rem;padding-left:var(--base-size-20);overflow-wrap:anywhere;margin:0;overflow-y:auto}.copyable-text-input{width:100%;min-width:0}.copyable-text-input__control{min-width:0;position:relative}.copyable-text-input__input{min-width:0;text-overflow:ellipsis;padding-inline-end:calc(var(--brand-control-small-size) + var(--hub-space-12))}.copyable-text-input:not(.copyable-text-input--compact) .copyable-text-input__input{text-overflow:clip;padding-inline-end:var(--hub-space-12)}.copyable-text-input .copyable-text-input__button{position:absolute;inset-block-start:50%;inset-inline-end:var(--hub-space-4);transform:translateY(-50%)}.copyable-text-input:not(.copyable-text-input--compact) .copyable-text-input__button:is(button){--brand-button-subtle-bgColor-hover:color-mix(in srgb, var(--hub-fg-default) 12%, var(--hub-canvas-default));--brand-button-subtle-bgColor-active:color-mix(in srgb, var(--hub-fg-default) 18%, var(--hub-canvas-default));width:calc(var(--brand-control-medium-size) - var(--hub-space-8));min-width:0;height:calc(var(--brand-control-medium-size) - var(--hub-space-8));background-color:var(--hub-canvas-default);min-height:0;color:var(--hub-fg-default);border-color:#0000}.copyable-text-input:not(.copyable-text-input--compact) .copyable-text-input__button:before{background:linear-gradient(to right, transparent, var(--hub-canvas-default));content:"";pointer-events:none;width:1rem;position:absolute;inset-block:0;inset-inline-end:100%}.copyable-text-input__button:focus-visible{outline:2px solid var(--hub-focus);outline-offset:-2px}.copyable-text-input__error{color:var(--hub-fg-danger);margin-block-start:var(--hub-space-8);display:block}.copyable-text-input--compact .copyable-text-input__control{align-items:center;gap:1px;display:flex}.copyable-text-input--compact .copyable-text-input__input{min-width:0;height:var(--brand-control-small-size);padding:0 var(--hub-space-12);border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);color:var(--hub-fg-default);font-size:var(--brand-text-size-100);flex:1}.copyable-text-input--compact .copyable-text-input__input:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.copyable-text-input--compact .copyable-text-input__button{position:static;transform:none}.prototype-workspace__body{width:min(100%,68rem);padding:var(--hub-space-32) var(--hub-space-24);margin:0 auto}@container (width<=48rem){.prototype-workspace__body{padding:var(--hub-space-24) var(--hub-space-16)}}.hub-content-page-header{gap:var(--hub-space-8);display:grid}.hub-content-page-header__top{align-items:center;gap:var(--hub-space-8) var(--hub-space-16);flex-wrap:wrap;min-height:2.5rem;display:flex}.hub-content-page-header__top h2{overflow-wrap:anywhere;margin:0}.hub-content-page-header__description{color:var(--hub-fg-muted);margin:0}.share-links__empty{padding:var(--hub-space-16) 0}.share-links__empty-description{color:var(--hub-fg-muted);margin:0}.share-links__list{margin:0;padding:0;list-style:none;display:grid}.share-link-item{padding:var(--hub-space-16) 0}.share-link-item+.share-link-item{border-top:1px solid var(--hub-border-muted)}.share-link-item__metadata{color:var(--hub-fg-muted)}.share-link-item__layout,.share-link-item__details{flex-direction:column;gap:.5rem;display:flex}.share-link-item__layout{gap:1rem}.share-link-item__actions{align-items:center;gap:var(--hub-space-8);flex-wrap:wrap;display:flex}.share-link-item__details h3{overflow-wrap:anywhere;margin:0;font-size:1rem}.share-link-item__actions{gap:.5rem}.share-link-item__actions>:first-child{flex:16rem;min-width:0}.share-link-item__actions .hub-icon-button{width:var(--brand-control-medium-size);min-width:var(--brand-control-medium-size);height:var(--brand-control-medium-size);min-height:var(--brand-control-medium-size)}.share-link-item--created{outline:1px solid var(--hub-accent);outline-offset:-1px}.share-links-form{gap:var(--hub-space-8);flex-direction:column;display:flex}.share-links__form{padding:var(--hub-space-16) 0;border-top:1px solid var(--hub-border-muted)}.share-links__form-row{gap:var(--hub-space-16);max-width:48rem;display:grid}.share-links__form-options{max-width:48rem;margin-block-start:var(--hub-space-8)}@container (width>=48rem){.share-links__form-row{grid-template-rows:auto auto auto;grid-template-columns:minmax(12rem,1fr) minmax(10rem,12rem) auto;row-gap:0}.share-links__form-row>.share-links__field{grid-row:1/span 3;grid-template-columns:minmax(0,1fr);grid-template-rows:subgrid;align-items:start;row-gap:0;display:grid}.share-links__field>*{grid-column:1}.share-links__field>label{padding-bottom:var(--hub-space-8)}.share-links__validation{padding-top:var(--hub-space-8)}.share-links__form-actions{grid-area:2/3;align-self:start;min-height:2rem}}.share-control-settings{gap:var(--hub-space-12);flex-direction:column;max-width:48rem;display:flex}.share-control-settings__hint{gap:var(--hub-space-8);flex-direction:column;display:flex}.share-control-settings__description{color:var(--hub-fg-muted);margin:0;font-size:.875rem;line-height:1.5}.hub-alert.share-control-settings__warning{background:var(--hub-attention-subtle)}.canvas-share-page{background:var(--brand-color-canvas-subtle);width:100%;height:100%;color:var(--hub-fg-default);animation:canvas-share-fade-in var(--brand-animation-duration-fast) var(--brand-animation-easing-glide) both, canvas-share-slide-up .4s var(--brand-animation-easing-glide) both;flex-direction:column;display:flex;overflow-y:auto;container-type:inline-size}.canvas-share-build-details{color:var(--hub-fg-muted)}.canvas-share-internal{align-items:flex-start;gap:var(--hub-space-8);flex-direction:column;display:flex}.canvas-share-internal p,.canvas-share-public-header p{color:var(--hub-fg-muted);margin:0}.canvas-share-public-header{gap:var(--hub-space-8);border-top:1px solid var(--hub-border-muted);flex-direction:column;padding-block-start:var(--hub-space-24);display:flex}.canvas-share-page .copyable-text-input__input[readonly]{background-color:var(--hub-canvas-muted)}.canvas-share-internal-actions{width:100%}.canvas-share-build-details p{margin:0}.canvas-share-build-reference{border-radius:var(--hub-radius-small);color:inherit;font:inherit;text-underline-offset:.2em;cursor:help;background:0 0;border:0;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.canvas-share-build-reference:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px}.canvas-share-page .canvas-share-build-tooltip{white-space:pre-line;text-align:start;max-width:min(22rem,100vw - 2rem)}.canvas-share-page .canvas-share-link--older-build .share-link-item__details h3{color:var(--hub-fg-muted)}.canvas-share-list-actions{align-items:center;gap:var(--hub-space-8);flex-wrap:wrap;display:flex}.canvas-share-close{flex-shrink:0;margin-inline-start:auto}@keyframes canvas-share-fade-in{0%{opacity:0}to{opacity:1}}@keyframes canvas-share-slide-up{0%{transform:translateY(8rem)}to{transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.canvas-share-page{animation:none}}.canvas-branch-publication{overflow-wrap:anywhere;justify-items:start;gap:.75rem;display:grid}.canvas-branch-publication>p{margin:0}.canvas-branch-publication>.hub-alert{justify-self:stretch}.canvas-branch-publication__actions{flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.25rem;display:flex}.canvas-branch-publication>p{color:var(--hub-fg-muted)}.canvas-branch-publication .canvas-branch-publication__workflow-link{--brand-InlineLink-color-rest:var(--hub-accent);--brand-InlineLink-color-pressed:var(--hub-accent)}.canvas-branch-publication__actions [aria-busy=true] svg{animation:1s linear infinite canvas-publication-spin}@keyframes canvas-publication-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.canvas-branch-publication__actions [aria-busy=true] svg{animation:none}}.canvas-browser-theme{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.canvas-browser-theme[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html[data-color-mode=light] .canvas-browser-bar,body[data-color-mode=light] .canvas-browser-bar{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html[data-color-mode=dark] .canvas-browser-bar,body[data-color-mode=dark] .canvas-browser-bar{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.canvas-browser-bar{--hub-canvas-default:var(--background-color-default,var(--brand-color-canvas-default));--hub-fg-default:var(--text-color-default,var(--brand-color-text-default));--hub-fg-muted:var(--text-color-muted,var(--brand-color-text-muted));--hub-border-default:var(--border-color-default,var(--brand-color-border-default));--hub-focus:var(--color-focus-outline,var(--brand-color-focus));--hub-fg-danger:var(--true-color-red,var(--brand-color-danger-fg));--canvas-browser-gap:.375rem;--canvas-browser-control-radius:.375rem;--canvas-browser-control-size:1.75rem;--canvas-browser-surface:color-mix(in srgb, var(--hub-canvas-default) 94%, var(--hub-fg-default));z-index:51;align-items:center;gap:var(--canvas-browser-gap);min-width:0;height:var(--canvas-browser-bar-height,2.5rem);background:var(--hub-canvas-default);border-bottom:1px solid var(--hub-border-default);color:var(--hub-fg-muted);padding:.25rem .5rem;display:flex;position:relative}.canvas-browser-bar__navigation,.canvas-browser-bar__tools,.canvas-browser-bar__appearance{flex:none;align-items:center;gap:1px;display:flex}.canvas-browser-bar__tools{gap:var(--canvas-browser-gap)}.canvas-browser-bar button{width:var(--canvas-browser-control-size);height:var(--canvas-browser-control-size);border-radius:var(--canvas-browser-control-radius);color:inherit;cursor:pointer;background:0 0;border:1px solid #0000;place-items:center;padding:0;display:grid}.canvas-browser-bar button:hover:not(:disabled){background:color-mix(in srgb, var(--hub-fg-default) 12%, transparent);color:var(--hub-fg-default)}.canvas-browser-bar button:focus-visible,.canvas-browser-bar input:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.canvas-browser-bar button:disabled{cursor:default;opacity:.45}.canvas-browser-bar__address{flex:1;min-width:0;position:relative}.canvas-browser-bar__address input{width:100%;height:var(--canvas-browser-control-size);border-radius:var(--canvas-browser-control-radius);background:var(--canvas-browser-surface);color:var(--hub-fg-default);font:inherit;border:1px solid #0000;padding:0 .5rem;font-size:.8125rem;display:block}.canvas-browser-bar__address input[aria-invalid=true]{border-color:var(--hub-fg-danger)}.canvas-browser-bar__error{border:1px solid var(--hub-fg-danger);border-radius:var(--canvas-browser-control-radius);background:var(--hub-canvas-default);color:var(--hub-fg-danger);box-shadow:0 .25rem .75rem color-mix(in srgb, var(--hub-fg-default) 12%, transparent);padding:.375rem .5rem;font-size:.75rem;position:absolute;top:calc(100% + .375rem);left:0}.canvas-browser-bar__appearance{border-radius:var(--canvas-browser-control-radius);background:var(--canvas-browser-surface);gap:0;padding:0}.canvas-browser-bar__appearance button[aria-pressed=true]{border-color:var(--hub-border-default);background:var(--hub-canvas-default);color:var(--hub-fg-default)}@media (width<=32rem){.canvas-browser-bar{--canvas-browser-gap:.25rem;padding-inline:.375rem}.canvas-browser-bar__navigation{gap:0}}.controls-fields{--brand-text-size-100:.875rem;--brand-control-medium-size:1.75rem;--brand-control-small-size:1.75rem;--brand-control-medium-paddingBlock-normal:var(--hub-space-4);--brand-control-medium-paddingInline-condensed:var(--hub-space-8);--controls-selection-shadow:var(--hub-shadow-selection);font-size:var(--brand-text-size-100)}.controls-fields,.controls-scope{gap:var(--hub-space-8);min-width:0;color:var(--hub-fg-default);grid-template-columns:minmax(0,1fr);display:grid}.controls-options,.controls-action-field{gap:var(--hub-space-4);grid-template-columns:minmax(0,1fr);min-width:0;display:grid}.controls-field{--brand-control-color-border-default:var(--hub-border-muted);gap:var(--hub-space-4);min-width:0;max-width:100%}.controls-fields .controls-action-button{--brand-text-size-100:var(--hub-text-size-small)}.controls-fields .controls-action-button:not(:disabled){--brand-button-secondary-bgColor-rest:var(--hub-canvas-muted);--brand-button-secondary-fgColor-rest:var(--brand-control-color-fg-default);--brand-button-secondary-borderColor-rest:var(--brand-control-color-border-default)}.controls-field-heading,.controls-fields .controls-field--select{align-items:flex-start;gap:var(--hub-space-4);flex-direction:column;display:flex}.controls-field-heading{width:100%}.controls-field-heading>span:has(>input){min-width:0;max-width:100%}:is(.controls-field>span:has(>:is(input,textarea)),.controls-slider-row>span:has(>input)){min-width:0;max-width:100%}.controls-fields .controls-field-label,.controls-fields .controls-choice-group-label,.controls-fields .controls-choice-group-label>span{color:var(--hub-fg-muted);font-size:.6875rem;line-height:1.5}.controls-fields .controls-field-label{overflow-wrap:anywhere;max-width:100%}.controls-fields .controls-number-input{font-variant-numeric:tabular-nums;min-width:0;max-width:100%}.controls-slider-row{align-items:center;gap:var(--hub-space-8);width:100%;min-width:0;display:flex}.controls-slider-row>.controls-native-slider{flex:1;width:0;min-width:0}.controls-slider-row>span{flex:none;max-width:100%}.controls-number-input--slider{appearance:textfield}.controls-number-input--slider::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.controls-number-input--slider::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.controls-field--select>span:has(>select){width:max-content;min-width:0;max-width:100%}.controls-fields .controls-select-input{width:auto;min-width:0;max-width:100%}.controls-fields :is(input:not([type=range]):not([type=checkbox]):not([type=radio]),textarea,select):not(:disabled){background-color:var(--hub-canvas-muted)}.controls-fields :is(.controls-select-input,.controls-action-button):not(:disabled):not(:focus-visible){box-shadow:var(--hub-shadow-control-field)}.controls-field-validation{overflow-wrap:anywhere;width:100%;min-width:0}.controls-fields .controls-choice-row{align-items:center;column-gap:var(--hub-space-8);grid-template-columns:auto minmax(0,1fr)}.controls-choice-row>span:has(>.controls-choice-mark){align-items:center;display:flex}.controls-fields .controls-choice-label{min-height:var(--hub-space-24);line-height:1.5;font-size:var(--hub-text-size-small);overflow-wrap:anywhere;align-items:center;min-width:0;display:flex;top:0}.controls-fields .controls-choice-group-label{overflow-wrap:anywhere;max-width:100%;margin-block-end:var(--hub-space-4)}.controls-fields .controls-choice-mark{width:1rem;height:1rem;margin:0}.controls-fields .controls-choice-mark>svg{width:.75rem;height:.75rem}.controls-fields .controls-choice-mark--radio:before{width:1.5rem;height:1.5rem;inset:-.25rem}.controls-fields .controls-choice-mark--radio>span{width:.5rem;height:.5rem}.controls-scope-divider{border:0;border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted);width:100%;margin:0}.controls-group{--controls-group-heading-inset:var(--hub-space-8);--controls-group-heading-bottom-inset:var(--hub-space-8);gap:var(--hub-space-8);border:0;grid-template-columns:minmax(0,1fr);min-width:0;margin:0;padding:0;display:grid}.controls-group>legend{width:100%;min-width:0;max-width:100%;padding:0}.controls-scope>.controls-scope-divider+.controls-group{margin-top:calc(-1 * var(--controls-group-heading-inset))}.controls-scope>:is(.controls-field,.controls-group)+.controls-group>legend{border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted)}.controls-scope>.controls-group+.controls-field{padding-top:var(--hub-space-8);border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted)}.controls-scope-divider,.controls-scope>:is(.controls-field,.controls-group)+.controls-group>legend,.controls-scope>.controls-group+.controls-field{border-image-source:linear-gradient(var(--hub-border-muted), var(--hub-border-muted));border-image-slice:1;border-image-outset:0 var(--controls-group-heading-bleed,0px)}.controls-group-toggle:is(button){width:calc(100% + var(--controls-group-heading-bleed,0px) * 2);min-width:0;margin-left:calc(-1 * var(--controls-group-heading-bleed,0px));margin-bottom:calc(-1 * var(--controls-group-heading-bottom-inset));padding-left:var(--controls-group-heading-bleed,0px);padding-right:var(--controls-group-heading-bleed,0px);padding-block:0;padding-top:var(--controls-group-heading-inset);padding-bottom:var(--controls-group-heading-bottom-inset);min-height:calc(var(--hub-space-24) + var(--controls-group-heading-inset) + var(--controls-group-heading-bottom-inset));text-align:left;text-transform:none;color:var(--hub-fg-default);border-radius:0;justify-content:space-between}.controls-group-toggle .controls-group-label{font-size:var(--hub-text-size-small);color:var(--hub-fg-default);white-space:normal;overflow-wrap:anywhere}.controls-group-body{gap:var(--hub-space-8);min-width:0;padding-top:calc(var(--hub-space-4) + var(--controls-group-heading-bottom-inset));grid-template-columns:minmax(0,1fr);display:grid}.controls-group-body[hidden]{display:none}.controls-native-slider{--controls-slider-thumb-size:1rem;--controls-slider-track-size:.375rem;--controls-slider-fill:var(--hub-accent);--controls-slider-track-background:linear-gradient(to right, var(--controls-slider-fill) var(--controls-slider-progress), var(--hub-border-muted) var(--controls-slider-progress));appearance:none;width:100%;min-height:var(--brand-control-small-size);cursor:pointer;background:0 0;margin:0}.controls-native-slider::-webkit-slider-runnable-track{height:var(--controls-slider-track-size);border-radius:var(--controls-slider-track-size);background:var(--controls-slider-track-background)}.controls-native-slider::-webkit-slider-thumb{appearance:none;box-sizing:border-box;width:var(--controls-slider-thumb-size);height:var(--controls-slider-thumb-size);margin-top:calc((var(--controls-slider-track-size) - var(--controls-slider-thumb-size)) / 2);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);background:var(--hub-canvas-default);box-shadow:var(--controls-selection-shadow);border-radius:50%}.controls-native-slider::-moz-range-track{height:var(--controls-slider-track-size);border-radius:var(--controls-slider-track-size);background:var(--controls-slider-track-background);border:0}.controls-native-slider::-moz-range-thumb{box-sizing:border-box;width:var(--controls-slider-thumb-size);height:var(--controls-slider-thumb-size);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);background:var(--hub-canvas-default);box-shadow:var(--controls-selection-shadow);border-radius:50%}.controls-native-slider:disabled{--controls-slider-fill:var(--hub-fg-muted);cursor:not-allowed}@media (forced-colors:active){.controls-native-slider::-webkit-slider-runnable-track{background:canvastext}.controls-native-slider::-moz-range-track{background:canvastext}}.controls-native-color{width:var(--brand-control-small-size);height:var(--brand-control-small-size);padding:var(--hub-space-4);background:var(--hub-canvas-muted);border:var(--brand-borderWidth-thin) solid var(--hub-border-muted);border-radius:var(--hub-radius-medium);cursor:pointer}.controls-native-color:disabled{background:var(--hub-canvas-muted);cursor:not-allowed}.controls-segments{--brand-text-size-100:var(--hub-text-size-small);--controls-segment-inset:.125rem;width:100%;max-width:100%;padding:var(--controls-segment-inset);border:var(--brand-borderWidth-thin) solid var(--hub-border-muted);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-muted);display:flex}.controls-segment{min-width:0;min-height:calc(var(--brand-control-medium-size) - (var(--brand-borderWidth-thin) + var(--controls-segment-inset)) * 2);padding-inline:var(--hub-space-8);border:var(--brand-borderWidth-thin) solid transparent;border-radius:max(0px, calc(var(--hub-radius-medium) - var(--brand-borderWidth-thin) - var(--controls-segment-inset)));cursor:pointer;color:var(--hub-fg-muted);flex:1 1 0;justify-content:center;align-items:center;display:flex;position:relative}.controls-segment>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:inherit;overflow:hidden}.controls-segment:has(input:checked){background:var(--hub-canvas-default);border-color:var(--hub-border-muted);box-shadow:var(--controls-selection-shadow);color:var(--hub-fg-default)}.controls-segment:has(input:disabled){color:var(--hub-fg-muted);cursor:not-allowed}.controls-fields:focus-visible,.controls-native-slider:focus-visible,.controls-native-color:focus-visible{outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.controls-segment:has(input:focus-visible){outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.controls-ghost-button{--controls-ghost-background:transparent;--brand-button-subtle-bgColor-rest:var(--controls-ghost-background);--brand-button-subtle-bgColor-hover:var(--controls-ghost-background);--brand-button-subtle-bgColor-active:var(--controls-ghost-background);--brand-button-subtle-borderColor-rest:transparent;--brand-button-subtle-borderColor-hover:transparent;--brand-button-subtle-borderColor-active:transparent}.controls-ghost-button.controls-ghost-button:is(button){background:var(--controls-ghost-background);box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;border:0}.controls-ghost-button:not(:disabled):hover{--controls-ghost-background:var(--hub-canvas-muted)}.canvas-controls-layer{z-index:40;inset:var(--canvas-preview-top,0) 0 0;pointer-events:none;position:absolute}.canvas-controls-panel{--brand-text-size-100:.875rem;--brand-control-small-size:1.75rem;top:var(--hub-space-16);left:var(--hub-space-16);width:min(18rem, calc(100% - var(--hub-space-16) * 2));max-height:calc(100% - var(--hub-space-16) * 2);background:var(--hub-canvas-default);color:var(--hub-fg-default);border:var(--brand-borderWidth-thin) solid var(--hub-border-default);border-radius:var(--hub-radius-medium);box-shadow:var(--hub-shadow-floating);pointer-events:auto;font-size:var(--brand-text-size-100);flex-direction:column;display:flex;position:absolute;overflow:hidden}.canvas-controls-header{align-items:center;gap:var(--hub-space-4);padding:var(--hub-space-8);flex:none;display:flex}.canvas-controls-grab{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.canvas-controls-panel[data-dragging=true] .canvas-controls-grab{cursor:grabbing}.canvas-shell:has(.canvas-controls-panel[data-dragging=true]) .prototype-frame{pointer-events:none}.canvas-controls-header .canvas-controls-title{min-width:0;padding-inline:var(--hub-space-8);text-align:left;flex:1;justify-content:space-between}.canvas-controls-body{border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted);flex-direction:column;min-width:0;min-height:0;display:flex}.canvas-controls-body[hidden]{display:none}.canvas-controls-content{--controls-group-heading-bleed:var(--hub-space-8);gap:var(--hub-space-8);min-width:0;min-height:0;padding:var(--hub-space-8);scrollbar-gutter:stable;overscroll-behavior:contain;grid-template-columns:minmax(0,1fr);display:grid;overflow:hidden scroll}.canvas-controls-content [role=alert]{color:var(--hub-fg-danger)}.canvas-controls-content:has(>.controls-fields:first-child>.controls-scope:first-child>.controls-group:first-child){padding-top:0}.canvas-controls-footer{gap:var(--hub-space-8);padding:var(--hub-space-8);background:var(--hub-canvas-subtle);border-top:var(--brand-borderWidth-thin) solid var(--hub-border-muted);flex:none;display:grid}.canvas-controls-footer button:not(:disabled):not(:focus-visible){box-shadow:var(--hub-shadow-control-raised)}.canvas-controls-footer .canvas-controls-learn-more{--brand-InlineLink-color-rest:var(--hub-fg-success);--brand-InlineLink-color-pressed:var(--hub-fg-success);justify-self:start;align-items:center;gap:var(--hub-space-4);text-decoration:none;display:inline-flex}.canvas-controls-learn-more:focus-visible{outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.canvas-controls-diagnostics{overflow-wrap:anywhere;color:var(--hub-fg-muted);font-size:var(--brand-text-size-100)}.canvas-controls-diagnostics summary{cursor:pointer;padding:var(--hub-space-8)}.canvas-controls-diagnostics h4{font-size:var(--brand-text-size-100)}.canvas-controls-diagnostics summary:focus-visible{outline:var(--hub-border-width-thick) solid var(--hub-focus);outline-offset:var(--hub-space-4)}.canvas-controls-diagnostics p{margin-top:var(--hub-space-8);white-space:pre-wrap}.hub-counter{background:var(--hub-counter-background,color-mix(in srgb, currentColor 10%, Canvas));min-width:1.25rem;min-height:1.25rem;color:inherit;font-variant-numeric:tabular-nums;border-radius:100rem;justify-content:center;align-items:center;padding:0 .375rem;font-size:.75rem;font-weight:600;line-height:1.25rem;display:inline-flex}.hub-sidebar{z-index:var(--hub-sidebar-z-index,30);inset:var(--hub-sidebar-top,0) 0 0 auto;width:min(var(--hub-sidebar-width,24rem), 100%);background:var(--hub-canvas-muted);min-height:0;color:var(--hub-fg-default);border-left:var(--brand-borderWidth-thin) solid var(--hub-border-muted);box-shadow:var(--hub-shadow-floating);visibility:hidden;pointer-events:none;flex-direction:column;transition:transform .16s cubic-bezier(.4,0,1,1),visibility 0s linear .16s;display:flex;position:absolute;transform:translate(calc(100% + 1.5rem))}.hub-sidebar[data-open=true]{visibility:visible;pointer-events:auto;transition:transform .24s ease-in,visibility;transform:translate(0)}.hub-sidebar__header{justify-content:space-between;align-items:center;gap:var(--hub-space-12);padding:var(--hub-space-8) var(--hub-space-16);background:var(--hub-canvas-subtle);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex:none;display:flex}.hub-sidebar__heading{align-items:center;gap:var(--hub-space-8);min-width:0;display:flex}.hub-sidebar__heading h2{color:var(--hub-fg-default);font-size:var(--brand-text-size-200);overflow-wrap:anywhere;margin:0}.hub-sidebar .hub-sidebar__close{--brand-button-subtle-bgColor-hover:var(--brand-color-border-muted);--brand-button-subtle-borderColor-hover:transparent;background:0 0;border-color:#0000}.hub-sidebar__close:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.hub-sidebar__content{flex:1;min-height:0;overflow:auto}@media (prefers-reduced-motion:reduce){.hub-sidebar,.hub-sidebar[data-open=true]{transition:none}}.hub-user-avatar.hub-user-avatar{width:var(--hub-avatar-size);height:var(--hub-avatar-size);object-fit:cover;flex:none;display:block}.hub-user-avatar--20{--hub-avatar-size:1.25rem}.hub-user-avatar--24{--hub-avatar-size:1.5rem}.hub-user-avatar--28{--hub-avatar-size:1.75rem}.hub-user-avatar--32{--hub-avatar-size:2rem}.review-participant-stack{align-items:center;display:inline-flex}.review-participant-stack__avatar{background:var(--hub-canvas-default);border:2px solid var(--hub-canvas-default);color:var(--hub-fg-muted);transform:translateX(calc(var(--review-avatar-index,0) * var(--review-avatar-spread,0px)));border-radius:50%;justify-content:center;align-items:center;display:inline-flex;position:relative}.review-participant-stack__avatar:first-child{z-index:4}.review-participant-stack__avatar:nth-child(2){z-index:3;--review-avatar-index:1}.review-participant-stack__avatar:nth-child(3){z-index:2;--review-avatar-index:2}.review-participant-stack__avatar:nth-child(4){z-index:1;--review-avatar-index:3}.review-participant-stack__avatar+.review-participant-stack__avatar{margin-inline-start:calc(-1 * var(--hub-space-8))}.review-participant-stack--small .review-participant-stack__avatar,.review-participant-stack--medium .review-participant-stack__avatar{width:1.75rem;height:1.75rem}.review-participant-stack__avatar--overflow{background:var(--hub-canvas-muted);color:var(--hub-fg-default);font-size:.625rem;font-weight:600}@media (prefers-reduced-motion:no-preference){.review-participant-stack__avatar{transition:transform .15s cubic-bezier(.77,0,.175,1)}}.review-comment-markers{z-index:10;pointer-events:none;position:absolute;inset:0;overflow:hidden}.review-comment-marker{width:auto;min-width:var(--hub-space-32);height:var(--hub-space-32);transform:translate(calc(-1 * var(--hub-space-16) + var(--review-marker-offset-x,0px)), -50%);box-shadow:none;pointer-events:auto;color:var(--hub-fg-muted);background:0 0;border:0;border-radius:50%;padding:.125rem .875rem .125rem .125rem;position:absolute}.review-comment-marker--resolved{opacity:.65}.review-comment-marker .review-participant-stack__avatar:first-child{box-shadow:var(--hub-shadow-review-marker)}.review-comment-marker--unread .review-participant-stack__avatar:first-child{border-color:var(--hub-accent)}.review-comment-marker--unread:after{background:var(--hub-accent);width:var(--hub-space-8);height:var(--hub-space-8);border:1px solid var(--hub-canvas-default);content:"";border-radius:50%;position:absolute;top:-.125rem;right:-.125rem}.review-comment-marker--blocked{cursor:not-allowed}.review-comment-area{pointer-events:none;position:absolute;inset:0;overflow:visible}.review-comment-area__path{fill:none;stroke:var(--hub-accent);stroke-linecap:round;stroke-linejoin:round;stroke-width:2px}.review-comment-area__path--selected{stroke:var(--hub-focus);stroke-width:4px}.review-comment-marker--selected,.review-comment-marker:focus-visible{outline:0}.review-comment-marker--selected .review-participant-stack__avatar:first-child,.review-comment-marker:focus-visible .review-participant-stack__avatar:first-child{outline:2px solid var(--hub-focus);outline-offset:.125rem}@media (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){.review-comment-marker:hover:not(:disabled) .review-participant-stack__avatar{--review-avatar-spread:.1875rem}}@media (prefers-reduced-motion:no-preference){.review-comment-marker:focus-visible .review-participant-stack__avatar{--review-avatar-spread:.1875rem;transition:none}}.hub-switch{width:var(--base-size-48);height:var(--base-size-40);cursor:pointer;vertical-align:middle;flex:none;justify-content:center;align-items:center;display:inline-flex;position:relative}.hub-switch--small{width:var(--base-size-40);height:var(--base-size-32)}.hub-switch__native-control{opacity:0;pointer-events:none;position:absolute;inset:0}.hub-switch__track{width:var(--base-size-36);height:var(--base-size-24);padding:var(--base-size-4);border-radius:var(--base-size-24);background:var(--brand-color-neutral-emphasis);align-items:center;display:flex}.hub-switch--small .hub-switch__track{width:var(--base-size-28);height:var(--base-size-16);padding:var(--base-size-2)}.hub-switch__thumb{width:var(--base-size-16);height:var(--base-size-16);border-radius:var(--base-size-16);background:var(--brand-color-text-onEmphasis);transition:transform var(--brand-animation-duration-faster) var(--brand-animation-easing-default)}.hub-switch--small .hub-switch__thumb{width:var(--base-size-12);height:var(--base-size-12)}.hub-switch__track[data-checked=true]{background:var(--brand-color-success-fg)}.hub-switch__track[data-checked=true] .hub-switch__thumb{transform:translateX(var(--base-size-12))}:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)) .hub-switch__track[data-checked=true] .hub-switch__thumb{transform:translateX(calc(-1 * var(--base-size-12)))}.hub-switch:has(:focus-visible) .hub-switch__track{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.hub-switch[data-disabled]{opacity:.5;cursor:not-allowed}@media (prefers-reduced-motion:reduce){.hub-switch__thumb{transition:none}}.review-comment-filter-controls{flex-direction:column;gap:.75rem;padding:0;display:flex}.review-comment-filter-controls__search{align-items:center;gap:.5rem;display:flex}.review-comment-filter-controls__search-field{flex:1;min-width:0;position:relative}.review-comment-filter-controls__input{box-sizing:border-box;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);width:100%;height:2.5rem;min-height:2.5rem;color:var(--hub-fg-default);font-size:var(--brand-text-size-100);padding:.5rem 1rem .625rem 2.5rem;line-height:1.25rem}.review-comment-filter-controls__input:focus{border-color:var(--hub-focus);outline:none}.review-comment-filter-controls__input::placeholder{color:var(--hub-fg-muted)}.review-comment-filter-controls__search-icon{z-index:1;color:var(--hub-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.review-comment-filter-controls .review-comment-filter-controls__button{border-color:#0000}.review-comment-filter-controls .review-comment-filter-controls__button--active,.review-comment-filter-controls .review-comment-filter-controls__button:hover:not(:disabled){background:var(--brand-color-border-muted)}.review-comment-filter-controls__button:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.review-comment-filter-controls__filters{flex-direction:column;gap:.5rem;padding-top:.25rem;display:flex}.review-comment-filter-controls__toggle,.review-comment-filter-controls__participant{justify-content:space-between;align-items:center;gap:.75rem;min-height:2rem;font-size:.875rem;display:flex}.review-comment-filter-controls__participant{gap:.5rem}.review-comment-filter-controls__participant [data-testid=ActionMenu],.review-comment-filter-controls__participant-trigger{max-width:12rem}.review-comment-filter-controls__participant-name{text-overflow:ellipsis;white-space:nowrap;max-width:8rem;display:block;overflow:hidden}.review-comment-filter-controls__participant [role=menu]{width:max-content;min-width:12rem;max-width:min(20rem,100vw - 1rem)}.review-comment-row{padding:var(--hub-space-8) var(--hub-space-12);border-radius:var(--brand-borderRadius-medium);isolation:isolate;font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);background:0 0;border:0;margin-inline-start:var(--hub-space-12);position:relative}.review-comment-row:before{content:"";inset-block:0;inset-inline:calc(-1 * var(--hub-space-16) - var(--hub-space-4)) calc(-1 * var(--hub-space-4));border-radius:inherit;pointer-events:none;z-index:-1;position:absolute}.review-comment-row:hover:before,.review-comment-row--selected:before{background:var(--brand-color-border-muted)}.review-comment-row__button{appearance:none;cursor:pointer;width:100%;min-height:0;font:inherit;text-align:left;color:inherit;background:0 0;border:0;margin:0;padding:0;display:block}.review-comment-row__button:after{content:"";inset-block:0;inset-inline:calc(-1 * var(--hub-space-16) - var(--hub-space-4)) calc(-1 * var(--hub-space-4));border-radius:var(--brand-borderRadius-medium);position:absolute}.review-comment-row__button:focus-visible{outline:none}.review-comment-row__button:focus-visible:after{outline:2px solid var(--hub-focus);outline-offset:-2px}.review-comment-row__button:disabled{cursor:not-allowed;opacity:.6}.review-comment-row .review-comment-row__avatar{width:1.25rem;height:1.25rem;inset-inline-start:calc(-1 * var(--hub-space-24));color:var(--hub-fg-muted);border-radius:50%;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.review-comment-row__content{min-width:0}.review-comment-row__metadata{min-width:0;color:var(--hub-fg-muted);flex-wrap:wrap}.review-comment-row__author{text-overflow:ellipsis;white-space:nowrap;color:var(--hub-fg-muted);font-weight:400;overflow:hidden}.review-comment-row--unread .review-comment-row__author{font-weight:600}.review-comment-row__author-and-build{align-items:center;gap:var(--hub-space-4);flex:1;min-width:0;display:flex;position:relative}.review-comment-row__metadata time{z-index:1;cursor:pointer;white-space:nowrap;font-size:.75rem;position:relative}.review-comment-row__unread{z-index:1;cursor:pointer;background:var(--hub-accent);width:var(--hub-space-8);height:var(--hub-space-8);top:50%;border-radius:50%;position:absolute;inset-inline-start:calc(-1 * var(--hub-space-24) + (1.25rem - var(--hub-space-8)) / 2);transform:translateY(-50%)}.review-comment-row__body-container{display:block;position:relative}.review-comment-row__body{overflow-wrap:anywhere;-webkit-line-clamp:3;color:var(--hub-fg-muted);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.review-comment-row--unread .review-comment-row__author,.review-comment-row--unread .review-comment-row__body{color:var(--hub-fg-default)}.review-comment-row__context{padding-block-start:var(--hub-space-4)}.review-comment-row__build{white-space:nowrap;flex-shrink:0;font-size:.75rem}.review-comment-row__build a{z-index:1;color:var(--hub-fg-muted);text-decoration:none;position:relative}.review-comment-row__build a:hover{text-decoration:underline}.review-comment-row__replies{white-space:nowrap;color:var(--hub-fg-muted)}.review-comment-row__layout,.review-comment-row__metadata,.review-comment-row__context{align-items:flex-start;gap:.5rem;display:flex}.review-comment-row__content,.review-comment-row__replies{flex:1;min-width:0}.review-comment-row__author{flex:0 auto}.review-comment-row__copy{flex-direction:column;gap:.25rem;display:flex}.review-comment-row__metadata{align-items:center}.review-comment-row__context{align-items:center;font-size:.75rem}.review-comment-row__status{white-space:nowrap;margin-inline-start:auto}.review-comments-sidebar{flex-direction:column;width:100%;height:100%;display:flex}.review-comments-sidebar__header{justify-content:space-between;align-items:center;gap:.75rem;min-height:3.5rem;padding:0;display:flex}.review-comments-sidebar__heading{align-items:center;gap:.5rem;display:flex}.review-comments-sidebar__heading h2{margin:0;font-size:1rem}.review-comments-sidebar .review-comments-sidebar__close{--brand-button-subtle-bgColor-hover:var(--brand-color-border-muted);--brand-button-subtle-borderColor-hover:transparent;background:0 0;border-color:#0000}.review-comments-sidebar__close:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.review-comments-sidebar__body{min-height:0;margin-inline:calc(-1 * var(--hub-space-8)) calc(-1 * var(--hub-space-4));padding-inline:var(--hub-space-8) var(--hub-space-4);flex-direction:column;flex:1;display:flex;overflow:auto}.review-comments-sidebar__state{text-align:center;min-height:12rem;color:var(--hub-fg-muted);flex-direction:column;justify-content:center;align-items:center;gap:.75rem;padding:1.5rem;display:flex}.review-comments-sidebar__threads{padding:var(--hub-space-8) 0 0;flex-direction:column;gap:.25rem;display:flex}.review-comments-sidebar__loading{border-top:1px solid var(--hub-border-muted);color:var(--hub-fg-muted);justify-content:center;align-items:center;gap:.5rem;margin-top:auto;padding:.75rem 1rem;display:flex}.review-comment-control__trigger{width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);gap:0;padding:0}.review-shell__comment-actions .review-comment-control__trigger{border-start-end-radius:0;border-end-end-radius:0}.review-comment-control__trigger>[data-testid=Button-trailing-visual],.review-comment-control__trigger>span:nth-child(2){display:none}.review-comment-control__trigger~div [role=menu]{max-height:min(460px, var(--review-comment-control-menu-height,460px))}.review-comment-control__menu-item{column-gap:var(--brand-control-medium-gap)}div:has(>[data-testid=ActionMenu] .review-comment-control__trigger[aria-expanded=true])+[role=tooltip]{display:none}.canvas-commenting-recovery__actions{flex-wrap:wrap;gap:.5rem;margin-top:1.25rem;display:flex}.review-confirmation-panel{background:var(--hub-attention-subtle);border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);flex-direction:column;gap:.75rem;padding:.75rem;display:flex}.review-confirmation-panel--compact{gap:.5rem;padding:.5rem}.review-confirmation-panel--condensed{flex-flow:wrap;justify-content:space-between;align-items:center;gap:.375rem .5rem;padding:.375rem;padding-inline-start:.625rem}.review-confirmation-panel--condensed .review-confirmation-panel__copy{flex:1 0 auto;max-width:100%}.review-confirmation-panel--condensed .review-confirmation-panel__copy strong{font-size:.8125rem;line-height:1.25rem}.review-confirmation-panel--condensed .review-confirmation-panel__actions{margin-inline-start:auto}.review-confirmation-panel--condensed .review-confirmation-panel__error{flex-basis:100%}.review-confirmation-panel__copy{flex-direction:column;gap:.25rem;display:flex}.review-confirmation-panel__copy span,.review-confirmation-panel__error{font-size:.875rem}.review-confirmation-panel__actions{justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.review-confirmation-panel__danger{border-color:var(--hub-danger-emphasis);background:var(--hub-danger-emphasis);color:var(--hub-fg-on-danger)}@media (hover:hover) and (pointer:fine){.review-confirmation-panel__danger:not(:disabled):hover{border-color:color-mix(in srgb, var(--hub-danger-emphasis) 85%, var(--hub-fg-default));background:color-mix(in srgb, var(--hub-danger-emphasis) 85%, var(--hub-fg-default))}}.review-confirmation-panel__error{color:var(--hub-fg-danger)}.mention-input{width:100%;position:relative}.mention-input textarea{box-sizing:border-box;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);width:100%;color:var(--hub-fg-default);font:inherit;resize:vertical;padding:.5rem}.mention-input textarea:focus-visible{outline:2px solid var(--hub-focus);outline-offset:-1px}.mention-input__suggestions{z-index:100;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);max-height:14rem;color:var(--hub-fg-default);padding:.25rem;position:fixed;overflow-y:auto}.mention-input__suggestions ul{margin:0;padding:0;list-style:none}.mention-input__suggestions button{width:100%;color:inherit;text-align:start;cursor:pointer;background:0 0;border:0;padding:.5rem}.mention-input__suggestions [aria-selected=true]{background:var(--hub-canvas-subtle)}.review-comment-composer-backdrop{z-index:39;background:0 0;border:0;position:absolute;inset:0}.review-comment-composer{width:min(20rem, calc(100% - var(--hub-space-16)));max-height:calc(100% - var(--hub-space-16));border:1px solid var(--hub-border-muted);background:var(--hub-canvas-subtle);z-index:40;box-shadow:var(--hub-shadow-review-overlay);border-radius:.5625rem;padding:.75rem 1rem 1rem;position:absolute;overflow:auto}.review-comment-composer__form{flex-direction:column;gap:.75rem;display:flex}.review-comment-composer__header,.review-comment-composer__actions{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.review-comment-composer__header h2{font-size:var(--brand-text-size-100);margin:0;font-weight:600}.review-comment-composer__actions{justify-content:flex-end}.review-comment-composer textarea{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.review-comment-composer__error{color:var(--hub-fg-danger)}.review-comment-composer__banner{margin:0}.review-thread-reply-form__blocked{padding:var(--hub-space-8) var(--hub-space-12);color:var(--hub-fg-muted);font-size:.75rem;display:block}.review-thread-reply-form__error{color:var(--hub-fg-danger)}.review-thread-reply-form{flex-direction:column;gap:.5rem;display:flex}.review-thread-reply-form__composer{align-items:flex-end;display:flex;position:relative}.review-thread-reply-form__composer textarea{resize:none;border:1px solid var(--hub-border-default);border-radius:var(--hub-radius-medium);background:var(--hub-canvas-default);width:100%;min-height:2.5rem;max-height:min(7.5rem,20dvh);color:var(--hub-fg-default);font-size:var(--brand-text-size-100);padding:.5rem 2.75rem .625rem 1rem;line-height:1.25rem;display:block}.review-thread-reply-form__composer textarea:focus{border-color:var(--hub-focus);outline:none}.review-thread-reply-form__composer textarea::placeholder{color:var(--hub-fg-muted)}.review-thread-reply-form__composer textarea:placeholder-shown{white-space:nowrap}.review-thread-reply-form__submit{background:var(--brand-button-primary-bgColor-rest);width:1.875rem;height:1.875rem;color:var(--brand-button-primary-fgColor-rest);cursor:pointer;border:0;border-radius:.375rem;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;bottom:.3125rem;right:.3125rem}.review-thread-reply-form__submit:hover:not(:disabled){opacity:.85}.review-thread-reply-form__submit:disabled{background:var(--hub-border-default);color:var(--hub-fg-muted);cursor:default}.review-thread-reply-form__submit:focus-visible{outline:2px solid var(--hub-focus);outline-offset:2px}.review-thread-reply-form__error{font-size:.875rem}.mention-text{border-radius:var(--hub-radius-small);background:var(--hub-canvas-subtle);color:var(--hub-fg-default);padding-inline:.15em;font-weight:600}.review-thread-message__header{align-items:center;gap:.5rem;display:flex}.review-thread-message__byline{flex-wrap:wrap;flex:1;align-items:baseline;column-gap:.5rem;min-width:0;line-height:1.25rem;display:flex}.review-thread-message__byline time,.review-thread-message__byline>span:not(.review-thread-message__identity){color:var(--hub-fg-muted);font-size:.75rem}.review-thread-message__identity{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}.review-comment-reactions{gap:var(--hub-space-4);flex-wrap:wrap;align-items:center;display:flex}.review-comment-reactions>button{border-color:var(--hub-border-muted);border-radius:.375rem;gap:.25rem;height:1.625rem;min-height:1.625rem;padding-inline:.375rem;font-size:.75rem}.review-comment-reactions>button>span:first-child{font-size:.75rem;line-height:1}.review-comment-reactions>button .hub-counter{background:var(--hub-counter-background,transparent);min-width:0;min-height:0;padding:0;font-size:.75rem;line-height:1}.review-comment-reactions>button.review-comment-reaction--selected{background:var(--hub-accent-subtle);border-color:color-mix(in srgb, var(--hub-accent) 40%, var(--hub-border-muted));color:var(--hub-fg-default)}.review-comment-reactions__picker-emoji{font-size:1rem;line-height:1}.review-comment-reactions__error{color:var(--hub-fg-danger)}.review-comment-reactions__tooltip[popover][role=tooltip]{white-space:nowrap}.review-comment-reactions__layout{flex-direction:column;gap:.25rem;display:flex}.review-comment-reactions__menu-trigger{width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);background:0 0;border-color:#0000;gap:0;padding:0}.review-comment-reactions__menu-trigger>[data-testid=Button-trailing-visual],.review-comment-reactions__menu-trigger>span:nth-child(2),.review-comment-reactions__tooltip.review-comment-reactions__tooltip--suppressed[popover][role=tooltip]{display:none}.review-comment-reactions:has(.review-comment-reactions__menu-trigger[aria-expanded=true])>[role=tooltip]{display:none}.review-comment-reactions__layout [role=menu]{max-height:min(460px,100dvh - 2rem)}.review-comment-reactions__layout [role=menu] li{column-gap:var(--brand-control-medium-gap)}.review-thread-message{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);flex-direction:column;gap:.125rem;padding:.5rem 1rem 1rem;display:flex}.review-thread-message+.review-thread-message{padding-top:.5rem}.review-thread-message__actions{justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.review-thread-message__edit{flex-direction:column;gap:.5rem;display:flex}.review-thread-message__body{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);overflow-wrap:anywhere;white-space:pre-wrap;margin:0 0 0 2.25rem}.review-thread-message__edit,.review-thread-message>.review-comment-reactions__layout{margin-inline-start:2.25rem}.review-thread-message>.review-comment-reactions__layout{margin-block-start:.5rem}.review-thread-message__body--deleted{color:var(--hub-fg-muted);font-style:italic}.review-thread-message__error{color:var(--hub-fg-danger)}.review-thread-message .review-thread-message__menu-trigger:is(button){width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);min-height:var(--brand-control-small-size);box-shadow:none;background:0 0;border:0;gap:0;padding:0}.review-thread-message .review-thread-message__menu-trigger:not(:disabled):hover{background:var(--brand-color-border-muted)}.review-thread-message [role=menu] li{column-gap:var(--brand-control-medium-gap)}.review-thread-message__menu-trigger>[data-testid=Button-trailing-visual],.review-thread-message__menu-trigger>span:nth-child(2){display:none}.review-thread-message__header:has(.review-thread-message__menu-trigger[aria-expanded=true])>[role=tooltip]{display:none}.review-thread-message__delete-item{color:var(--hub-fg-danger)}.review-thread-message__menu-divider{border-top:1px solid var(--hub-border-muted);margin-block:var(--hub-space-4);list-style:none}.review-thread-message__delete-item span{color:var(--hub-fg-danger)}.review-thread-message[data-notification-target=true]{outline:2px solid var(--hub-focus);outline-offset:-2px;border-radius:var(--hub-radius-medium)}.review-thread-conversation{background:var(--hub-canvas-subtle);z-index:40;width:100%;height:100%;box-shadow:var(--hub-shadow-review-overlay);border:0;border-radius:0;display:flex;position:absolute;inset:0;overflow:visible}.review-thread-conversation__layout{max-height:inherit;flex-direction:column;flex:1;min-height:0;display:flex}@container (width>=48rem){.review-thread-conversation{width:min(20rem, calc(100% - var(--hub-space-16)));height:auto;max-height:calc(100% - var(--hub-space-16));border:1px solid var(--hub-border-default);border-radius:.75rem;inset:auto}.review-thread-conversation--anchored{top:var(--review-thread-top);left:var(--review-thread-left)}.review-thread-conversation--docked{top:var(--hub-space-12);right:var(--hub-space-12)}}.review-emoji-burst{z-index:50;pointer-events:none;width:100vw;height:100vh;position:fixed;inset:0}.review-thread-conversation__header{border-bottom:1px solid var(--hub-border-default);flex:none;align-items:center;gap:.5rem;min-height:3rem;padding:.5rem 1rem;display:flex}.review-thread-conversation__header h2{font-size:var(--brand-text-size-100);flex:1;margin:0;font-weight:600}.review-thread-conversation__close{background:0 0;border-color:#0000}.review-thread-conversation__banner{margin:var(--hub-space-8)}.review-thread-conversation__messages{flex:auto;min-height:0;overflow:auto}.review-thread-conversation__messages [data-testid=ActionMenu]{position:static}.review-thread-conversation__messages [data-testid=ActionMenu] [role=menu]{max-height:min(460px, var(--review-thread-menu-room-bottom,calc(100dvh - 2rem)))}.review-thread-conversation__messages [data-testid=ActionMenu] [role=menu][class*=ActionMenu__menu--pos-outside-top]{max-height:min(460px, var(--review-thread-menu-room-top,calc(100dvh - 2rem)))}.review-thread-conversation__footer{flex:none;padding:0 .25rem .25rem}.review-thread-conversation__footer--blocked{border-top:1px solid var(--hub-border-muted);padding:0}@container (width>=48rem){.review-thread-conversation__messages{min-height:5rem;max-height:20rem}}.canvas-hub-panel{--hub-sidebar-top:var(--canvas-preview-top,2.75rem)}.canvas-hub-content{padding:var(--hub-space-16);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);flex:1;overflow:auto}.canvas-hub-connection{margin-bottom:1.5rem}.canvas-hub-status{justify-items:start;gap:var(--hub-space-16);display:grid}.canvas-hub-status>.hub-alert{justify-self:stretch}.canvas-hub-content .canvas-hub-connection p{color:var(--hub-fg-default);margin-block-end:var(--base-size-8)}.canvas-hub-settings{margin-bottom:1rem}.canvas-hub-publication__title,.canvas-hub-section__heading{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.canvas-hub-publication__title{align-items:flex-start}.canvas-hub-publication__title h3,.canvas-hub-section h3{margin:0}.canvas-hub-publication__title h3{overflow-wrap:anywhere;min-width:0}.canvas-hub-publication__status{border:1px solid var(--hub-border-muted);color:var(--hub-fg-muted);border-radius:999px;flex:none;margin-top:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1}.canvas-hub-publication__branch{color:var(--hub-fg-muted);overflow-wrap:anywhere;align-items:center;gap:.375rem;margin:.5rem 0 0;text-decoration:none;display:inline-flex}a.canvas-hub-publication__branch:hover{color:var(--hub-accent);text-decoration:underline}.canvas-hub-publication__description{overflow-wrap:anywhere;margin:1rem 0}.canvas-hub-publication__start-page{margin-bottom:0}.canvas-hub-content .canvas-hub-publication__form label{margin:0}.canvas-hub-publication__name-field{flex:1;min-width:0}.canvas-hub-content .canvas-hub-publication__name-field input{box-sizing:border-box;min-height:1.75rem;font-size:var(--brand-text-size-200);font-weight:var(--brand-text-weight-semibold);margin:0;padding-block:.25rem;line-height:1.25rem}.canvas-hub-publication__description-field{margin-top:1rem}.canvas-hub-content .canvas-hub-publication__description-field textarea{resize:vertical;min-height:5rem;margin:0}.canvas-hub-publication__form .canvas-hub-form-actions,.canvas-hub-content .canvas-hub-publication__form .canvas-hub-publication__start-page-field{margin-top:1rem}.canvas-hub-publication__hint{color:var(--hub-fg-muted);margin:.375rem 0 0;font-size:.75rem}.canvas-hub-publication>button{margin-top:var(--hub-space-16)}.canvas-hub-section,.canvas-hub-publication--after-status{border-top:1px solid var(--hub-border-muted);margin-top:1.25rem;padding-top:1.25rem}.canvas-hub-section>p{color:var(--hub-fg-muted);margin:.75rem 0 0}.canvas-hub-build{margin-top:.75rem}.canvas-hub-build__identity{align-items:baseline;gap:var(--hub-space-8);display:flex}.canvas-hub-build__identity>code{color:var(--hub-fg-muted)}.canvas-hub-build>p{color:var(--hub-fg-muted);margin:.5rem 0 0}.canvas-hub-build a,.canvas-hub-build__history{color:var(--hub-accent)}.canvas-hub-build .canvas-hub-build__author{color:inherit;text-decoration:none}.canvas-hub-build .canvas-hub-build__author:hover{color:var(--hub-accent);text-decoration:underline}.canvas-hub-build__history{margin-top:var(--hub-space-12);display:inline-block}.canvas-hub-build>.canvas-hub-build__notice{color:var(--hub-fg-default)}.canvas-hub-disconnect{margin-top:var(--hub-space-16)}.canvas-hub-origin{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.25rem .5rem;display:grid}.canvas-hub-origin>a{min-width:0;color:var(--hub-accent);overflow-wrap:anywhere}.canvas-hub-origin button{white-space:nowrap;grid-area:1/2}.canvas-hub-origin+p,.canvas-hub-origin+.canvas-hub-publication,.canvas-hub-content>p+p{margin-top:1rem}.canvas-hub-origin-form{margin-block:.75rem}.canvas-hub-origin-form p{color:var(--hub-fg-muted)}.canvas-hub-origin-field{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:.5rem;display:grid}.canvas-hub-content .canvas-hub-origin-field label{margin:0}.canvas-hub-origin-form>p{margin:.5rem 0 0}.canvas-hub-origin-form>.canvas-hub-form-actions{margin-top:1rem}.canvas-hub-content form label{margin-block:.75rem;display:block}.canvas-hub-content input,.canvas-hub-content textarea{width:100%;margin-top:.25rem;display:block}.canvas-hub-form-actions{gap:.5rem;display:flex}.canvas-marker-layer{inset:var(--canvas-preview-top,2.75rem) 0 0;z-index:20;pointer-events:none;position:absolute}.canvas-review-controls{align-items:center;gap:0;display:inline-flex}.canvas-review-controls .review-comment-control__trigger{border-start-end-radius:0;border-end-end-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;overflow:visible}.canvas-review-controls .review-comment-control__trigger [data-testid=Button-leading-visual]{flex:0 0 1rem;overflow:visible}.canvas-review-controls .review-comment-control__trigger svg{overflow:visible}.canvas-review-controls .canvas-comments-toggle{--brand-button-secondary-bgColor-active:var(--brand-button-secondary-bgColor-rest);--brand-button-secondary-borderColor-active:var(--brand-button-secondary-borderColor-rest);min-width:var(--brand-control-small-size);height:var(--brand-control-small-size);padding-inline:var(--hub-space-8);gap:var(--hub-space-4);border-start-start-radius:0;border-end-start-radius:0;border-inline-start-width:0;border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:0}.canvas-comments-toggle:focus-visible{outline:2px solid var(--hub-focus);outline-offset:1px}.canvas-comments-unread-badge{width:var(--hub-space-8);height:var(--hub-space-8);background:var(--hub-accent);border-radius:50%}.canvas-comments-sidebar-shell{--hub-sidebar-top:var(--canvas-preview-top,2.75rem);--hub-sidebar-z-index:35}.canvas-comments-sidebar-content{flex-direction:column;padding:0 1rem 1rem;display:flex;overflow:hidden}.canvas-comments-sidebar-shell .review-comment-filter-controls{padding-top:1rem}.canvas-comments-sidebar-shell .review-comment-filter-controls__filters{border-bottom:var(--brand-borderWidth-thin) solid var(--hub-border-muted);margin-inline:-1rem;padding:.25rem 1rem 1rem}.canvas-comments-live-notices{padding-top:.75rem}.canvas-comments-live-status{color:var(--hub-fg-muted);font-size:var(--brand-text-size-100);margin:0;padding:0}.canvas-comments-live-status+.canvas-comments-live-status{margin-top:.5rem}.canvas-conversation-shell{z-index:40;inset:var(--canvas-preview-top,2.75rem) 0 0;pointer-events:none;position:absolute;container-type:inline-size}.canvas-composer-shell{z-index:45;inset:var(--canvas-preview-top,2.75rem) 0 0;pointer-events:none;position:absolute;container-type:inline-size}.canvas-composer-shell .review-comment-composer,.canvas-composer-shell .review-comment-composer-backdrop{pointer-events:auto}.canvas-selection-notice{z-index:46;top:calc(var(--canvas-preview-top,2.75rem) + .75rem);border:1px solid var(--hub-danger-emphasis);border-radius:var(--brand-borderRadius-medium);background:var(--hub-canvas-default);max-width:min(30rem,100% - 2rem);color:var(--hub-fg-default);box-shadow:var(--hub-shadow-floating);padding:.75rem 1rem;position:absolute;left:50%;transform:translate(-50%)}.canvas-conversation-shell .review-thread-conversation{pointer-events:auto}.canvas-conversation-shell :is(.review-thread-message__menu-trigger,.review-comment-reactions__menu-trigger) [data-testid=Button-leading-visual]{flex:0 0 1rem;overflow:visible}.canvas-publish-settings__option{justify-content:space-between;align-items:center;gap:var(--hub-space-16);margin-top:var(--hub-space-12);display:flex}.canvas-publish-settings__option>label{min-width:0}.canvas-publish-settings__toggle:has([aria-disabled=true]){opacity:.5;cursor:not-allowed}.canvas-publish-settings__error{gap:var(--hub-space-12);margin-top:var(--hub-space-12);display:grid}.canvas-toolbar{--hub-toolbar-selected-bg:var(--brand-button-secondary-bgColor-hover);--hub-toolbar-selected-hover-bg:var(--brand-button-secondary-bgColor-active);z-index:50;background:var(--brand-color-canvas-subtle);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex-wrap:wrap;align-items:center;gap:.5rem;min-width:0;min-height:2.75rem;padding-block:.375rem;padding-inline:.5rem;display:flex;position:relative}.canvas-toolbar .canvas-publish-share{flex-direction:row;flex:none;align-items:center;gap:0;display:flex}.canvas-publish-share:has(.hub-icon-button) .canvas-publish-button{border-start-end-radius:0;border-end-end-radius:0}.canvas-publish-share .hub-icon-button{border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:-1px}.canvas-publish-share button:focus-visible{z-index:1;position:relative}.canvas-publish-share .hub-icon-button,.canvas-publish-share .canvas-publish-button{height:var(--brand-control-small-size);min-height:var(--brand-control-small-size)}.canvas-toolbar .canvas-title{width:fit-content;min-width:0;max-width:max-content;color:var(--brand-color-text-muted,#656d76);font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:var(--brand-text-size-100);letter-spacing:-.015em;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;flex:1 1 0;justify-content:flex-start;margin-right:auto;font-weight:700;line-height:1.25rem;overflow:hidden}.canvas-toolbar .canvas-title>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.canvas-toolbar .canvas-title:hover{background:var(--brand-button-subtle-bgColor-hover)}.canvas-toolbar .canvas-title:focus-visible{outline:2px solid var(--hub-accent);outline-offset:2px}.canvas-toolbar button{flex-shrink:0}.canvas-toolbar button:is([aria-pressed=true],[aria-expanded=true]):not(.canvas-title,.canvas-publish-button):not(:disabled):not([aria-disabled=true]){background-color:var(--hub-toolbar-selected-bg)}.canvas-toolbar button:is([aria-pressed=true],[aria-expanded=true]):not(.canvas-title,.canvas-publish-button):not(:disabled):not([aria-disabled=true]):is(:hover,:active){background-color:var(--hub-toolbar-selected-hover-bg)}.canvas-review-controls-slot{align-items:center;display:flex}.canvas-publish-button[aria-busy=true] svg{animation:1s linear infinite canvas-publish-spin}@keyframes canvas-publish-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.canvas-publish-button[aria-busy=true] svg{animation:none}}@media (width<=30rem){.canvas-toolbar{padding-inline:.625rem}}@media (width<1024px){.canvas-toolbar .canvas-toolbar-compact-button{width:var(--brand-control-small-size);min-width:var(--brand-control-small-size);gap:0;padding-inline:0}.canvas-toolbar .canvas-toolbar-button-label{display:none}}*,:before,:after{box-sizing:border-box}body,h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd{margin:0}ul[role=list],ol[role=list]{list-style:none}html,html:focus-within{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html,html:focus-within{scroll-behavior:auto}}body{min-height:100vh;line-height:1.5}a:not([class]){-webkit-text-decoration-skip:ink;-webkit-text-decoration-skip-ink:auto;text-decoration-skip-ink:auto}img,picture{max-width:100%}input,button,textarea,select{font-family:inherit}:root,[data-color-mode=light]{--base-color-scale-black-0:#000;--base-color-scale-transparent:#fff0;--base-color-scale-white-0:#fff;--base-color-scale-gray-0:#f2f5f3;--base-color-scale-gray-1:#e4ebe6;--base-color-scale-gray-2:#d2d9d4;--base-color-scale-gray-3:#c4ccc6;--base-color-scale-gray-4:#b6bfb8;--base-color-scale-gray-5:#96a199;--base-color-scale-gray-6:#77827a;--base-color-scale-gray-7:#58635b;--base-color-scale-gray-8:#353d37;--base-color-scale-gray-9:#191f1b;--base-color-scale-blue-0:#ddf4ff;--base-color-scale-blue-1:#bcecff;--base-color-scale-blue-2:#8dd6ff;--base-color-scale-blue-3:#5fb9ff;--base-color-scale-blue-4:#3094ff;--base-color-scale-blue-5:#0377ff;--base-color-scale-blue-6:#0055d5;--base-color-scale-blue-7:#0040a7;--base-color-scale-blue-8:#002f7a;--base-color-scale-blue-9:#001c4d;--base-color-scale-green-0:#ebf9f4;--base-color-scale-green-1:#bfffd1;--base-color-scale-green-2:#8cf2a6;--base-color-scale-green-3:#5fed83;--base-color-scale-green-4:#23ea57;--base-color-scale-green-5:#0fbf3e;--base-color-scale-green-6:#08872b;--base-color-scale-green-7:#0d6731;--base-color-scale-green-8:#0e4a2e;--base-color-scale-green-9:#0d3024;--base-color-scale-yellow-0:#fff8c5;--base-color-scale-yellow-1:#ffe777;--base-color-scale-yellow-2:#ffd743;--base-color-scale-yellow-3:#fabf21;--base-color-scale-yellow-4:#db9d00;--base-color-scale-yellow-5:#be7d00;--base-color-scale-yellow-6:#a06100;--base-color-scale-yellow-7:#824800;--base-color-scale-yellow-8:#653200;--base-color-scale-yellow-9:#471f00;--base-color-scale-orange-0:#fff1e5;--base-color-scale-orange-1:#fcceab;--base-color-scale-orange-2:#f4a876;--base-color-scale-orange-3:#f08a3a;--base-color-scale-orange-4:#da7210;--base-color-scale-orange-5:#b85b06;--base-color-scale-orange-6:#954502;--base-color-scale-orange-7:#703100;--base-color-scale-orange-8:#5c2300;--base-color-scale-orange-9:#471700;--base-color-scale-red-0:#ffebe9;--base-color-scale-red-1:#ffcecb;--base-color-scale-red-2:#ffaba8;--base-color-scale-red-3:#ff8182;--base-color-scale-red-4:#fa4549;--base-color-scale-red-5:#cf2230;--base-color-scale-red-6:#ae0b29;--base-color-scale-red-7:#860620;--base-color-scale-red-8:#730019;--base-color-scale-red-9:#420011;--base-color-scale-purple-0:#f0e5ff;--base-color-scale-purple-1:#dbbffd;--base-color-scale-purple-2:#c898fd;--base-color-scale-purple-3:#b870ff;--base-color-scale-purple-4:#9f51fa;--base-color-scale-purple-5:#8534f3;--base-color-scale-purple-6:#6619e1;--base-color-scale-purple-7:#43179e;--base-color-scale-purple-8:#26115f;--base-color-scale-purple-9:#160048;--base-color-scale-pink-0:#fff0fc;--base-color-scale-pink-1:#ffc9f2;--base-color-scale-pink-2:#f67ed2;--base-color-scale-pink-3:#ff80d2;--base-color-scale-pink-4:#ff4ac0;--base-color-scale-pink-5:#ef2aa4;--base-color-scale-pink-6:#ca2186;--base-color-scale-pink-7:#952866;--base-color-scale-pink-8:#651643;--base-color-scale-pink-9:#3d0a28;--base-color-scale-coral-0:#fff0eb;--base-color-scale-coral-1:#ffcab8;--base-color-scale-coral-2:#ffa387;--base-color-scale-coral-3:#ff7b56;--base-color-scale-coral-4:#fe4c25;--base-color-scale-coral-5:#e13f1b;--base-color-scale-coral-6:#c53211;--base-color-scale-coral-7:#a22710;--base-color-scale-coral-8:#801e0f;--base-color-scale-coral-9:#500a00;--base-color-scale-lemon-0:#fdf5b3;--base-color-scale-lemon-1:#f5e36b;--base-color-scale-lemon-2:#f2da3b;--base-color-scale-lemon-3:#e1c50f;--base-color-scale-lemon-4:#c7a60b;--base-color-scale-lemon-5:#a98906;--base-color-scale-lemon-6:#806803;--base-color-scale-lemon-7:#614d01;--base-color-scale-lemon-8:#413200;--base-color-scale-lemon-9:#322400;--base-color-scale-lime-0:#f3fec8;--base-color-scale-lime-1:#e8fc97;--base-color-scale-lime-2:#dcfa67;--base-color-scale-lime-3:#d1f441;--base-color-scale-lime-4:#b2de28;--base-color-scale-lime-5:#92c219;--base-color-scale-lime-6:#698e17;--base-color-scale-lime-7:#425e13;--base-color-scale-lime-8:#2c440b;--base-color-scale-lime-9:#182c01;--base-color-scale-teal-0:#daf9f5;--base-color-scale-teal-1:#a4efe8;--base-color-scale-teal-2:#6ee5dc;--base-color-scale-teal-3:#39dad2;--base-color-scale-teal-4:#23b1ae;--base-color-scale-teal-5:#197b7b;--base-color-scale-teal-6:#136061;--base-color-scale-teal-7:#024b4d;--base-color-scale-teal-8:#083d3d;--base-color-scale-teal-9:#052b2c;--base-color-scale-indigo-0:#eff2ff;--base-color-scale-indigo-1:#d4dbff;--base-color-scale-indigo-2:#b3c1fd;--base-color-scale-indigo-3:#8e9df7;--base-color-scale-indigo-4:#6b7bef;--base-color-scale-indigo-5:#4956e5;--base-color-scale-indigo-6:#2d3dd7;--base-color-scale-indigo-7:#262dae;--base-color-scale-indigo-8:#212183;--base-color-scale-indigo-9:#12144f}[data-color-mode=dark]{--base-color-scale-black-0:#000;--base-color-scale-transparent:#0000;--base-color-scale-white-0:#fff;--base-color-scale-gray-0:#d2d9d4;--base-color-scale-gray-1:#c4ccc6;--base-color-scale-gray-2:#a4aea6;--base-color-scale-gray-3:#7c8980;--base-color-scale-gray-4:#58635b;--base-color-scale-gray-5:#353d37;--base-color-scale-gray-6:#262c28;--base-color-scale-gray-7:#191f1b;--base-color-scale-gray-8:#0f1511;--base-color-scale-gray-9:#060907;--base-color-scale-blue-0:#c2edff;--base-color-scale-blue-1:#a2daff;--base-color-scale-blue-2:#78bafe;--base-color-scale-blue-3:#3094ff;--base-color-scale-blue-4:#0377ff;--base-color-scale-blue-5:#0a50db;--base-color-scale-blue-6:#1530b7;--base-color-scale-blue-7:#082a8f;--base-color-scale-blue-8:#052063;--base-color-scale-blue-9:#000839;--base-color-scale-green-0:#cdfcd9;--base-color-scale-green-1:#8cf2a6;--base-color-scale-green-2:#5fed83;--base-color-scale-green-3:#23ea57;--base-color-scale-green-4:#0fbf3e;--base-color-scale-green-5:#08872b;--base-color-scale-green-6:#0d6731;--base-color-scale-green-7:#0e422c;--base-color-scale-green-8:#0d3024;--base-color-scale-green-9:#0a241b;--base-color-scale-yellow-0:#f8e3a1;--base-color-scale-yellow-1:#f7d162;--base-color-scale-yellow-2:#fabf21;--base-color-scale-yellow-3:#db9d00;--base-color-scale-yellow-4:#be7d00;--base-color-scale-yellow-5:#a06100;--base-color-scale-yellow-6:#834800;--base-color-scale-yellow-7:#653200;--base-color-scale-yellow-8:#471f00;--base-color-scale-yellow-9:#2a1000;--base-color-scale-orange-0:#ffe2cc;--base-color-scale-orange-1:#fab580;--base-color-scale-orange-2:#f08a3a;--base-color-scale-orange-3:#ea7110;--base-color-scale-orange-4:#d56101;--base-color-scale-orange-5:#b35101;--base-color-scale-orange-6:#924100;--base-color-scale-orange-7:#703100;--base-color-scale-orange-8:#572400;--base-color-scale-orange-9:#3d1800;--base-color-scale-red-0:#ffd9d6;--base-color-scale-red-1:#feb2ae;--base-color-scale-red-2:#fd8986;--base-color-scale-red-3:#fc5c5d;--base-color-scale-red-4:#fa383d;--base-color-scale-red-5:#d31231;--base-color-scale-red-6:#ae0b29;--base-color-scale-red-7:#860620;--base-color-scale-red-8:#5e0217;--base-color-scale-red-9:#33000d;--base-color-scale-purple-0:#eadbff;--base-color-scale-purple-1:#d3b3fe;--base-color-scale-purple-2:#c08bfc;--base-color-scale-purple-3:#a665f9;--base-color-scale-purple-4:#8b40f5;--base-color-scale-purple-5:#6619e1;--base-color-scale-purple-6:#43179e;--base-color-scale-purple-7:#26115f;--base-color-scale-purple-8:#160048;--base-color-scale-purple-9:#0e022c;--base-color-scale-pink-0:#ffdbf7;--base-color-scale-pink-1:#fcabe7;--base-color-scale-pink-2:#f67ed2;--base-color-scale-pink-3:#ed55ba;--base-color-scale-pink-4:#e22d9f;--base-color-scale-pink-5:#ca2186;--base-color-scale-pink-6:#961c66;--base-color-scale-pink-7:#741550;--base-color-scale-pink-8:#520e39;--base-color-scale-pink-9:#30081f;--base-color-scale-coral-0:#ffd5c7;--base-color-scale-coral-1:#fdb7a1;--base-color-scale-coral-2:#fa9072;--base-color-scale-coral-3:#f66945;--base-color-scale-coral-4:#ef4319;--base-color-scale-coral-5:#c53211;--base-color-scale-coral-6:#a22710;--base-color-scale-coral-7:#801e0f;--base-color-scale-coral-8:#500a00;--base-color-scale-coral-9:#3c0000;--base-color-scale-lemon-0:#fcf2a5;--base-color-scale-lemon-1:#f9e76a;--base-color-scale-lemon-2:#f4da38;--base-color-scale-lemon-3:#e4c411;--base-color-scale-lemon-4:#c7a60b;--base-color-scale-lemon-5:#a98906;--base-color-scale-lemon-6:#876a04;--base-color-scale-lemon-7:#654d02;--base-color-scale-lemon-8:#423101;--base-color-scale-lemon-9:#241900;--base-color-scale-lime-0:#edffc9;--base-color-scale-lime-1:#dcff96;--base-color-scale-lime-2:#cdf041;--base-color-scale-lime-3:#b1e119;--base-color-scale-lime-4:#88b80f;--base-color-scale-lime-5:#608a10;--base-color-scale-lime-6:#3e5f0f;--base-color-scale-lime-7:#22360b;--base-color-scale-lime-8:#142a08;--base-color-scale-lime-9:#091d05;--base-color-scale-teal-0:#cff7f2;--base-color-scale-teal-1:#99f1e8;--base-color-scale-teal-2:#61eee3;--base-color-scale-teal-3:#26ede2;--base-color-scale-teal-4:#10dcd4;--base-color-scale-teal-5:#0bbab6;--base-color-scale-teal-6:#079695;--base-color-scale-teal-7:#047172;--base-color-scale-teal-8:#024b4d;--base-color-scale-teal-9:#052d2e;--base-color-scale-indigo-0:#dbe3ff;--base-color-scale-indigo-1:#b3c1fd;--base-color-scale-indigo-2:#8d9ff8;--base-color-scale-indigo-3:#6a7df0;--base-color-scale-indigo-4:#4a5ce5;--base-color-scale-indigo-5:#2d3dd7;--base-color-scale-indigo-6:#232fb3;--base-color-scale-indigo-7:#212183;--base-color-scale-indigo-8:#161962;--base-color-scale-indigo-9:#0d103f}:root{--base-size-128:8rem;--base-size-112:7rem;--base-size-96:6rem;--base-size-88:5.5rem;--base-size-80:5rem;--base-size-64:4rem;--base-size-60:3.75rem;--base-size-48:3rem;--base-size-44:2.75rem;--base-size-40:2.5rem;--base-size-36:2.25rem;--base-size-32:2rem;--base-size-28:1.75rem;--base-size-24:1.5rem;--base-size-20:1.25rem;--base-size-16:1rem;--base-size-12:.75rem;--base-size-8:.5rem;--base-size-6:.375rem;--base-size-4:.25rem;--base-size-2:.125rem;--base-text-weight-heavy:900;--base-text-weight-extrabold:800;--base-text-weight-bold:700;--base-text-weight-semibold:600;--base-text-weight-medium:500;--base-text-weight-normal:400;--base-text-weight-regular:400;--base-text-weight-light:300;--base-text-weight-extralight:200;--brand-animation-variant-scaleInLeft-end:1;--brand-animation-variant-scaleInLeft-start:.9;--brand-animation-variant-scaleInLeft-distance:1.25rem;--brand-animation-variant-scaleInRight-end:1;--brand-animation-variant-scaleInRight-start:.9;--brand-animation-variant-scaleInRight-distance:-1.25rem;--brand-animation-variant-scaleInTop-distance: ;--brand-animation-variant-scaleIn-end:1;--brand-animation-variant-scaleIn-start:.96;--brand-animation-variant-scaleInDown-end:1;--brand-animation-variant-scaleInDown-start:0;--brand-animation-variant-scaleInDown-distance:-3.125rem;--brand-animation-variant-scaleInUp-end:1;--brand-animation-variant-scaleInUp-start:.96;--brand-animation-variant-scaleInUp-distance:1.5rem;--brand-animation-variant-slideInRight-distance:-.9375rem;--brand-animation-variant-slideInLeft-distance:.9375rem;--brand-animation-variant-slideInDown-distance:-.9375rem;--brand-animation-variant-slideInUp-distance:.9375rem;--brand-animation-transition-default:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default);--brand-animation-easing-glide:cubic-bezier(.33, 1, .68, 1);--brand-animation-easing-default:cubic-bezier(.16, 1, .3, 1);--brand-animation-duration-extended:.7s;--brand-animation-duration-default:.6s;--brand-animation-duration-fast:.3s;--brand-animation-duration-faster:.2s;--brand-control-animation-easing:var(--brand-animation-easing-glide);--brand-control-animation-duration:80ms;--brand-control-large-size:3.75rem;--brand-control-medium-size:2.6875rem;--brand-controlStack-large-gap-spacious:var(--base-size-12);--brand-controlStack-large-gap-condensed:var(--base-size-8);--brand-controlStack-large-gap-auto:var(--base-size-8);--brand-controlStack-medium-gap-spacious:var(--base-size-12);--brand-controlStack-medium-gap-condensed:var(--base-size-8);--brand-controlStack-small-gap-spacious:var(--base-size-16);--brand-controlStack-small-gap-condensed:var(--base-size-8);--brand-stack-gap-spacious:var(--base-size-48);--brand-stack-gap-normal:var(--base-size-24);--brand-stack-gap-condensed:var(--base-size-16);--brand-stack-padding-spacious:var(--base-size-48);--brand-stack-padding-normal:var(--base-size-24);--brand-stack-padding-condensed:var(--base-size-16);--brand-box-spacing-spacious:var(--base-size-48);--brand-box-spacing-normal:var(--base-size-24);--brand-box-spacing-condensed:var(--base-size-16);--brand-control-large-gap:var(--base-size-16);--brand-control-large-paddingInline-spacious:var(--base-size-32);--brand-control-large-paddingInline-normal:var(--base-size-20);--brand-control-large-paddingInline-condensed:var(--base-size-16);--brand-control-large-paddingBlock-normal:var(--base-size-20);--brand-control-large-paddingBlock-condensed:var(--base-size-12);--brand-control-large-lineBoxHeight:var(--base-size-20);--brand-control-medium-gap:var(--base-size-12);--brand-control-medium-paddingInline-spacious:var(--base-size-28);--brand-control-medium-paddingInline-normal:var(--base-size-16);--brand-control-medium-paddingInline-condensed:var(--base-size-12);--brand-control-medium-paddingBlock-normal:var(--base-size-16);--brand-control-medium-paddingBlock-condensed:var(--base-size-6);--brand-control-medium-lineBoxHeight:var(--base-size-16);--brand-control-small-gap:var(--base-size-8);--brand-control-small-paddingInline-spacious:var(--base-size-24);--brand-control-small-paddingInline-normal:var(--base-size-12);--brand-control-small-paddingInline-condensed:var(--base-size-8);--brand-control-small-paddingBlock:var(--base-size-8);--brand-control-small-lineBoxHeight:var(--base-size-12);--brand-control-small-size:var(--base-size-32);--brand-control-minTarget-coarse:var(--base-size-44);--brand-control-minTarget-fine:var(--base-size-16);--brand-text-style-italic-10:"ital" 10;--brand-text-style-italic-9:"ital" 9;--brand-text-style-italic-8:"ital" 8;--brand-text-style-italic-7:"ital" 7;--brand-text-style-italic-6:"ital" 6;--brand-text-style-italic-5:"ital" 5;--brand-text-style-italic-4:"ital" 4;--brand-text-style-italic-3:"ital" 3;--brand-text-style-italic-2:"ital" 2;--brand-text-style-italic-1:"ital" 1;--brand-text-letterSpacing-1000:0;--brand-text-letterSpacing-900:0;--brand-text-letterSpacing-800:0;--brand-text-letterSpacing-700:0;--brand-text-letterSpacing-600:0;--brand-text-letterSpacing-500:0;--brand-text-letterSpacing-400:0;--brand-text-letterSpacing-350:.18px;--brand-text-letterSpacing-300:.18px;--brand-text-letterSpacing-200:.24px;--brand-text-letterSpacing-100:.21px;--brand-text-lineHeight-1000:1.149;--brand-text-lineHeight-900:1.2;--brand-text-lineHeight-800:1.2;--brand-text-lineHeight-700:1.2;--brand-text-lineHeight-600:1.3;--brand-text-lineHeight-500:1.3;--brand-text-lineHeight-400:1.4;--brand-text-lineHeight-350:1.5;--brand-text-lineHeight-300:1.5;--brand-text-lineHeight-200:1.5;--brand-text-lineHeight-100:1.5;--brand-text-size-1000:2.5rem;--brand-text-size-900:2.25rem;--brand-text-size-800:2rem;--brand-text-size-700:1.75rem;--brand-text-size-600:1.5rem;--brand-text-size-500:1.375rem;--brand-text-size-400:1.25rem;--brand-text-size-350:1.125rem;--brand-text-size-300:1.125rem;--brand-text-size-200:1rem;--brand-text-size-100:.875rem;--brand-text-weight-heavy:550;--brand-text-weight-extrabold:543;--brand-text-weight-bold:537;--brand-text-weight-semibold:525;--brand-text-weight-medium:500;--brand-text-weight-normal:400;--brand-text-weight-regular:400;--brand-text-weight-light:400;--brand-text-weight-extralight:400;--brand-text-weight-1000:var(--base-text-weight-normal);--brand-text-weight-900:var(--base-text-weight-normal);--brand-text-weight-800:var(--base-text-weight-normal);--brand-text-weight-700:var(--base-text-weight-normal);--brand-text-weight-600:var(--base-text-weight-normal);--brand-text-weight-500:var(--base-text-weight-normal);--brand-text-weight-400:var(--base-text-weight-normal);--brand-text-weight-350:var(--base-text-weight-normal);--brand-text-weight-300:var(--base-text-weight-normal);--brand-text-weight-200:var(--base-text-weight-normal);--brand-text-weight-100:var(--base-text-weight-normal);--brand-text-subhead-lineHeight-large:1.3;--brand-text-subhead-lineHeight-medium:1.3;--brand-text-subhead-weight-large:475;--brand-text-subhead-weight-medium:550;--brand-text-subhead-letterSpacing-large:.1px;--brand-text-subhead-letterSpacing-medium:.24px;--brand-text-subhead-size-large:1.125rem;--brand-text-subhead-size-medium:1rem;--brand-heading-lineHeight-1000:1.1;--brand-heading-lineHeight-900:1.1;--brand-heading-lineHeight-800:1.2;--brand-heading-lineHeight-700:1.2;--brand-heading-lineHeight-600:1.3;--brand-heading-lineHeight-500:1.3;--brand-heading-lineHeight-400:1.3;--brand-heading-letterSpacing-1000:0;--brand-heading-letterSpacing-900:0;--brand-heading-letterSpacing-800:0;--brand-heading-letterSpacing-700:0;--brand-heading-letterSpacing-600:0;--brand-heading-letterSpacing-500:0;--brand-heading-letterSpacing-400:0;--brand-heading-weight-1000:440;--brand-heading-weight-900:440;--brand-heading-weight-800:465;--brand-heading-weight-700:460;--brand-heading-weight-600:460;--brand-heading-weight-500:480;--brand-heading-weight-400:480;--brand-fontStack-monospace:"Mona Sans Mono", monospace;--brand-fontStack-sansSerifAlt:"Hubot Sans", "Hubot SansHeaderFallback", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--brand-fontStack-sansSerif:"Mona Sans", "MonaSansFallback", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--brand-fontStack-system:-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--brand-heading-fontFamilyAlt:var(--brand-fontStack-sansSerifAlt);--brand-heading-fontFamily:var(--brand-fontStack-sansSerif);--brand-body-fontFamilyAlt:var(--brand-fontStack-sansSerifAlt);--brand-body-fontFamily:var(--brand-fontStack-sansSerif)}@media (width>=768px){:root{--brand-text-lineHeight-1000:1.08;--brand-text-lineHeight-900:1.2;--brand-text-lineHeight-800:1.2;--brand-text-size-1000:3.5rem;--brand-text-size-900:3rem;--brand-text-size-800:2.5rem;--brand-text-size-700:2.125rem;--brand-text-size-600:1.75rem;--brand-text-size-500:1.5rem;--brand-text-size-400:1.25rem;--brand-text-subhead-weight-large:525;--brand-heading-lineHeight-1000:1.05;--brand-heading-lineHeight-900:1.05;--brand-heading-weight-1000:440;--brand-heading-weight-900:440;--brand-heading-weight-800:465;--brand-heading-weight-700:460}}@media (width>=1012px){:root{--brand-text-letterSpacing-1000:-.035em;--brand-text-lineHeight-1000:1.08;--brand-text-lineHeight-900:1.1;--brand-text-lineHeight-800:1.18;--brand-text-lineHeight-500:1.35;--brand-text-size-1000:4rem;--brand-text-size-900:3.5rem;--brand-text-size-800:3rem;--brand-text-size-700:2.5rem;--brand-text-size-600:2.125rem;--brand-text-size-500:1.75rem;--brand-text-size-400:1.375rem;--brand-text-size-350:1.25rem;--brand-text-subhead-weight-large:500;--brand-text-subhead-size-large:1.25rem;--brand-heading-lineHeight-1000:1;--brand-heading-lineHeight-900:1;--brand-heading-lineHeight-600:1.2;--brand-heading-letterSpacing-1000:-.014rem;--brand-heading-weight-1000:425;--brand-heading-weight-900:440;--brand-heading-weight-800:440;--brand-heading-weight-700:460}}:root{--brand-breakpoint-xxlarge:87.5rem;--brand-breakpoint-xlarge:80rem;--brand-breakpoint-large:63.25rem;--brand-breakpoint-medium:48rem;--brand-breakpoint-small:34rem;--brand-breakpoint-xsmall:20rem;--brand-borderRadius-full:624.938rem;--brand-borderWidth-thicker:max(4px, .25rem);--brand-borderWidth-thick:max(2px, .125rem);--brand-borderWidth-thin:max(1px, .0625rem);--brand-borderRadius-xlarge:var(--base-size-24);--brand-borderRadius-large:var(--base-size-16);--brand-borderRadius-medium:var(--base-size-8);--brand-borderRadius-small:var(--base-size-4);--brand-borderInset-thicker:inset 0 0 0 var(--brand-borderWidth-thicker);--brand-borderInset-thick:inset 0 0 0 var(--brand-borderWidth-thick);--brand-borderInset-thin:inset 0 0 0 var(--brand-borderWidth-thin)}:root,[data-color-mode=light]{--brand-color-success-fg:var(--base-color-scale-green-6);--brand-color-success-emphasis:var(--base-color-scale-green-5);--brand-color-success-muted:#8cf2a699;--brand-color-success-subtle:var(--base-color-scale-green-1);--brand-color-danger-fg:var(--base-color-scale-red-5);--brand-color-danger-emphasis:var(--base-color-scale-red-5);--brand-color-danger-muted:#ffaba899;--brand-color-danger-subtle:var(--base-color-scale-red-0);--brand-color-error-fg:var(--brand-color-danger-fg);--brand-color-error-emphasis:var(--brand-color-danger-emphasis);--brand-color-error-muted:var(--brand-color-danger-muted);--brand-color-error-subtle:var(--brand-color-danger-subtle);--brand-color-accent-primary:var(--base-color-scale-green-7);--brand-color-accent-secondary:var(--base-color-scale-yellow-5);--brand-color-text-default:var(--base-color-scale-black-0);--brand-color-text-muted:var(--base-color-scale-gray-7);--brand-color-text-subtle:var(--brand-color-text-muted);--brand-color-text-onEmphasis:var(--base-color-scale-white-0);--brand-color-text-emphasized:var(--base-color-scale-green-6);--brand-color-text-link-rest:var(--base-color-scale-blue-6);--brand-color-text-link-pressed:var(--base-color-scale-blue-8);--brand-color-text-danger:#cf222e;--brand-color-text-error:var(--brand-color-text-danger);--brand-color-neutral-emphasisPlus:var(--base-color-scale-gray-8);--brand-color-neutral-emphasis:var(--base-color-scale-gray-6);--brand-color-neutral-muted:#c4ccc6fe;--brand-color-neutral-subtle:#e4ebe6fe;--brand-color-canvas-default:var(--base-color-scale-white-0);--brand-color-canvas-invert:var(--base-color-scale-black-0);--brand-color-canvas-overlay:var(--base-color-scale-white-0);--brand-color-canvas-inset:var(--base-color-scale-gray-0);--brand-color-canvas-subtle:var(--base-color-scale-gray-0);--brand-color-canvas-muted:#f9fbf9;--brand-color-border-default:var(--base-color-scale-gray-4);--brand-color-border-muted:var(--base-color-scale-gray-1);--brand-color-border-subtle:var(--base-color-scale-gray-2);--brand-color-focus:var(--base-color-scale-blue-5)}[data-color-mode=dark]{--brand-color-success-fg:var(--base-color-scale-green-3);--brand-color-success-emphasis:var(--base-color-scale-green-6);--brand-color-success-muted:#0d302499;--brand-color-success-subtle:#0e422cd9;--brand-color-danger-fg:var(--base-color-scale-red-4);--brand-color-danger-emphasis:var(--base-color-scale-red-5);--brand-color-danger-muted:#5e021799;--brand-color-danger-subtle:#fa383dd9;--brand-color-error-fg:var(--brand-color-danger-fg);--brand-color-error-emphasis:var(--brand-color-danger-emphasis);--brand-color-error-muted:var(--brand-color-danger-muted);--brand-color-error-subtle:var(--brand-color-danger-subtle);--brand-color-accent-primary:var(--base-color-scale-green-2);--brand-color-accent-secondary:var(--base-color-scale-yellow-3);--brand-color-text-default:var(--base-color-scale-white-0);--brand-color-text-muted:var(--base-color-scale-gray-2);--brand-color-text-subtle:var(--brand-color-text-muted);--brand-color-text-onEmphasis:var(--base-color-scale-black-0);--brand-color-text-emphasized:var(--base-color-scale-green-3);--brand-color-text-link-rest:var(--base-color-scale-blue-1);--brand-color-text-link-pressed:var(--base-color-scale-blue-1);--brand-color-text-danger:#ff8182;--brand-color-text-error:var(--brand-color-text-danger);--brand-color-neutral-emphasisPlus:var(--base-color-scale-gray-3);--brand-color-neutral-emphasis:var(--base-color-scale-gray-3);--brand-color-neutral-muted:#7c8980fe;--brand-color-neutral-subtle:#7c8980;--brand-color-canvas-default:var(--base-color-scale-black-0);--brand-color-canvas-invert:var(--base-color-scale-white-0);--brand-color-canvas-overlay:var(--base-color-scale-gray-6);--brand-color-canvas-inset:var(--base-color-scale-black-0);--brand-color-canvas-subtle:var(--base-color-scale-gray-8);--brand-color-canvas-muted:#090d0a;--brand-color-border-default:var(--base-color-scale-gray-5);--brand-color-border-muted:var(--base-color-scale-gray-7);--brand-color-border-subtle:var(--base-color-scale-gray-6);--brand-color-focus:var(--base-color-scale-blue-3)}.visually-hidden{clip:rect(0, 0, 0, 0);word-wrap:normal;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}:root{--brand-Grid-spacing-margin:var(--base-size-16);--brand-Grid-spacing-column-gap:var(--base-size-16);--brand-Grid-spacing-row:var(--base-size-16)}@media (width>=768px){:root{--brand-Grid-spacing-margin:var(--base-size-40);--brand-Grid-spacing-column-gap:var(--base-size-32);--brand-Grid-spacing-row:var(--base-size-32)}}@media (width>=1280px){:root{--brand-Grid-spacing-margin:var(--base-size-16);--brand-Grid-spacing-column-gap:var(--base-size-48);--brand-Grid-spacing-row:var(--base-size-48)}}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-Grid-column-bgColor-overlay:#fb51544d}.Primer_Brand__Grid-module__Grid___q48mT{grid-template-columns:repeat(12,minmax(0,1fr));max-width:1280px;margin:0 auto;display:grid}.Primer_Brand__Grid-module__Grid--columnGap-default___NxZ0V{grid-column-gap:var(--brand-Grid-spacing-column-gap)}.Primer_Brand__Grid-module__Grid--columnGap-none___Qh5GF{grid-column-gap:0}.Primer_Brand__Grid-module__Grid--rowGap-default___X5kJS{grid-row-gap:var(--brand-Grid-spacing-row)}.Primer_Brand__Grid-module__Grid--rowGap-none___WSM_k{grid-row-gap:0}.Primer_Brand__Grid-module__Grid--full-width___pIgWW{width:100%;max-width:none}.Primer_Brand__Grid-module__Grid___q48mT+.Primer_Brand__Grid-module__Grid___q48mT{margin-top:var(--brand-Grid-spacing-row)}.Primer_Brand__Grid-module__Grid___q48mT .Primer_Brand__Grid-module__Grid___q48mT{margin:0;padding-inline:0}.Primer_Brand__Grid-module__Grid__column___HTpsw{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid--has-overlay___M9Cs0 .Primer_Brand__Grid-module__Grid__column___HTpsw{background-color:var(--brand-Grid-column-bgColor-overlay);min-height:var(--base-size-24)}.Primer_Brand__Grid-module__Grid--has-gutters___KoJD2{padding-inline:var(--brand-Grid-spacing-margin)}.Primer_Brand__Grid-module__Grid__column--span-1___T7v1_{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--span-2___r4qRu{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--span-3___Tnlwe{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--span-4___Q9jA0{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--span-5___UpILx{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--span-6___vUUep{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--span-7___lfMLa{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--span-8___qarGZ{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--span-9___L2waY{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--span-10___VRJQp{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--span-11___pjEQO{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--span-12___Tn1Hg{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--start-1___jF8hC{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--start-2___S9EWU{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--start-3___GwcI1{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--start-4___BIVqR{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--start-5___yTruZ{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--start-6___FAtcW{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--start-7___Jnzaq{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--start-8___CLuiS{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--start-9___hhyfE{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--start-10___ojxEo{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--start-11___oBenU{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--start-12___wQnvA{grid-column-start:12}@media screen and (width>=0){.Primer_Brand__Grid-module__Grid__column--xsmall-span-1___srexO{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--xsmall-span-2___XrAnt{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--xsmall-span-3___Aps_z{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--xsmall-span-4___OSsWO{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--xsmall-span-5___ShR77{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--xsmall-span-6___V4QJq{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--xsmall-span-7___DtdFA{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--xsmall-span-8___e5M5o{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--xsmall-span-9___sdZ5a{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--xsmall-span-10___YuS1a{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--xsmall-span-11____RxYR{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--xsmall-span-12___brXS7{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--xsmall-start-1___Y9JJq{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--xsmall-start-2___ruZTF{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--xsmall-start-3___yEBif{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--xsmall-start-4___QPFc2{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--xsmall-start-5___WAqd0{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--xsmall-start-6___T1rhy{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--xsmall-start-7___uMQT1{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--xsmall-start-8___LUADA{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--xsmall-start-9___CBnBu{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--xsmall-start-10___EPRyw{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--xsmall-start-11___UbCAy{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--xsmall-start-12___gYCaa{grid-column-start:12}}@media screen and (width>=34rem){.Primer_Brand__Grid-module__Grid__column--small-span-1___rBTjf{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--small-span-2___SHQM3{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--small-span-3___cbAS8{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--small-span-4___tv973{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--small-span-5___EBkra{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--small-span-6___OYZPl{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--small-span-7___ymqG4{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--small-span-8___qy9wb{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--small-span-9___hWJAx{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--small-span-10___apy3R{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--small-span-11___tsz0q{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--small-span-12___NdAWP{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--small-start-1___epLTD{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--small-start-2___wlXcD{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--small-start-3___YFtvP{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--small-start-4___SOC6v{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--small-start-5___EVXuW{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--small-start-6___t1yYl{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--small-start-7___MDozK{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--small-start-8___CR0Zw{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--small-start-9___W0svP{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--small-start-10___vxEwX{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--small-start-11___orcQZ{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--small-start-12___o4V7W{grid-column-start:12}}@media screen and (width>=48rem){.Primer_Brand__Grid-module__Grid__column--medium-span-1___BiHOE{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--medium-span-2___nANvY{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--medium-span-3___GpBD0{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--medium-span-4___zBxBa{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--medium-span-5___CnPWN{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--medium-span-6___DACuh{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--medium-span-7___R2Isv{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--medium-span-8___KI5ir{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--medium-span-9___is8dv{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--medium-span-10___eN2sH{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--medium-span-11___anfim{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--medium-span-12___eT5YS{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--medium-start-1___bCFG1{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--medium-start-2___ZxYOX{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--medium-start-3___aPUJ0{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--medium-start-4___VTIjA{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--medium-start-5___ccI5l{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--medium-start-6___Yc14i{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--medium-start-7___HOZSW{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--medium-start-8___G8VdF{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--medium-start-9___Ebcy8{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--medium-start-10___dY7pN{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--medium-start-11___hVffM{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--medium-start-12___N3mIQ{grid-column-start:12}}@media screen and (width>=63.25rem){.Primer_Brand__Grid-module__Grid__column--large-span-1___Nfkto{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--large-span-2___GyGH4{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--large-span-3___iwGxK{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--large-span-4___eJREG{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--large-span-5___rCJ_b{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--large-span-6___JNphY{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--large-span-7___TySdj{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--large-span-8___dkJwh{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--large-span-9___aamnY{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--large-span-10___nH4Bt{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--large-span-11___mDo3B{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--large-span-12___zSL6d{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--large-start-1___Hc53V{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--large-start-2____RsQ_{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--large-start-3___DN5KJ{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--large-start-4___iKrrW{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--large-start-5___t3K5k{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--large-start-6___uFIIO{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--large-start-7___YeqWt{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--large-start-8___fmHfg{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--large-start-9___UIwRf{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--large-start-10___rOnsb{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--large-start-11___oPN0R{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--large-start-12___tZLO7{grid-column-start:12}}@media screen and (width>=80rem){.Primer_Brand__Grid-module__Grid__column--xlarge-span-1___VzjSN{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--xlarge-span-2___p1QuZ{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--xlarge-span-3___xvbnJ{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--xlarge-span-4___D_9gq{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--xlarge-span-5___AWQN4{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--xlarge-span-6___FY68d{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--xlarge-span-7___PDVrC{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--xlarge-span-8___Np3vn{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--xlarge-span-9___QnUTm{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--xlarge-span-10___GPYff{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--xlarge-span-11____dXqr{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--xlarge-span-12___Faxbf{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--xlarge-start-1___8hqMz{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--xlarge-start-2___aiylo{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--xlarge-start-3___Iuufu{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--xlarge-start-4___ynfkD{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--xlarge-start-5___smnkV{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--xlarge-start-6___Z4EoQ{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--xlarge-start-7___NCAWz{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--xlarge-start-8___CZ8J_{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--xlarge-start-9___yhpyy{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--xlarge-start-10___E5Jou{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--xlarge-start-11___OGVVw{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--xlarge-start-12____kw0D{grid-column-start:12}}@media screen and (width>=87.5rem){.Primer_Brand__Grid-module__Grid__column--xxlarge-span-1___K9YLn{grid-column:auto/span 1}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-2___FoOLk{grid-column:auto/span 2}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-3___AvRFb{grid-column:auto/span 3}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-4___wmisc{grid-column:auto/span 4}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-5___oSh5q{grid-column:auto/span 5}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-6___zg0Yr{grid-column:auto/span 6}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-7___CxtNE{grid-column:auto/span 7}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-8___r4GdW{grid-column:auto/span 8}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-9___mfOCW{grid-column:auto/span 9}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-10___xjus8{grid-column:auto/span 10}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-11___AZC4h{grid-column:auto/span 11}.Primer_Brand__Grid-module__Grid__column--xxlarge-span-12___DjdAU{grid-column:auto/span 12}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-1___HFYSu{grid-column-start:1}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-2___dBj41{grid-column-start:2}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-3___BX9bn{grid-column-start:3}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-4___FwEd9{grid-column-start:4}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-5____pwv6{grid-column-start:5}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-6___u1opn{grid-column-start:6}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-7___GuJAv{grid-column-start:7}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-8___Z7ZFc{grid-column-start:8}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-9___CcH1u{grid-column-start:9}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-10___sck1f{grid-column-start:10}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-11___VvIqo{grid-column-start:11}.Primer_Brand__Grid-module__Grid__column--xxlarge-start-12___MKYFP{grid-column-start:12}}.Primer_Brand__Animation-module__Animation___KNtEW{transition:var(--brand-animation-transition-default)}.Primer_Brand__Animation-module__Animation--fade-in___jUvJD{opacity:0;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--fade-in___jUvJD.Primer_Brand__Animation-module__Animation--active___g_UBK,.Primer_Brand__Animation-module__Animation--fade-out___CsyfK{opacity:1}.Primer_Brand__Animation-module__Animation--fade-out___CsyfK.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:0;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-up___ONnmI{opacity:0;transform:translateY(var(--brand-animation-variant-slideInUp-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-up___ONnmI.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateY(0)}.Primer_Brand__Animation-module__Animation--slide-in-down___bjmGv{opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-down___bjmGv.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateY(0)}.Primer_Brand__Animation-module__Animation--slide-in-left___iy5Js{opacity:0;transform:translateX(var(--brand-animation-variant-slideInLeft-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-left___iy5Js.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translate(0)}.Primer_Brand__Animation-module__Animation--slide-in-right___UZvNx{opacity:0;transform:translateX(var(--brand-animation-variant-slideInRight-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--slide-in-right___UZvNx.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translate(0)}.Primer_Brand__Animation-module__Animation--scale-in___P7xzG{opacity:0;transform:scale(var(--brand-animation-variant-scaleIn-start));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in___P7xzG.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:scale(--brand-animation-variant-scaleIn-end)}.Primer_Brand__Animation-module__Animation--scale-in-up___n0qDP{opacity:0;transform:scale(var(--brand-animation-variant-scaleInUp-start)) translateY(var(--brand-animation-variant-scaleInUp-distance));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-up___n0qDP.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:scale(var(--brand-animation-variant-scaleInUp-end)) translateY(0)}.Primer_Brand__Animation-module__Animation--scale-in-down___YEgko{opacity:0;transform:translateY(var(--brand-animation-variant-scaleInDown-distance)) scale(var(--brand-animation-variant-scaleInDown-start));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-down___YEgko.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateY(0) scale(var(--brand-animation-variant-scaleInDown-end))}.Primer_Brand__Animation-module__Animation--scale-in-right___jBPh4{opacity:0;transform:scale(var(--brand-animation-variant-scaleInRight-start)) translateX(var(--brand-animation-variant-scaleInRight-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-right___jBPh4.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateX(0) scale(var(--brand-animation-variant-scaleInRight-end))}.Primer_Brand__Animation-module__Animation--scale-in-left___g8_dC{opacity:0;transform:scale(var(--brand-animation-variant-scaleInLeft-start)) translateX(var(--brand-animation-variant-scaleInLeft-distance));transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__Animation-module__Animation--scale-in-left___g8_dC.Primer_Brand__Animation-module__Animation--active___g_UBK{opacity:1;transform:translateX(0) scale(var(--brand-animation-variant-scaleInLeft-end))}.Primer_Brand__Animation-module__Animation--fill-in-right___G_LYH{transform-origin:0;transition:transform var(--brand-animation-duration-default) var(--brand-animation-easing-default);transform:scaleX(0)}.Primer_Brand__Animation-module__Animation--fill-in-right___G_LYH.Primer_Brand__Animation-module__Animation--active___g_UBK{transform:scaleX(1)}.Primer_Brand__Animation-module__Animation--fill-in-top___AHELS{transform-origin:top;transition:transform var(--brand-animation-duration-extended) var(--brand-animation-easing-default);transform:scaleY(0)}.Primer_Brand__Animation-module__Animation--fill-in-top___AHELS.Primer_Brand__Animation-module__Animation--active___g_UBK{transform:scaleY(1)}.Primer_Brand__Animation-module__Animation--reveal-in-up___xMAnz{clip-path:inset(-100% 0 100%);transition:transform var(--brand-animation-duration-default) var(--brand-animation-easing-default), clip-path var(--brand-animation-duration-default) var(--brand-animation-easing-default);transform:translateY(100%)}.Primer_Brand__Animation-module__Animation--reveal-in-up___xMAnz.Primer_Brand__Animation-module__Animation--active___g_UBK{clip-path:inset(0 0 -.2em);transform:translateY(0)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Animation-module__Animation___KNtEW,.Primer_Brand__Animation-module__Animation___KNtEW:before,.Primer_Brand__Animation-module__Animation___KNtEW:after,.Primer_Brand__Animation-module__Animation___KNtEW *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Stack-module__Stack___tASKe{display:flex}.Primer_Brand__Stack-module__Stack--vertical___CFzE7{flex-direction:column}.Primer_Brand__Stack-module__Stack--horizontal___YJFas{flex-direction:row}.Primer_Brand__Stack-module__Stack-narrow--vertical___GDT_Z{flex-direction:column}.Primer_Brand__Stack-module__Stack-narrow--horizontal___Co6IL{flex-direction:row}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--vertical___TMpL8{flex-direction:column}.Primer_Brand__Stack-module__Stack-regular--horizontal___WDLyR{flex-direction:row}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--vertical___G1Eu6{flex-direction:column}.Primer_Brand__Stack-module__Stack-wide--horizontal___cvxh3{flex-direction:row}}.Primer_Brand__Stack-module__Stack--gap-none___M7T_v{gap:0}.Primer_Brand__Stack-module__Stack--gap-condensed___Xe9jx{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack--gap-normal___JEO7_{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack--gap-spacious___w5ugZ{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack--gap-4___Ig30K{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack--gap-8___fQ3Ul{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack--gap-12___hJNHc{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack--gap-16___gT_Of{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack--gap-20___eVLBq{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack--gap-24___TQnkj{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack--gap-28___Ao4f4{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack--gap-32___iSq9y{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack--gap-36___QzYro{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack--gap-40___m5Kys{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack--gap-44___grqBd{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack--gap-48___vhQgW{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack--gap-60___eZ7wt{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack--gap-64___XKCAY{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack--gap-80___GfDtU{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack--gap-88___IfwPj{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack--gap-96___wM4RB{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack--gap-112___Rva1x{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack--gap-128___KJAoH{gap:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-narrow--gap-none___YtqsL{gap:0}.Primer_Brand__Stack-module__Stack-narrow--gap-condensed___zwHUG{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack-narrow--gap-normal___smNw5{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack-narrow--gap-spacious___TX17G{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack--padding-none___RCMh9{padding:0}.Primer_Brand__Stack-module__Stack--padding-condensed___mo7Aq{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack--padding-normal___ySRTI{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack--padding-spacious___REyye{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack--padding-4___aj4uj{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack--padding-8___roPlm{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack--padding-12___x5qIX{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack--padding-16___ZFRO_{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack--padding-20___pi8jv{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack--padding-24___iHVEv{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack--padding-28___ZzMnF{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack--padding-32___m4XKv{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack--padding-36___TssXo{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack--padding-40___GoH03{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack--padding-44___yXX7f{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack--padding-48___Owl4z{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack--padding-60___gm0l0{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack--padding-64___IIv9e{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack--padding-80___GvEJb{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack--padding-88___ZuA5D{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack--padding-96___JF88r{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack--padding-112___wzOyM{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack--padding-128___uuMnk{padding:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-narrow--padding-none___ndsvs{padding:0}.Primer_Brand__Stack-module__Stack-narrow--padding-condensed___f1f4j{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack-narrow--padding-normal___TQe_D{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack-narrow--padding-spacious___YeMDB{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack-narrow--padding-4___u7vTZ{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-narrow--padding-8___I46C6{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-narrow--padding-12___dDOxC{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-narrow--padding-16___fP_Cf{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-narrow--padding-20___iQimO{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-narrow--padding-24___A3O7E{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-narrow--padding-28___AQ6m1{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-narrow--padding-32___fwzmW{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-narrow--padding-36___nREO8{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-narrow--padding-40___Z0my5{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-narrow--padding-44___DBucu{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-narrow--padding-48___FmiJM{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-narrow--padding-60___wMl0S{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-narrow--padding-64___X7fQc{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-narrow--padding-80___URxqt{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-narrow--padding-88___TTW75{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-narrow--padding-96___OHxcW{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-narrow--padding-112___tNmYE{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-narrow--padding-128___MeCmA{padding:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-narrow--gap-4___DPSDt{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-narrow--gap-8___kbBO7{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-narrow--gap-12___g2DMv{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-narrow--gap-16___txy3T{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-narrow--gap-20___EI1Lr{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-narrow--gap-24___eCYeX{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-narrow--gap-28___lFWdB{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-narrow--gap-32___OvuFF{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-narrow--gap-36___iDp6W{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-narrow--gap-40___nCuFr{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-narrow--gap-44___aAL4O{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-narrow--gap-48___NmFRy{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-narrow--gap-60___gC89b{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-narrow--gap-64___zmJsB{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-narrow--gap-80___PZ_rn{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-narrow--gap-88___jCo0m{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-narrow--gap-96___lmTUq{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-narrow--gap-112___WsPB0{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-narrow--gap-128___gWyum{gap:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--gap-none____ZDEx{gap:0}.Primer_Brand__Stack-module__Stack-regular--gap-condensed___ZYYsD{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack-regular--gap-normal___dRchQ{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack-regular--gap-spacious___oMqRv{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack-regular--gap-4___S08kR{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-regular--gap-8___TtKx9{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-regular--gap-12___hzuKq{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-regular--gap-16___o7HsO{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-regular--gap-20___QDl67{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-regular--gap-24___CweJ8{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-regular--gap-28___Ud6HO{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-regular--gap-32___pua20{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-regular--gap-36___q_Cjl{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-regular--gap-40___cZw83{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-regular--gap-44___EzLI4{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-regular--gap-48___IECRy{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-regular--gap-60___BuFRm{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-regular--gap-64___Jiu59{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-regular--gap-80___f0xxA{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-regular--gap-88___p830y{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-regular--gap-96___BYfZt{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-regular--gap-112___VFbdf{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-regular--gap-128___o25ih{gap:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-regular--padding-none____wmhn{padding:0}.Primer_Brand__Stack-module__Stack-regular--padding-condensed___WxLyH{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack-regular--padding-normal___oKpGh{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack-regular--padding-spacious___pL7HW{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack-regular--padding-4___g1MlZ{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-regular--padding-8___MV9gV{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-regular--padding-12___U43Fw{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-regular--padding-16___KvH6B{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-regular--padding-20___eppyK{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-regular--padding-24___vtwRC{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-regular--padding-28___nTiOJ{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-regular--padding-32___I5REZ{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-regular--padding-36___WS1K6{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-regular--padding-40___JMmOa{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-regular--padding-44____aK4u{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-regular--padding-48___oQ2EH{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-regular--padding-60___iStI8{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-regular--padding-64___lVIL3{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-regular--padding-80___iDn3V{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-regular--padding-88___ugAjz{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-regular--padding-96___a2rM5{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-regular--padding-112___iIwN_{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-regular--padding-128___CNuPG{padding:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--gap-none___V9yZQ{gap:0}.Primer_Brand__Stack-module__Stack-wide--gap-condensed___TB7xm{gap:var(--brand-stack-gap-condensed)}.Primer_Brand__Stack-module__Stack-wide--gap-normal___Et9_A{gap:var(--brand-stack-gap-normal)}.Primer_Brand__Stack-module__Stack-wide--gap-spacious___WXQyb{gap:var(--brand-stack-gap-spacious)}.Primer_Brand__Stack-module__Stack-wide--gap-4___jztrv{gap:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-wide--gap-8___qaywr{gap:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-wide--gap-12___bCgki{gap:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-wide--gap-16___V0Ly_{gap:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-wide--gap-20___lcLAk{gap:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-wide--gap-24___H0crZ{gap:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-wide--gap-28___IVObp{gap:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-wide--gap-32___HXuJZ{gap:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-wide--gap-36___nP2T_{gap:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-wide--gap-40___NfVDb{gap:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-wide--gap-44___bqym2{gap:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-wide--gap-48___M3ciy{gap:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-wide--gap-60___X9p2c{gap:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-wide--gap-64___x2ZRh{gap:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-wide--gap-80___OKRwQ{gap:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-wide--gap-88___OXC9b{gap:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-wide--gap-96___piUPg{gap:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-wide--gap-112___s5WKM{gap:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-wide--gap-128___JJ87b{gap:var(--base-size-128)}.Primer_Brand__Stack-module__Stack-wide--padding-none___GEcfF{padding:0}.Primer_Brand__Stack-module__Stack-wide--padding-condensed___heIOO{padding:var(--brand-stack-padding-condensed)}.Primer_Brand__Stack-module__Stack-wide--padding-normal___Pdr2C{padding:var(--brand-stack-padding-normal)}.Primer_Brand__Stack-module__Stack-wide--padding-spacious___d_AmA{padding:var(--brand-stack-padding-spacious)}.Primer_Brand__Stack-module__Stack-wide--padding-4___a4P38{padding:var(--base-size-4)}.Primer_Brand__Stack-module__Stack-wide--padding-8___JPU6G{padding:var(--base-size-8)}.Primer_Brand__Stack-module__Stack-wide--padding-12___neDmy{padding:var(--base-size-12)}.Primer_Brand__Stack-module__Stack-wide--padding-16___Cj2BV{padding:var(--base-size-16)}.Primer_Brand__Stack-module__Stack-wide--padding-20___lPynX{padding:var(--base-size-20)}.Primer_Brand__Stack-module__Stack-wide--padding-24___Ypw7V{padding:var(--base-size-24)}.Primer_Brand__Stack-module__Stack-wide--padding-28___k80vm{padding:var(--base-size-28)}.Primer_Brand__Stack-module__Stack-wide--padding-32___SHTUT{padding:var(--base-size-32)}.Primer_Brand__Stack-module__Stack-wide--padding-36___iWSDo{padding:var(--base-size-36)}.Primer_Brand__Stack-module__Stack-wide--padding-40___qk1Hg{padding:var(--base-size-40)}.Primer_Brand__Stack-module__Stack-wide--padding-44___a8DV4{padding:var(--base-size-44)}.Primer_Brand__Stack-module__Stack-wide--padding-48___yc5OP{padding:var(--base-size-48)}.Primer_Brand__Stack-module__Stack-wide--padding-60___JHhf2{padding:var(--base-size-60)}.Primer_Brand__Stack-module__Stack-wide--padding-64____opnu{padding:var(--base-size-64)}.Primer_Brand__Stack-module__Stack-wide--padding-80___c5WnH{padding:var(--base-size-80)}.Primer_Brand__Stack-module__Stack-wide--padding-88___cQ0Vq{padding:var(--base-size-88)}.Primer_Brand__Stack-module__Stack-wide--padding-96___xJjZt{padding:var(--base-size-96)}.Primer_Brand__Stack-module__Stack-wide--padding-112___xmuIf{padding:var(--base-size-112)}.Primer_Brand__Stack-module__Stack-wide--padding-128___OV3zg{padding:var(--base-size-128)}}.Primer_Brand__Stack-module__Stack--align-items-flex-end___cJG6k{align-items:flex-end}.Primer_Brand__Stack-module__Stack--align-items-flex-start___Vh1Ca{align-items:flex-start}.Primer_Brand__Stack-module__Stack--align-items-center___xWKxj{align-items:center}.Primer_Brand__Stack-module__Stack-narrow--align-items-flex-end___bXiXc{align-items:flex-end}.Primer_Brand__Stack-module__Stack-narrow--align-items-flex-start___eBtSy{align-items:flex-start}.Primer_Brand__Stack-module__Stack-narrow--align-items-center___jZIXU{align-items:center}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--align-items-flex-end___JlKOr{align-items:flex-end}.Primer_Brand__Stack-module__Stack-regular--align-items-flex-start___jusm2{align-items:flex-start}.Primer_Brand__Stack-module__Stack-regular--align-items-center___tY013{align-items:center}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--align-items-flex-end___z5xxr{align-items:flex-end}.Primer_Brand__Stack-module__Stack-wide--align-items-flex-start___QKRoP{align-items:flex-start}.Primer_Brand__Stack-module__Stack-wide--align-items-center___DUG9C{align-items:center}}.Primer_Brand__Stack-module__Stack--justify-content-flex-end___mp2Ka{justify-content:flex-end}.Primer_Brand__Stack-module__Stack--justify-content-flex-start___VIkHJ{justify-content:flex-start}.Primer_Brand__Stack-module__Stack--justify-content-center___uZGXl{justify-content:center}.Primer_Brand__Stack-module__Stack--justify-content-space-between___r8E3d{justify-content:space-between}.Primer_Brand__Stack-module__Stack--justify-content-space-evenly___G1eGw{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack--justify-content-space-around___kqm4D{justify-content:space-around}.Primer_Brand__Stack-module__Stack-narrow--justify-content-flex-end___QUDo3{justify-content:flex-end}.Primer_Brand__Stack-module__Stack-narrow--justify-content-flex-start___fNLJd{justify-content:flex-start}.Primer_Brand__Stack-module__Stack-narrow--justify-content-center___kdlmI{justify-content:center}.Primer_Brand__Stack-module__Stack-narrow--justify-content-space-between___w7Ki5{justify-content:space-between}.Primer_Brand__Stack-module__Stack-narrow--justify-content-space-evenly___ntQwA{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack-narrow--justify-content-space-around___NHZVk{justify-content:space-around}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular--justify-content-flex-end___B0xmt{justify-content:flex-end}.Primer_Brand__Stack-module__Stack-regular--justify-content-flex-start___DtA1j{justify-content:flex-start}.Primer_Brand__Stack-module__Stack-regular--justify-content-center___oEcdF{justify-content:center}.Primer_Brand__Stack-module__Stack-regular--justify-content-space-between___F1gqO{justify-content:space-between}.Primer_Brand__Stack-module__Stack-regular--justify-content-space-evenly___xZdXl{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack-regular--justify-content-space-around___nSDM4{justify-content:space-around}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide--justify-content-flex-end___Hztn5{justify-content:flex-end}.Primer_Brand__Stack-module__Stack-wide--justify-content-flex-start___gnhnO{justify-content:flex-start}.Primer_Brand__Stack-module__Stack-wide--justify-content-center___XxA7G{justify-content:center}.Primer_Brand__Stack-module__Stack-wide--justify-content-space-between___HEm_x{justify-content:space-between}.Primer_Brand__Stack-module__Stack-wide--justify-content-space-evenly___Hgs5B{justify-content:space-evenly}.Primer_Brand__Stack-module__Stack-wide--justify-content-space-around___B30C2{justify-content:space-around}}.Primer_Brand__Stack-module__Stack-flexWrap--wrap___oHt4z{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-flexWrap--no-wrap___bGR_x{flex-wrap:nowrap}.Primer_Brand__Stack-module__Stack-narrow-flexWrap--wrap___fnS6A{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-narrow-flexWrap--no-wrap___DYcBz{flex-wrap:nowrap}@media screen and (width>=48rem){.Primer_Brand__Stack-module__Stack-regular-flexWrap--wrap___hwBqs{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-regular-flexWrap--no-wrap___Y8wyw{flex-wrap:nowrap}}@media screen and (width>=80rem){.Primer_Brand__Stack-module__Stack-wide-flexWrap--wrap___i9hAC{flex-wrap:wrap}.Primer_Brand__Stack-module__Stack-wide-flexWrap--no-wrap___C__JU{flex-wrap:nowrap}}.Primer_Brand__Box-module__Box-padding--condensed___moOU_{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-padding--normal___I99VZ{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-padding--spacious___IDH0L{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-padding--none___SiKZE{padding:0}.Primer_Brand__Box-module__Box-padding--4___P8ym4{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-padding--8___tkmC2{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-padding--12___WZtC5{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-padding--16___uSvFs{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-padding--20___CqPHd{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-padding--24___ns6vt{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-padding--28___C3Z0M{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-padding--32___Xi9K8{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-padding--36___elDVr{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-padding--40___FiQOK{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-padding--44___pcGzC{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-padding--48___sKAhw{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-padding--60___aeyGV{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-padding--64___eD0xN{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-padding--80___Ny1Eo{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-padding--88___yPev4{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-padding--96___vQxms{padding:var(--base-size-96)}.Primer_Brand__Box-module__Box-padding--112___UKjfn{padding:var(--base-size-112)}.Primer_Brand__Box-module__Box-padding--128___eM3cZ{padding:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-padding--condensed___anAAR{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-padding--normal___drqoL{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-padding--spacious___JblB1{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-padding--none___Ee52O{padding:0}.Primer_Brand__Box-module__Box-narrow-padding--4___gcJCt{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-padding--8___a7q08{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-padding--12___aaFXk{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-padding--16___jdlkw{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-padding--20___O5D_M{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-padding--24___lyefS{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-padding--28___TwWF_{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-padding--32___fPqRw{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-padding--36___IjUkb{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-padding--40___pxXrQ{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-padding--44___MCitQ{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-padding--48___TYalO{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-padding--60___GCUuJ{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-padding--64___DfG4r{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-padding--80___aM_tb{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-padding--88___RAwuQ{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-padding--96___AAjgj{padding:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-padding--condensed___Sa56q{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-padding--normal___kPK0N{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-padding--spacious___eg7WK{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-padding--none___RqmqL{padding:0}.Primer_Brand__Box-module__Box-regular-padding--4___Hrlt7{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-padding--8___S4Vzp{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-padding--12___aqPhA{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-padding--16___dspf1{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-padding--20___je3L4{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-padding--24___BRWrO{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-padding--28___MLuWu{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-padding--32___UuJR3{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-padding--36___pnnlM{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-padding--40___KvG6x{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-padding--44___QbfqE{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-padding--48___o68vT{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-padding--60___w5Ah3{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-padding--64___VXnt9{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-padding--80___sCKZd{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-padding--88___rtS6L{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-padding--96___MjgI_{padding:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-padding--112___uyz9m{padding:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-padding--128___a3PIs{padding:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-padding--condensed___G1jXL{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-padding--normal___tIQlq{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-padding--spacious___PGhNc{padding:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-padding--none___qcMjk{padding:0}.Primer_Brand__Box-module__Box-wide-padding--4___aySqW{padding:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-padding--8___cPNFj{padding:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-padding--12___OUxUa{padding:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-padding--16___IIZ2x{padding:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-padding--20___IMkXv{padding:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-padding--24___Jqf0K{padding:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-padding--28___qJoHf{padding:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-padding--32___QiAzQ{padding:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-padding--36___HliwM{padding:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-padding--40___ebzR0{padding:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-padding--44___kxHFt{padding:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-padding--48___VI8OS{padding:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-padding--60___aDgU_{padding:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-padding--64___ZIZly{padding:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-padding--80___Pm5Do{padding:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-padding--88___fj9YB{padding:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-padding--96___cdgwB{padding:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-padding--112___xnULq{padding:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-padding--128___Cd7wM{padding:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingBlockStart--condensed___W1bY3{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingBlockStart--normal___Zg_Os{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingBlockStart--spacious___ViXP1{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingBlockStart--none___OMRh1{padding-block-start:0}.Primer_Brand__Box-module__Box-paddingBlockStart--4___dVFMa{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingBlockStart--8___TNzCC{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingBlockStart--12___QFOW7{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingBlockStart--16___ZVevq{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingBlockStart--20___BIULn{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingBlockStart--24___W0xXx{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingBlockStart--28___cfKdr{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingBlockStart--32___nFZZ8{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingBlockStart--36___c5djO{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingBlockStart--40___vX8Fj{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingBlockStart--44___gHVxS{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingBlockStart--48___dATiV{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingBlockStart--60___iBaCb{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingBlockStart--64___GC9HQ{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingBlockStart--80___AzNIY{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingBlockStart--88___mlghT{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingBlockStart--96___eirfv{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingBlockStart--112___WErQC{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingBlockStart--128___PQBNx{padding-block-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--condensed___TpPWY{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--normal___WoejX{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--spacious___YGOfc{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--none___rBPCn{padding-block-start:0}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--4___pKCVF{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--8___Mno90{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--12___o4TBL{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--16___e1SBw{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--20___n1NNi{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--24___uZOxT{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--28___m2mO9{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--32___qReqY{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--36___FeGVX{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--40___NWdbk{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--44___xUghA{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--48___QXRZC{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--60___Q10gK{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--64___xkgoO{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--80___VP_yD{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--88___rCE4P{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--96___DwVjV{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--112___KR3bh{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-paddingBlockStart--128___sY3Vs{padding-block-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingBlockStart--condensed____4rsh{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--normal___D08eA{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--spacious___ANm3m{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--none___gWbHQ{padding-block-start:0}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--4___hDJd4{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--8___sMD28{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--12___vUJnn{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--16___N8Zxa{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--20___BsEXk{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--24___AI2B1{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--28___OZFGX{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--32___viH7U{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--36___E6h7E{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--40___qZE9d{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--44___mveRI{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--48___HcGS_{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--60___h0JrH{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--64___nx8cK{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--80___ld1du{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--88___lU6HN{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--96___BOrMI{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--112___OpuYq{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingBlockStart--128___Gp33i{padding-block-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingBlockStart--condensed___PXi4I{padding-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--normal___GnoL0{padding-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--spacious___krfm9{padding-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--none___Y9qJB{padding-block-start:0}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--4___Zryv_{padding-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--8___u5PHy{padding-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--12___U5Ofg{padding-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--16___ZBJ3Y{padding-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--20___pAFgx{padding-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--24___MEQNA{padding-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--28___dNYbO{padding-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--32___ohjFs{padding-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--36___nZoBT{padding-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--40___ak06g{padding-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--44___o7t7i{padding-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--48___XERud{padding-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--60___DB6D9{padding-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--64___c4HWW{padding-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--80___IQUjF{padding-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--88___sNl4k{padding-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--96___ziRgY{padding-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--112___kU2x1{padding-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingBlockStart--128___nWESD{padding-block-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingInlineEnd--condensed___eOQgc{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingInlineEnd--normal___iaaKM{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingInlineEnd--spacious___QRkuj{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingInlineEnd--none___zgwVT{padding-inline-end:0}.Primer_Brand__Box-module__Box-paddingInlineEnd--4___QYTSr{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingInlineEnd--8___qOjp8{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingInlineEnd--12___ki7vg{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingInlineEnd--16___eBvli{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingInlineEnd--20___fUBLQ{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingInlineEnd--24___qvm6U{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingInlineEnd--28___RLJPP{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingInlineEnd--32___rmFsu{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingInlineEnd--36___eD4ie{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingInlineEnd--40___Pa_hU{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingInlineEnd--44___ISq6N{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingInlineEnd--48____6VIs{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingInlineEnd--60___nSk0c{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingInlineEnd--64___XEdic{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingInlineEnd--80___ro2Q6{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingInlineEnd--88____tOlK{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingInlineEnd--96___VGzUa{padding-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingInlineEnd--112___u399j{padding-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingInlineEnd--128___XCfRF{padding-inline-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--condensed___tbVph{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--normal___J14DR{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--spacious___XYmJk{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--none____Uy0e{padding-inline-end:0}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--4___LCky2{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--8___s737E{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--12___F2fc4{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--16___hCEUi{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--20___moqMn{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--24___nUtP0{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--28___GoW1H{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--32___kE8pF{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--36___zUIaG{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--40___U_LUs{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--44___HfR2e{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--48___VpyWJ{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--60___M439R{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--64____U2Bb{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--80___xLRwJ{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--88___venIk{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingInlineEnd--96___lz9Ah{padding-inline-end:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--condensed___Y3PpC{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--normal___uQZJL{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--spacious___Yg_oy{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--none___d07JU{padding-inline-end:0}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--4____Mu6j{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--8___KLTjM{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--12___MZaFD{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--16___zuYxe{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--20___X7kQ7{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--24___OLwfl{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--28___S8g3g{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--32___fOGZt{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--36___Gsz4A{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--40___beKbG{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--44___Fbir5{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--48___JLuQO{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--60___RhhLC{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--64___j2pqZ{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--80____2Wqx{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--88___DFSeP{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--96___VLntF{padding-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--112___fkEpY{padding-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingInlineEnd--128___gQRRw{padding-inline-end:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--condensed___Qcd9O{padding-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--normal___RCW25{padding-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--spacious___l9ArL{padding-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--none___l9mTk{padding-inline-end:0}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--4___Po8UR{padding-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--8___JogoU{padding-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--12___mTBkP{padding-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--16___yWWxx{padding-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--20___Ho0IF{padding-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--24___eQFrc{padding-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--28___NDHpo{padding-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--32___W5qHl{padding-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--36___GjFzC{padding-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--40___waIcY{padding-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--44___JOSMH{padding-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--48___pI6_m{padding-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--60___ed3T2{padding-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--64___D6UgI{padding-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--80___A72UQ{padding-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--88___DE0O8{padding-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--96___JZowF{padding-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--112___fAjZM{padding-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingInlineEnd--128___V6AHo{padding-inline-end:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingBlockEnd--condensed___dEYMv{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingBlockEnd--normal___85pec{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingBlockEnd--spacious___LGfk7{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingBlockEnd--none____vlh7{padding-block-end:0}.Primer_Brand__Box-module__Box-paddingBlockEnd--4____i2UO{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingBlockEnd--8___bNx7n{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingBlockEnd--12____EOsG{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingBlockEnd--16___wkJ99{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingBlockEnd--20___xjcqw{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingBlockEnd--24___NFG9h{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingBlockEnd--28___u7XJS{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingBlockEnd--32___zjWVZ{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingBlockEnd--36___f12Tl{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingBlockEnd--40___j6T9R{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingBlockEnd--44___gl2rH{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingBlockEnd--48___OcWnm{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingBlockEnd--60___T7psX{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingBlockEnd--64___dSBrT{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingBlockEnd--80___Sbcpv{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingBlockEnd--88___tspXM{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingBlockEnd--96___eMrZV{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingBlockEnd--112___ty2_p{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingBlockEnd--128___H35FY{padding-block-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--condensed___QTO1y{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--normal___MupAF{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--spacious____jivs{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--none___xwpBe{padding-block-end:0}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--4___g4hDY{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--8___dhfNf{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--12___fLDtZ{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--16___BHuqq{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--20___JI4SX{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--24___s1eco{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--28___g6wCx{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--32___wycVg{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--36___wjt4p{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--40___rVjJV{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--44___akvlZ{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--48___OPwru{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--60___zRr4T{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--64___icCAb{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--80___Y_JGc{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--88___dl3rO{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--96___ojJIp{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--112___pKYyd{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-paddingBlockEnd--128___oI5vn{padding-block-end:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--condensed___iiMOv{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--normal___J5glu{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--spacious___Qbwlq{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--none___D1NkR{padding-block-end:0}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--4___TL1oP{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--8___pKg9P{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--12___UBth1{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--16___LKRrT{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--20___mRbHZ{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--24___il8K_{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--28___ZmE1R{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--32____C9RT{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--36___nocbv{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--40___nsz4g{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--44___bsz6J{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--48___eApXN{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--60___FR7Cn{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--64___ATo_6{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--80___HuPNm{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--88___axhPf{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--96___QWDd0{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--112___Ql_U3{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingBlockEnd--128___R4xJd{padding-block-end:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--condensed___fKrol{padding-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--normal___Kbldz{padding-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--spacious___zbi5h{padding-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--none___rVFoE{padding-block-end:0}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--4___YjBbR{padding-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--8___CpDlD{padding-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--12___cjNk6{padding-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--16___PKo6_{padding-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--20___bNtXr{padding-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--24___o8_OD{padding-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--28___zR53L{padding-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--32___xX0KK{padding-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--36___KeAYu{padding-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--40___FUROs{padding-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--44___nWycQ{padding-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--48___J4Ljw{padding-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--60___YiIwB{padding-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--64___pbSxt{padding-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--80___wJtUa{padding-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--88___M2vDM{padding-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--96___Uq5AZ{padding-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--112___B96UD{padding-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingBlockEnd--128___GcJ48{padding-block-end:var(--base-size-128)}}.Primer_Brand__Box-module__Box-paddingInlineStart--condensed___rq2fI{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-paddingInlineStart--normal___BmKv4{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-paddingInlineStart--spacious___rk6ci{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-paddingInlineStart--none___zXxYO{padding-inline-start:0}.Primer_Brand__Box-module__Box-paddingInlineStart--4___XP6SF{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-paddingInlineStart--8___OBQ5l{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-paddingInlineStart--12___F1XBU{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-paddingInlineStart--16___QesGK{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-paddingInlineStart--20___xOS1A{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-paddingInlineStart--24___moDQ8{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-paddingInlineStart--28___KBIxR{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-paddingInlineStart--32___nVH6P{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-paddingInlineStart--36___VqmhW{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-paddingInlineStart--40___DXgBn{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-paddingInlineStart--44___Bulbu{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-paddingInlineStart--48___x5m9Q{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-paddingInlineStart--60___Iprl6{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-paddingInlineStart--64___WUgUO{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-paddingInlineStart--80___Kn2gO{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-paddingInlineStart--88___kWkOB{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-paddingInlineStart--96___B2qkH{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-paddingInlineStart--112___v4yZC{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-paddingInlineStart--128___aafEk{padding-inline-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--condensed___YI9Eh{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--normal___iqKMr{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--spacious___O1i9G{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--none___pGKmW{padding-inline-start:0}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--4___pS_Gh{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--8___F6dKN{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--12___Ci8GO{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--16___fkZ4s{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--20___tRwV3{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--24___uVuT2{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--28___ueTAO{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--32___e1dD1{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--36___kPOzQ{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--40___ekOE3{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--44___nALOu{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--48___cg27m{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--60___CwVSc{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--64___PBLfw{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--80___Mv5eX{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--88___QTgm8{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--96___W7uL8{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--112___qXECF{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-paddingInlineStart--128___tBlKZ{padding-inline-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-paddingInlineStart--condensed___K1JTe{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--normal___hE24G{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--spacious___Y3FYm{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--none___rA7QC{padding-inline-start:0}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--4___ffJtu{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--8___K3PDT{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--12___ZI1Zt{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--16___pSuDM{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--20___J_Lac{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--24___olfR2{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--28___u3Jxq{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--32___j8YOd{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--36___ioVRd{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--40___CZDsm{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--44___eBvKb{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--48___JdZPY{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--60___gyHKL{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--64___GGNhi{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--80___oqP9L{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--88___dCPPv{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--96___XT27R{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--112___MFUWm{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-paddingInlineStart--128___lfSNz{padding-inline-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-paddingInlineStart--condensed___p04xa{padding-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--normal___fUsFX{padding-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--spacious___Sqsw2{padding-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--none___Nv0wp{padding-inline-start:0}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--4___nVn_B{padding-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--8___wLVn9{padding-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--12___rnbWe{padding-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--16___lhOME{padding-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--20___ULYpU{padding-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--24___HVDrv{padding-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--28___CDihC{padding-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--32___Wq77T{padding-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--36___tCHNn{padding-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--40___Yfoos{padding-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--44___GIxDS{padding-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--48___GlLkg{padding-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--60___nBbo0{padding-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--64___EVzB4{padding-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--80___F366d{padding-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--88___yrcrw{padding-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--96___jvQgf{padding-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--112___Z_i9M{padding-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-paddingInlineStart--128___dxJ4W{padding-inline-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-margin--condensed___t8Ura{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-margin--normal___ZVHSh{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-margin--spacious___j0gGh{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-margin--none___x7HE0{margin:0}.Primer_Brand__Box-module__Box-margin--4___SAGHe{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-margin--8___rwesA{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-margin--12___olT6x{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-margin--16___bf8KF{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-margin--20___eRoV_{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-margin--24___pFF57{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-margin--28___EGGCf{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-margin--32___piqFe{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-margin--36___xujLX{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-margin--40___75KiU{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-margin--44___eoeZ9{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-margin--48___RveUf{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-margin--60___A8h1D{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-margin--64___U6GY0{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-margin--80___VXJ1m{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-margin--88___dr4BK{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-margin--96___W5lUS{margin:var(--base-size-96)}.Primer_Brand__Box-module__Box-margin--112___CMH1O{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-margin--128___chyQh{margin:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-margin--condensed____oxX7{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-margin--normal___XezR0{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-margin--spacious___g6g0f{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-margin--none___POgbx{margin:0}.Primer_Brand__Box-module__Box-narrow-margin--4___Q2uQ_{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-margin--8___rBgr8{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-margin--12___iI8JN{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-margin--16____6lfa{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-margin--20___eP512{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-margin--24___WRxp2{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-margin--28___Go_go{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-margin--32___ZywhO{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-margin--36___I5ZXC{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-margin--40___LLwK7{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-margin--44____tEzU{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-margin--48___isJ89{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-margin--60___GhiZZ{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-margin--64___L0c0n{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-margin--80___vvJ9F{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-margin--88____rLH2{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-margin--96___lp2Ry{margin:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-margin--112___a5t03{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-margin--128___P5b03{margin:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-margin--condensed___Caa8r{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-margin--normal___KdX5O{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-margin--spacious___mG0NN{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-margin--none____xN9L{margin:0}.Primer_Brand__Box-module__Box-regular-margin--4___J8A2t{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-margin--8___iSM8W{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-margin--12___jqgj2{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-margin--16___UkF2r{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-margin--20___QOTe2{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-margin--24___g6Kqw{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-margin--28___rycHv{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-margin--32___mqhOH{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-margin--36___WB582{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-margin--40___ZtXXm{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-margin--44___WzwUP{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-margin--48___AI_QF{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-margin--60___srQSO{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-margin--64___feT35{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-margin--80___RT7fB{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-margin--88___Q182S{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-margin--96___Rvbjm{margin:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-margin--112___A6xDo{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-margin--128___kHwQC{margin:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-margin--condensed___Uj_ap{margin:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-margin--normal___o0WKl{margin:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-margin--spacious___Fmgze{margin:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-margin--none___RuZOH{margin:0}.Primer_Brand__Box-module__Box-wide-margin--4___dGG0a{margin:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-margin--8___VEXWc{margin:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-margin--12___sqf5U{margin:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-margin--16___DTrBi{margin:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-margin--20___dlbWa{margin:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-margin--24___L_Aj9{margin:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-margin--28___Vjv_a{margin:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-margin--32___GECyy{margin:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-margin--36___PWhqP{margin:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-margin--40___vemke{margin:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-margin--44___Ennon{margin:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-margin--48___MkKEg{margin:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-margin--60___WPJsx{margin:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-margin--64___vYLMh{margin:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-margin--80___I3XVP{margin:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-margin--88___Tlgzv{margin:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-margin--112___HsLag{margin:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-margin--128___v9LVz{margin:var(--base-size-128)}}.Primer_Brand__Box-module__Box-marginBlockStart--condensed___bTE8Q{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginBlockStart--normal___wUotH{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginBlockStart--spacious___EOasI{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginBlockStart--none___iS0_r{margin-block-start:0}.Primer_Brand__Box-module__Box-marginBlockStart--4___ZxS80{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginBlockStart--8___RPhvf{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginBlockStart--12___Dw4MT{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginBlockStart--16___plaHc{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginBlockStart--20___gqeBE{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginBlockStart--24___puxKK{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginBlockStart--28___X08BZ{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginBlockStart--32___pWodO{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginBlockStart--36___v5wHR{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginBlockStart--40___hq_Nv{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginBlockStart--44___uLLSf{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginBlockStart--48___S_MhS{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginBlockStart--60___0Lb4o{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginBlockStart--64___oLHvC{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginBlockStart--80___Q0HsD{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginBlockStart--88___T0gdB{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginBlockStart--96___MqNC0{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginBlockStart--112___j68wy{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginBlockStart--128___mzbEa{margin-block-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--condensed___QUr7S{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--normal___jTtqc{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--spacious___O2UPE{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--none___vMaok{margin-block-start:0}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--4___t9ZC4{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--8___ZsShH{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--12___eaiGT{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--16___ViXmT{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--20___Y_3F2{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--24___fQcVJ{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--28___Pi7Wt{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--32___fWuQe{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--36___IK1Mg{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--40___GbLEW{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--44___J8fNf{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--48___foZDz{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--60___xlE0n{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--64___AU4LW{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--80___PMcaT{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--88___RQRKe{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--96___mYSKK{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--112___tW2zB{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-marginBlockStart--128___p0QMw{margin-block-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginBlockStart--condensed___rp3ys{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--normal___SPLfG{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--spacious___fq56Y{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--none___KYSzT{margin-block-start:0}.Primer_Brand__Box-module__Box-regular-marginBlockStart--4___Uv8gl{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--8___jnZgW{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--12___fCXkQ{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--16___Z9p0d{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--20___E559T{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--24___CjRGa{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--28___VwKD6{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--32___eskz2{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--36___s1z4f{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--40___QXz1n{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--44___OSyKv{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--48___qNEcn{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--60___nhnZh{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--64___Y0G5A{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--80___BlU1a{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--88___nSxLP{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--96___ZD_SH{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--112___GVoQX{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-marginBlockStart--128___TFhvb{margin-block-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginBlockStart--condensed___mqYho{margin-block-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--normal___c81Vf{margin-block-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--spacious___gD8F4{margin-block-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--none___o5UYw{margin-block-start:0}.Primer_Brand__Box-module__Box-wide-marginBlockStart--4___k48Xj{margin-block-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--8___EmewZ{margin-block-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--12___Xxtk6{margin-block-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--16___NYL3P{margin-block-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--20___W9gU2{margin-block-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--24___lMuAD{margin-block-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--28___FT3Mf{margin-block-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--32___dlVS5{margin-block-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--36___ZCOj2{margin-block-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--40___rEDpG{margin-block-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--44___DGFwo{margin-block-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--48___WRSPh{margin-block-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--60___OWBYp{margin-block-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--64___ZueKk{margin-block-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--80___TA3IX{margin-block-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--88___eU6Uu{margin-block-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--96___trWhE{margin-block-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--112___M351c{margin-block-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-marginBlockStart--128___I90P4{margin-block-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-marginInlineEnd--condensed___EVJUU{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginInlineEnd--normal___AdtDi{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginInlineEnd--spacious___rqfRo{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginInlineEnd--none___cJZUG{margin-inline-end:0}.Primer_Brand__Box-module__Box-marginInlineEnd--4___CmFW9{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginInlineEnd--8___9dSA9{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginInlineEnd--12___uJExr{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginInlineEnd--16___dw6kz{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginInlineEnd--20___qfURL{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginInlineEnd--24___Q353Q{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginInlineEnd--28___fQ3mR{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginInlineEnd--32___bruVR{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginInlineEnd--36___knq3Z{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginInlineEnd--40___iZcVw{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginInlineEnd--44___GKLwd{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginInlineEnd--48___i5HE8{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginInlineEnd--60___KIgH3{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginInlineEnd--64___C5Tp6{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginInlineEnd--80___j058F{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginInlineEnd--88___dzYTi{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginInlineEnd--96___YGHeA{margin-inline-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginInlineEnd--112___It02k{margin-inline-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginInlineEnd--128___S5_Lm{margin-inline-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--condensed___QlOtm{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--normal____4LoS{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--spacious___ESjqc{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--none___LYYdL{margin-inline-end:0}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--4___j15Se{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--8___ivk9J{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--12___InPz1{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--16___UZzSI{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--20___AOZlY{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--24___uMFom{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--28___P312F{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--32___NfeGi{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--36___iU_kf{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--40___lme45{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--44___lUlZs{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--48___sUFp9{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--60___NOyzc{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--64___BtND9{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--80____4Pas{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--88___uL4kN{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginInlineEnd--96___gtx55{margin-inline-end:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginInlineEnd--condensed___BCcsA{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--normal___silfR{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--spacious___sjnml{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--none___W0mRJ{margin-inline-end:0}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--4___dn_Re{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--8___VFtdE{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--12___k07gg{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--16___OOs0G{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--20___fsTtM{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--24___uOaQI{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--28___FbHfF{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--32___Ukveq{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--36___M92aJ{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--40____e3SN{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--44___UEAQj{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--48___ei98i{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--60___tipua{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--64___PIZxy{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--80___lnDcp{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--88___BPqAI{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginInlineEnd--96___aRTvT{margin-inline-end:var(--base-size-96)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginInlineEnd--condensed___QoI21{margin-inline-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--normal___HNliJ{margin-inline-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--spacious___X8NXv{margin-inline-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--none___JwlqX{margin-inline-end:0}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--4___sWBPo{margin-inline-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--8___kacX3{margin-inline-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--12___uQT7v{margin-inline-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--16___n01ap{margin-inline-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--20___X4OVV{margin-inline-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--24___AJ1ri{margin-inline-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--28___E5VbM{margin-inline-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--32___ypePn{margin-inline-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--36___gmvEm{margin-inline-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--40___r90G7{margin-inline-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--44___Q4G5c{margin-inline-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--48___z9Lmw{margin-inline-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--60___TTkKW{margin-inline-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--64___F57r_{margin-inline-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--80___E0tJe{margin-inline-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--88___v8a26{margin-inline-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginInlineEnd--96___pUCiy{margin-inline-end:var(--base-size-96)}}.Primer_Brand__Box-module__Box-marginBlockEnd--condensed___yZSjt{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginBlockEnd--normal___BkMQg{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginBlockEnd--spacious___Jjk8D{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginBlockEnd--none___q_Aov{margin-block-end:0}.Primer_Brand__Box-module__Box-marginBlockEnd--4___uZDEK{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginBlockEnd--8___dx_JW{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginBlockEnd--12___kgVMq{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginBlockEnd--16___N2MVF{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginBlockEnd--20___aX_J0{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginBlockEnd--24___RTiyC{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginBlockEnd--28___jhXpG{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginBlockEnd--32___W5xYE{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginBlockEnd--36___cj9Vj{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginBlockEnd--40___ewAlH{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginBlockEnd--44___ZxEv_{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginBlockEnd--48___zt2OJ{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginBlockEnd--60___c2uN1{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginBlockEnd--64___a6txk{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginBlockEnd--80___EZyqj{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginBlockEnd--88___nMO9c{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginBlockEnd--96___Lbz6K{margin-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginBlockEnd--112___oSXen{margin-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginBlockEnd--128___zrQ7e{margin-block-end:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--condensed___Tltof{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--normal___ShWay{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--spacious___LV3s_{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--none___CBZnh{margin-block-end:0}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--4___CtSfn{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--8___Y45AZ{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--12___c87Ua{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--16___XP5Uw{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--20___p3Udz{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--24___oh65t{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--28___trRzs{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--32___qYFHR{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--36___mV2L1{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--40___taWN_{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--44___q5psW{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--48___u5_N1{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--60___znsW7{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--64___iRYFP{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--80___h7LUD{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--88___mBsMQ{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginBlockEnd--96___TcQuV{margin-block-end:var(--base-size-96)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginBlockEnd--condensed___nz4bt{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--normal___PDHRc{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--spacious___l348T{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--none___KZ8GC{margin-block-end:0}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--4___xY73v{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--8___BUGRd{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--12___FKbqC{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--16___EkpkB{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--20___j3pUk{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--24___gnnxL{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--28___tHNzb{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--32___XIqmt{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--36___blLjI{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--40___V9Sxn{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--44___xMsFn{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--48___pdAjC{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--60___km_JN{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--64___uLUtn{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--80___OlgXb{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--88___vClp9{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--96____imff{margin-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--112___NDi61{margin-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-marginBlockEnd--128___GUa4G{margin-block-end:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginBlockEnd--condensed___UBH5e{margin-block-end:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--normal___Bi1K6{margin-block-end:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--spacious___fC5ai{margin-block-end:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--none___k2UfA{margin-block-end:0}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--4___qjlqV{margin-block-end:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--8___jhRo2{margin-block-end:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--12___UmBRd{margin-block-end:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--16___GfSQm{margin-block-end:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--20___D4t78{margin-block-end:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--24___Vokvc{margin-block-end:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--28___l4an3{margin-block-end:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--32___iAcDG{margin-block-end:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--36___uWsmR{margin-block-end:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--40___DlDrK{margin-block-end:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--44___c9aSx{margin-block-end:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--48___X5ONp{margin-block-end:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--60___ZNOYi{margin-block-end:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--64___FOyXs{margin-block-end:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--80___Jqalb{margin-block-end:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--88___G6Art{margin-block-end:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--96___gjf5z{margin-block-end:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--112___ddfRk{margin-block-end:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-marginBlockEnd--128___ESEm8{margin-block-end:var(--base-size-128)}}.Primer_Brand__Box-module__Box-marginInlineStart--condensed___IBp_X{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-marginInlineStart--normal___BHhHI{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-marginInlineStart--spacious___ZtXj1{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-marginInlineStart--none___fdOWF{margin-inline-start:0}.Primer_Brand__Box-module__Box-marginInlineStart--4___Wn1Ko{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-marginInlineStart--8___pDo7p{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-marginInlineStart--12___TQxPD{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-marginInlineStart--16___J7y4b{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-marginInlineStart--20___ISuSe{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-marginInlineStart--24___IrW9d{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-marginInlineStart--28___xff1V{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-marginInlineStart--32___HQOmB{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-marginInlineStart--36___WdZwx{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-marginInlineStart--40___R3wYL{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-marginInlineStart--44___wwo_O{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-marginInlineStart--48___zdJZg{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-marginInlineStart--60___gPgQr{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-marginInlineStart--64___NHk5d{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-marginInlineStart--80___D1Kto{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-marginInlineStart--88___SqBcU{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-marginInlineStart--96___Cy8gp{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-marginInlineStart--112___UVHJh{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-marginInlineStart--128___rYSy2{margin-inline-start:var(--base-size-128)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--condensed___LrhcU{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--normal___yjn7b{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--spacious___D_nVs{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--none___pHChO{margin-inline-start:0}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--4___zqjtT{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--8___JQCG0{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--12___Uh4UZ{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--16___XZ8ZR{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--20___YbDKP{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--24___FNxOe{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--28___rMktN{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--32___tbEiO{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--36___uVdgf{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--40___LJia9{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--44___KmENz{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--48___zoftL{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--60___SWHzH{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--64___iwJE7{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--80___cekgc{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--88___bFGTa{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--96___J9dFk{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--112___ij9Sp{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-narrow-marginInlineStart--128___YmYWV{margin-inline-start:var(--base-size-128)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-marginInlineStart--condensed___b3jtW{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--normal___Afnyr{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--spacious___T94RJ{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--none___dMyhc{margin-inline-start:0}.Primer_Brand__Box-module__Box-regular-marginInlineStart--4____RoBu{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--8___HIT7W{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--12___GKnNE{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--16___zvb7s{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--20___TyM9P{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--24___FR9ti{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--28___cImoh{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--32___uzbKA{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--36___KDLC7{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--40___WtED9{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--44___T1yz0{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--48___RDHdq{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--60___MVbk9{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--64___sswJ8{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--80___V9k8f{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--88___Xo4dd{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--96___MRqfB{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--112___g0s1Q{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-regular-marginInlineStart--128___txGNr{margin-inline-start:var(--base-size-128)}}@media screen and (width>=80rem){.Primer_Brand__Box-module__Box-wide-marginInlineStart--condensed___d78eT{margin-inline-start:var(--brand-box-spacing-condensed)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--normal___KvxjM{margin-inline-start:var(--brand-box-spacing-normal)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--spacious___ttmF3{margin-inline-start:var(--brand-box-spacing-spacious)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--none___Ygvgs{margin-inline-start:0}.Primer_Brand__Box-module__Box-wide-marginInlineStart--4___k170X{margin-inline-start:var(--base-size-4)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--8___dWDhU{margin-inline-start:var(--base-size-8)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--12___j2X_6{margin-inline-start:var(--base-size-12)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--16___tlIaR{margin-inline-start:var(--base-size-16)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--20___tcnmb{margin-inline-start:var(--base-size-20)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--24___faDE1{margin-inline-start:var(--base-size-24)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--28___H0kuG{margin-inline-start:var(--base-size-28)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--32___cEhsd{margin-inline-start:var(--base-size-32)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--36___rotpN{margin-inline-start:var(--base-size-36)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--40___a4Yp_{margin-inline-start:var(--base-size-40)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--44___mAiW2{margin-inline-start:var(--base-size-44)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--48___pJQ14{margin-inline-start:var(--base-size-48)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--60___LZehP{margin-inline-start:var(--base-size-60)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--64___yBVt2{margin-inline-start:var(--base-size-64)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--80___UNM1_{margin-inline-start:var(--base-size-80)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--88___xYk7j{margin-inline-start:var(--base-size-88)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--96___ZVqGY{margin-inline-start:var(--base-size-96)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--112___jFEAD{margin-inline-start:var(--base-size-112)}.Primer_Brand__Box-module__Box-wide-marginInlineStart--128___Ma3u7{margin-inline-start:var(--base-size-128)}}.Primer_Brand__Box-module__Box-backgroundColor--default___yHgTN{background-color:var(--brand-color-canvas-default)}.Primer_Brand__Box-module__Box-backgroundColor--inset___VVJ5E{background-color:var(--brand-color-canvas-inset)}.Primer_Brand__Box-module__Box-backgroundColor--subtle___G0wT9,.Primer_Brand__Box-module__Box-backgroundColor--overlay___R1w8K{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Box-module__Box-borderRadius--small___wqrhY{border-radius:var(--brand-borderRadius-small)}.Primer_Brand__Box-module__Box-borderRadius--medium___JB1YF{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Box-module__Box-borderRadius--large___CCcts{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Box-module__Box-borderRadius--xlarge___Efss7{border-radius:var(--brand-borderRadius-xlarge)}.Primer_Brand__Box-module__Box-borderRadius--full___NXuE7{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Box-module__Box-borderStyle--solid___ejOCw{border-style:solid;border-width:0}.Primer_Brand__Box-module__Box-borderStyle--none___GDHF9{border-style:none}.Primer_Brand__Box-module__Box-borderWidth--thin___Np1R8{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderWidth--thick___dp1_H{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderWidth--thicker___HPZHA{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderBlockStartWidth--thin___y3sZf{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderBlockStartWidth--thick___kV7nz{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderBlockStartWidth--thicker___lU32t{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderInlineEndWidth--thin___irPIY{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderInlineEndWidth--thick___OolZ3{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderInlineEndWidth--thicker___bxZek{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderBlockEndWidth--thin___aOdjf{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderBlockEndWidth--thick___ROxs5{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderBlockEndWidth--thicker___sED4_{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderInlineStartWidth--thin___A4ZPo{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-borderInlineStartWidth--thick___OelxP{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-borderInlineStartWidth--thicker___yWUW3{border-inline-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-borderWidth--none___Hy1LJ{border-width:0}.Primer_Brand__Box-module__Box-borderBlockStartWidth--none___U1tDw{border-block-start-width:0}.Primer_Brand__Box-module__Box-borderInlineEndWidth--none___K0Ey4{border-inline-end-width:0}.Primer_Brand__Box-module__Box-borderBlockEndWidth--none___U4vUs{border-block-end-width:0}.Primer_Brand__Box-module__Box-borderInlineStartWidth--none___R1fyF{border-inline-start-width:0}.Primer_Brand__Box-module__Box-narrow-borderWidth--none___wcZvW{border-width:0}.Primer_Brand__Box-module__Box-narrow-borderWidth--thin___uvzKl{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderWidth--thick___eCXhG{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderWidth--thicker___I_MYT{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--none___DzZns{border-block-start-width:0}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--thin___YCetR{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--thick___Xae6a{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderBlockStartWidth--thicker___q7RoY{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--none___X45sx{border-inline-end-width:0}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--thin___jTAEO{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--thick___N4bpK{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderInlineEndWidth--thicker___XP8q6{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--none___hKgwN{border-block-end-width:0}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--thin___uC5YX{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--thick___vfk5w{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderBlockEndWidth--thicker___EjraB{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--none___zbWQ4{border-inline-start-width:0}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--thin___wwv_V{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--thick___PSJnX{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-narrow-borderInlineStartWidth--thicker___Oji76{border-inline-start-width:var(--brand-borderWidth-thicker)}@media screen and (width>=48rem){.Primer_Brand__Box-module__Box-regular-borderWidth--none___v_4r3{border-width:0}.Primer_Brand__Box-module__Box-regular-borderWidth--thin___WJJ4_{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderWidth--thick___tAQPj{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderWidth--thicker____Mei9{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--none___WSh9e{border-block-start-width:0}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--thin___HDekH{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--thick___dKvYM{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderBlockStartWidth--thicker___RzVQH{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--none___tpeE3{border-inline-end-width:0}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--thin___IDHa2{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--thick___ZP2wC{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderInlineEndWidth--thicker___TWPKx{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--none____Cl_j{border-block-end-width:0}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--thin___CDAYH{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--thick___YAX3O{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderBlockEndWidth--thicker___GqngV{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--none___rx6Yf{border-inline-start-width:0}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--thin___xkvhI{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--thick___lbQHo{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-regular-borderInlineStartWidth--thicker___HR4Nz{border-inline-start-width:var(--brand-borderWidth-thicker)}}@media screen and (width>=64rem){.Primer_Brand__Box-module__Box-wide-borderWidth--none___M7jW_{border-width:0}.Primer_Brand__Box-module__Box-wide-borderWidth--thin___xhh3v{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderWidth--thick___XGwFE{border-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderWidth--thicker___hVG5a{border-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--none___BZm7v{border-block-start-width:0}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--thin___dDKTT{border-block-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--thick___q0gtM{border-block-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderBlockStartWidth--thicker___gBysF{border-block-start-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--none___VvuSn{border-inline-end-width:0}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--thin___RyHjJ{border-inline-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--thick___ATGqg{border-inline-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderInlineEndWidth--thicker___RBeFn{border-inline-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--none___ucisL{border-block-end-width:0}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--thin___yEtFX{border-block-end-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--thick___RG7PT{border-block-end-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderBlockEndWidth--thicker___XpkDn{border-block-end-width:var(--brand-borderWidth-thicker)}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--none___VywCc{border-inline-start-width:0}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--thin___q9saE{border-inline-start-width:var(--brand-borderWidth-thin)}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--thick___gTJ8P{border-inline-start-width:var(--brand-borderWidth-thick)}.Primer_Brand__Box-module__Box-wide-borderInlineStartWidth--thicker___Y1S9l{border-inline-start-width:var(--brand-borderWidth-thicker)}}.Primer_Brand__Box-module__Box-borderColor--default___XVJKE{border-color:var(--brand-color-border-default)}.Primer_Brand__Box-module__Box-borderColor--muted___S3wPy{border-color:var(--brand-color-border-muted)}.Primer_Brand__Box-module__Box-borderColor--subtle___SnZYA{border-color:var(--brand-color-border-subtle)}.Primer_Brand__Text-module__Text___pecHN{font-family:var(--brand-body-fontFamily)}[data-color-mode=dark] .Primer_Brand__Text-module__Text--antialiased___fYDxq{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Text-module__Text--default___DChoE{color:var(--brand-color-text-default)}.Primer_Brand__Text-module__Text--muted___lTaVa{color:var(--brand-color-text-muted)}.Primer_Brand__Text-module__Text-font--mona-sans___GpzSG{font-family:var(--brand-body-fontFamily)}.Primer_Brand__Text-module__Text-font--hubot-sans___l0tzF{font-family:var(--brand-body-fontFamilyAlt)}.Primer_Brand__Text-module__Text-font--monospace___Mifnv{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__Text-module__Text--1000___j3rsl{font-weight:var(--brand-text-weight-1000);font-size:var(--brand-text-size-1000);line-height:var(--brand-text-lineHeight-1000);letter-spacing:var(--brand-text-letterSpacing-1000)}.Primer_Brand__Text-module__Text--900___Fo_yP{font-weight:var(--brand-text-weight-900);font-size:var(--brand-text-size-900);line-height:var(--brand-text-lineHeight-900);letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Text-module__Text--800___OdB5a{font-weight:var(--brand-text-weight-800);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800)}.Primer_Brand__Text-module__Text--700___cOggy{font-weight:var(--brand-text-weight-700);font-size:var(--brand-text-size-700);line-height:var(--brand-text-lineHeight-700);letter-spacing:var(--brand-text-letterSpacing-700)}.Primer_Brand__Text-module__Text--600___ThppA{font-weight:var(--brand-text-weight-600);font-size:var(--brand-text-size-600);line-height:var(--brand-text-lineHeight-600)}.Primer_Brand__Text-module__Text--500___orDRu{font-weight:var(--brand-text-weight-500);font-size:var(--brand-text-size-500);line-height:var(--brand-text-lineHeight-500)}.Primer_Brand__Text-module__Text--400___y7m4l{font-weight:var(--brand-text-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-text-lineHeight-400);letter-spacing:var(--brand-text-letterSpacing-400)}.Primer_Brand__Text-module__Text--350___L4bn4{font-weight:var(--brand-text-weight-350);font-size:var(--brand-text-size-350);line-height:var(--brand-text-lineHeight-350);letter-spacing:var(--brand-text-letterSpacing-350)}.Primer_Brand__Text-module__Text--300___TBQTB{font-weight:var(--brand-text-weight-300);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-300)}.Primer_Brand__Text-module__Text--200___XAIGT{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200)}.Primer_Brand__Text-module__Text--100___csEom{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__Text-module__Text--weight-heavy___ege7O,.Primer_Brand__Text-module__Text-narrow--weight-heavy___EZzqD{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Text-module__Text--weight-extrabold____UVFN,.Primer_Brand__Text-module__Text-narrow--weight-extrabold___ts3be{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Text-module__Text--weight-bold___jgFdL,.Primer_Brand__Text-module__Text-narrow--weight-bold___Flbbf{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Text-module__Text--weight-semibold___Ns19j,.Primer_Brand__Text-module__Text-narrow--weight-semibold___jtFFh{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Text-module__Text--weight-medium___E0iQL,.Primer_Brand__Text-module__Text-narrow--weight-medium___tQs9y{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Text-module__Text--weight-normal___siVLX,.Primer_Brand__Text-module__Text-narrow--weight-normal___gb0q4{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Text-module__Text--weight-light___SpQAz,.Primer_Brand__Text-module__Text-narrow--weight-light___cIyjf{font-weight:var(--base-text-weight-light)}.Primer_Brand__Text-module__Text--weight-extralight___JRMel,.Primer_Brand__Text-module__Text-narrow--weight-extralight___aHSut{font-weight:var(--base-text-weight-extralight)}@media screen and (width>=48rem){.Primer_Brand__Text-module__Text-regular--weight-heavy___YumNc{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Text-module__Text-regular--weight-extrabold___uvNQM{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Text-module__Text-regular--weight-bold___E3xyf{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Text-module__Text-regular--weight-semibold___Wwz9g{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Text-module__Text-regular--weight-medium___TnD35{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Text-module__Text-regular--weight-normal___FEkFF{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Text-module__Text-regular--weight-light___MalyV{font-weight:var(--base-text-weight-light)}.Primer_Brand__Text-module__Text-regular--weight-extralight___p7mr2{font-weight:var(--base-text-weight-extralight)}}@media screen and (width>=80rem){.Primer_Brand__Text-module__Text-wide--weight-heavy___AXiAN{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Text-module__Text-wide--weight-extrabold___rggXv{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Text-module__Text-wide--weight-bold___CWJA2{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Text-module__Text-wide--weight-semibold___LEBmW{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Text-module__Text-wide--weight-medium___QQ0IW{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Text-module__Text-wide--weight-normal___KpqrG{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Text-module__Text-wide--weight-light___iYFr9{font-weight:var(--base-text-weight-light)}.Primer_Brand__Text-module__Text-wide--weight-extralight___HH1z4{font-weight:var(--base-text-weight-extralight)}}.Primer_Brand__Text-module__Text-align--start___wkiCN{text-align:start}.Primer_Brand__Text-module__Text-align--end___E4m7M{text-align:end}.Primer_Brand__Text-module__Text-align--center___NbZtZ{text-align:center}.Primer_Brand__EyebrowText-module__EyebrowText___YZHDa{text-transform:uppercase;letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__EyebrowText-module__EyebrowText--variant-accent___p07g3{color:var(--brand-color-accent-primary)}:root{--brand-TextCursorAnimation-cursor-animationDuration:.833s}:root,[data-color-mode=light]{--brand-TextCursorAnimation-cursor-color:var(--base-color-scale-purple-5);--brand-TextCursorAnimation-cursor-deleteColor:var(--base-color-scale-blue-4);--brand-TextCursorAnimation-cursor-finalColor:var(--base-color-scale-green-6)}[data-color-mode=dark]{--brand-TextCursorAnimation-cursor-color:var(--base-color-scale-purple-3);--brand-TextCursorAnimation-cursor-deleteColor:var(--base-color-scale-blue-3);--brand-TextCursorAnimation-cursor-finalColor:var(--base-color-scale-green-2)}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation___oT5SI{align-items:center;display:inline-flex}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__inner___MKMEx{align-items:center;display:inline-flex;position:relative}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__text___gB3n2{font-weight:var(--brand-text-weight-500);white-space:pre}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__sizingContainer___BLhzn{clip-path:inset(50%);display:inline-grid}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__sizingText___ipUBO{grid-area:1/1}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__content___V_c3N{align-items:center;gap:var(--base-size-6);display:inline-flex}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__content--animated___HgWNj{position:absolute;inset-block-start:0;inset-inline-start:0}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor___fNada{width:calc(var(--base-size-8) + var(--base-size-2) / 2);height:calc(var(--base-size-12) + var(--base-size-2));flex:0 0 calc(var(--base-size-8) + var(--base-size-2) / 2);position:relative;top:-.5px}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--initial___y1m0J{background-color:var(--brand-TextCursorAnimation-cursor-color)}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--animated___NKuyb{animation:Primer_Brand__TextCursorAnimation-module__TextCursorAnimation-cursor-blink___B89IH var(--brand-TextCursorAnimation-cursor-animationDuration) steps(1, end) .25s 3 forwards}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--correction___H0shI{background-color:var(--brand-TextCursorAnimation-cursor-deleteColor)}.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--final___HqWmn,.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor--complete___eaBZl{background-color:var(--brand-TextCursorAnimation-cursor-finalColor)}@keyframes Primer_Brand__TextCursorAnimation-module__TextCursorAnimation-cursor-blink___B89IH{0%,79%{opacity:1}80%,99%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__TextCursorAnimation-module__TextCursorAnimation__cursor___fNada{animation:none}}.Primer_Brand__Hero-module__Hero___EM3jf{flex-direction:column;display:flex}.Primer_Brand__Hero-module__Hero--variant-default___TGFpg{padding:var(--brand-Hero-narrow-padding)}.Primer_Brand__Hero-module__Hero--align-start___m8GEr{text-align:left;align-items:flex-start}.Primer_Brand__Hero-module__Hero--align-center___HUXm3{text-align:center;place-items:center}.Primer_Brand__Hero-module__Hero-grid___ty4Y7{--brand-Grid-spacing-margin:0}.Primer_Brand__Hero-module__Hero-grid--contained___AU1X0{width:100%;max-width:1280px;padding:var(--base-size-32);background-color:var(--brand-Hero-bgColor-gridlineGridInner);margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero-grid--contained___AU1X0{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero-grid--block-end___vzO3L,.Primer_Brand__Hero-module__Hero-grid--inline-end___Hh_fz{--brand-Grid-spacing-row:var(--base-size-40)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-grid--contained___AU1X0{padding:var(--base-size-64)}.Primer_Brand__Hero-module__Hero-grid--block-end___vzO3L{--brand-Grid-spacing-row:var(--base-size-80)}}.Primer_Brand__Hero-module__Hero--align-center___HUXm3 .Primer_Brand__Hero-module__Hero-actions___oH1NT{justify-content:center}.Primer_Brand__Hero-module__Hero--align-center___HUXm3 .Primer_Brand__Hero-module__Hero-content___kP85C{flex-direction:column;align-items:center;display:flex}.Primer_Brand__Hero-module__Hero-image___ctmnL{border-radius:var(--brand-borderRadius-medium);width:100%}.Primer_Brand__Hero-module__Hero-image___ctmnL>img{border-radius:inherit}.Primer_Brand__Hero-module__Hero-mediaContainer___DFAW_{flex:1;width:100%;height:100%;display:flex}.Primer_Brand__Hero-module__Hero-imageContainer--bg-subtle___pdiQ2{background-color:var(--brand-color-canvas-subtle);padding:var(--base-size-32) var(--base-size-32) 0}.Primer_Brand__Hero-module__Hero-imageContainer--inline-padding-all___Uu74V{padding:var(--base-size-32);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Hero-module__Hero-imageWrapper___hXPku{justify-content:center;width:100%;display:flex}.Primer_Brand__Hero-module__Hero-imageWrapper--bg-subtle___YSEjN{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);background-color:var(--brand-color-canvas-subtle);padding:var(--base-size-32) var(--base-size-32) 0}.Primer_Brand__Hero-module__Hero-imageContainer--inline-bordered____bhxf{align-items:stretch;display:flex}.Primer_Brand__Hero-module__Hero-imageContainer--inline-bordered____bhxf:not(.Primer_Brand__Hero-module__Hero-imageContainer--inline-padding-none___xKjhe){background-color:var(--brand-color-canvas-subtle)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-imageContainer--inline-bordered____bhxf{min-height:calc(600px - var(--base-size-24))}.Primer_Brand__Hero-module__Hero-imageWrapper--bg-subtle___YSEjN{padding:var(--base-size-64) var(--base-size-64) 0}.Primer_Brand__Hero-module__Hero-imageContainer--inline-padding-all___Uu74V{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa{width:100%;container-type:inline-size}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media___tN0uT{max-width:1176px;margin-inline:auto;display:block;overflow:hidden}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--pos-block-end___XPyHx:not(.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q):not(.Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo){border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__Hero-module__Hero-media--pos-block-end___XPyHx.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Hero-module__Hero-media-item--block-end___gAlCl{border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);width:100%}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku:not(.Primer_Brand__Hero-module__Hero-imageWrapper--padding-none___e4ebj){background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{width:100%;max-width:1280px;padding:var(--base-size-32) var(--base-size-32) 0;margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--with-gridline___shdFJ{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-32)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{padding:var(--base-size-64) var(--base-size-64) 0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-none___aFKaV{padding:0}.Primer_Brand__Hero-module__Hero-grid--bordered-inline___WO6tw{width:100%;max-width:1280px;margin-inline:auto}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-grid--bordered-inline___WO6tw{min-height:440px}}@container (width>=1280px){.Primer_Brand__Hero-module__Hero-grid--bordered-inline___WO6tw{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa.Primer_Brand__Hero-module__Hero--image-pos-inline___xR7vm{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__Hero-module__Hero-contentColumn--bordered-inline___dpmwM{padding:var(--base-size-32);flex-direction:column;justify-content:center;display:flex}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-contentColumn--bordered-inline___dpmwM{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--pos-inline___fithu:not(.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q),.Primer_Brand__Hero-module__Hero-media-item--inline___QS58d{border-radius:0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--pos-inline___fithu.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q{align-self:center;max-width:100%;height:auto}.Primer_Brand__Hero-module__Hero-video___Nibos{width:100%}.Primer_Brand__Hero-module__Hero-media-item___ZpZ02{border-radius:var(--brand-borderRadius-large);width:100%}.Primer_Brand__Hero-module__Hero-label___exV9w{text-transform:uppercase;letter-spacing:1px;align-items:center;margin-block-end:calc(var(--base-size-16) - var(--base-size-2));display:flex}.Primer_Brand__Hero-module__Hero-heading___QuVBH{max-width:924px;margin:0}.Primer_Brand__Hero-module__Hero-heading___QuVBH b{color:var(--brand-color-accent-primary);font-style:normal;font-weight:inherit}.Primer_Brand__Hero-module__Hero-heading--fullWidth___Q3N1y{max-width:none;max-width:initial}.Primer_Brand__Hero-module__Hero-text-column--inline-gridline___ADqxq{height:100%}.Primer_Brand__Hero-module__Hero-description___vG4iA{margin:var(--base-size-24) 0 0;max-width:600px}.Primer_Brand__Hero-module__Hero--variant-inline-gridline___C1LBx .Primer_Brand__Hero-module__Hero-description___vG4iA{margin-block-start:auto;padding-block-start:var(--base-size-24)}.Primer_Brand__Hero-module__Hero-actions___oH1NT{align-items:center;gap:var(--base-size-8) var(--base-size-16);flex-wrap:wrap;margin-block-start:var(--base-size-28);display:flex}.Primer_Brand__Hero-module__Hero___EM3jf .Primer_Brand__Hero-module__Hero-actions___oH1NT>*{flex-grow:0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-actions___oH1NT{align-items:stretch;gap:var(--base-size-8) var(--base-size-12)}.Primer_Brand__Hero-module__Hero-trailing___UeIyX{margin-block-start:var(--base-size-32)}.Primer_Brand__Hero-module__Hero-trailing___UeIyX img,.Primer_Brand__Hero-module__Hero-trailing___UeIyX picture{display:block}.Primer_Brand__Hero-module__Hero-eyebrow___NLX6a{margin-block-end:var(--base-size-32)}@media screen and (width>=34rem){.Primer_Brand__Hero-module__Hero--variant-default___TGFpg{padding:var(--brand-Hero-regular-padding)}}.Primer_Brand__Hero-module__Hero-video-poster-button___fXNeO{cursor:pointer;background:0 0;border:none;width:100%;height:100%;padding:0;font-size:0;line-height:0;display:block;position:relative}.Primer_Brand__Hero-module__Hero-video-poster-image___OF5WQ{width:100%;height:auto;display:block}.Primer_Brand__Hero-module__Hero-video-poster-icon___qBPv_{width:var(--base-size-96);height:var(--base-size-96);z-index:1;color:var(--base-color-scale-white-0);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.Primer_Brand__Hero-module__Hero-video-poster-header___RwX23{padding:var(--base-size-16) var(--base-size-24);align-items:center;gap:var(--base-size-16);height:var(--base-size-80);background:linear-gradient(#000000b3 60%,#0000);display:flex;position:absolute;inset:0 0 auto}.Primer_Brand__Hero-module__Hero-video-header-poster-icon___WOvuy,.Primer_Brand__Hero-module__Hero-video-poster-text___XZwq_{color:var(--base-color-scale-white-0)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0{width:100%;container-type:inline-size}.Primer_Brand__Hero-module__Hero-grid--expressive___VviA1{--brand-Grid-spacing-row:0;gap:0;width:100%;max-width:1280px;margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero-grid--expressive___VviA1{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero-expressive-header-column___ycDFD{padding:var(--base-size-36);padding-inline:var(--base-size-20);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);align-items:center;padding-block-end:var(--base-size-28);display:flex}.Primer_Brand__Hero-module__Hero-expressive-body-column___k1AUC{padding:var(--base-size-32);padding-inline:var(--base-size-20);padding-block-start:var(--base-size-24)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-description___vG4iA{margin-block-start:0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-actions___oH1NT{margin-block-start:var(--base-size-28)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-trailing___UeIyX{margin-block-start:var(--base-size-24)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero-expressive-header-column___ycDFD{padding:var(--base-size-64);border-block-end:none;border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-inline-end:var(--base-size-64)}.Primer_Brand__Hero-module__Hero-expressive-body-column___k1AUC{padding:var(--base-size-64);flex-direction:column;justify-content:flex-end;padding-inline-start:var(--base-size-64);display:flex}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-actions___oH1NT{margin-block-start:var(--base-size-24)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-trailing___UeIyX{margin-block-start:var(--base-size-20)}}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);width:100%}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper___hXPku:not(.Primer_Brand__Hero-module__Hero-imageWrapper--padding-none___e4ebj){background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{width:100%;max-width:1280px;padding:var(--base-size-32) var(--base-size-32) 0;margin-inline:auto}@container (width>=1280px){.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--with-gridline___shdFJ{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-32)}@media screen and (width>=63.25rem){.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner___grxfI{padding:var(--base-size-64) var(--base-size-64) 0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-all___Iu5X5{padding:var(--base-size-64)}}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-imageWrapper-inner--padding-none___aFKaV{padding:0}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-media___tN0uT{max-width:1176px;margin-inline:auto;display:block;overflow:hidden}.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-media--pos-block-end___XPyHx:not(.Primer_Brand__Hero-module__Hero-media--padding-all___XQm3q):not(.Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo){border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__Hero-module__Hero--variant-gridline___V46Aa .Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo,.Primer_Brand__Hero-module__Hero--variant-gridline-expressive___VAhu0 .Primer_Brand__Hero-module__Hero-media--padding-none___mvsXo{border-radius:0;max-width:100%}.Primer_Brand__Heading-module__Heading___IVpmp{--condensed-stretch:75%;color:var(--brand-color-text-default)}.Primer_Brand__Heading-module__Heading--textWrap-balance___AOKvC{text-wrap:balance}.Primer_Brand__Heading-module__Heading--textWrap-wrap___iM9k3{text-wrap:wrap}.Primer_Brand__Heading-module__Heading-font--hubot-sans___w3_5f{--condensed-stretch:90%}[data-color-mode=dark] .Primer_Brand__Heading-module__Heading___IVpmp{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.Primer_Brand__Heading-module__Heading-font--mona-sans___SCnTx{font-family:var(--brand-heading-fontFamily)}.Primer_Brand__Heading-module__Heading-font--hubot-sans___w3_5f{font-family:var(--brand-heading-fontFamilyAlt)}.Primer_Brand__Heading-module__Heading-font--monospace___dFpiK{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__Heading-module__Heading--display___xFecE{font-weight:var(--brand-heading-weight-1000);font-size:var(--brand-text-size-1000);line-height:var(--brand-text-lineHeight-1000);letter-spacing:var(--brand-text-letterSpacing-1000)}.Primer_Brand__Heading-module__Heading--subhead-large____C6GZ{font-weight:var(--brand-text-subhead-weight-large);font-size:var(--brand-text-subhead-size-large);line-height:var(--brand-text-subhead-lineHeight-large)}.Primer_Brand__Heading-module__Heading--subhead-medium___Pik5E{font-weight:var(--brand-text-subhead-weight-medium);font-size:var(--brand-text-subhead-size-medium);line-height:var(--brand-text-subhead-lineHeight-medium)}.Primer_Brand__Heading-module__Heading--1___Ufc7G{font-weight:var(--brand-heading-weight-900);font-size:var(--brand-text-size-900);line-height:var(--brand-text-lineHeight-900);letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading--2___TFg09{font-weight:var(--brand-heading-weight-800);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800)}.Primer_Brand__Heading-module__Heading--3___wsITu{font-weight:var(--brand-heading-weight-700);font-size:var(--brand-text-size-700);line-height:var(--brand-heading-lineHeight-700);letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading--4___C9jDG{font-weight:var(--brand-heading-weight-600);font-size:var(--brand-text-size-600);line-height:var(--brand-text-lineHeight-600);letter-spacing:var(--brand-heading-letterSpacing-600)}.Primer_Brand__Heading-module__Heading--5___HgypG{font-weight:var(--brand-heading-weight-500);font-size:var(--brand-text-size-500);line-height:var(--brand-text-lineHeight-500);letter-spacing:var(--brand-heading-letterSpacing-500)}.Primer_Brand__Heading-module__Heading--6___FEQ_V{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-text-lineHeight-400);letter-spacing:var(--brand-heading-letterSpacing-400)}.Primer_Brand__Heading-module__Heading--weight-heavy___ssSay,.Primer_Brand__Heading-module__Heading-narrow--weight-heavy___s43iL{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Heading-module__Heading--weight-extrabold___SJAUw,.Primer_Brand__Heading-module__Heading-narrow--weight-extrabold___vmOAQ{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Heading-module__Heading--weight-bold___Zqsyk,.Primer_Brand__Heading-module__Heading-narrow--weight-bold___IXjRC{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Heading-module__Heading--weight-semibold___NMvbh,.Primer_Brand__Heading-module__Heading-narrow--weight-semibold___bAIHy{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Heading-module__Heading--weight-medium___II172,.Primer_Brand__Heading-module__Heading-narrow--weight-medium___q5O6L{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Heading-module__Heading--weight-normal___ZLGhx,.Primer_Brand__Heading-module__Heading-narrow--weight-normal___Q0Jkf{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Heading-module__Heading--weight-light___aF2Rw,.Primer_Brand__Heading-module__Heading-narrow--weight-light___mOWUt{font-weight:var(--base-text-weight-light)}.Primer_Brand__Heading-module__Heading--weight-extralight___KRgjg,.Primer_Brand__Heading-module__Heading-narrow--weight-extralight___qHJfi{font-weight:var(--base-text-weight-extralight)}@media screen and (width>=48rem){.Primer_Brand__Heading-module__Heading-regular--weight-heavy___SwJ1c{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Heading-module__Heading-regular--weight-extrabold___H5Gyr{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Heading-module__Heading-regular--weight-bold___QMMCW{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Heading-module__Heading-regular--weight-semibold___h3bHv{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Heading-module__Heading-regular--weight-medium___wC9qR{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Heading-module__Heading-regular--weight-normal___joqMx{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Heading-module__Heading-regular--weight-light___CCVVF{font-weight:var(--base-text-weight-light)}.Primer_Brand__Heading-module__Heading-regular--weight-extralight___LE9Tu{font-weight:var(--base-text-weight-extralight)}}@media screen and (width>=80rem){.Primer_Brand__Heading-module__Heading-wide--weight-heavy___IiVTg{font-weight:var(--base-text-weight-heavy)}.Primer_Brand__Heading-module__Heading-wide--weight-extrabold___CIRWW{font-weight:var(--base-text-weight-extrabold)}.Primer_Brand__Heading-module__Heading-wide--weight-bold___wMxlL{font-weight:var(--base-text-weight-bold)}.Primer_Brand__Heading-module__Heading-wide--weight-semibold___IqaIc{font-weight:var(--base-text-weight-semibold)}.Primer_Brand__Heading-module__Heading-wide--weight-medium___Uq302{font-weight:var(--base-text-weight-medium)}.Primer_Brand__Heading-module__Heading-wide--weight-normal___zWzeR{font-weight:var(--base-text-weight-normal)}.Primer_Brand__Heading-module__Heading-wide--weight-light___Lh64A{font-weight:var(--base-text-weight-light)}}.Primer_Brand__Heading-module__Heading--stretch-condensed____i8A2,.Primer_Brand__Heading-module__Heading-narrow--stretch-condensed___koHLR{font-stretch:var(--condensed-stretch)}.Primer_Brand__Heading-module__Heading--stretch-normal___apWVy,.Primer_Brand__Heading-module__Heading-narrow--stretch-normal___AP9Ba{font-stretch:100%}.Primer_Brand__Heading-module__Heading--stretch-expanded___gzwLQ,.Primer_Brand__Heading-module__Heading-narrow--stretch-expanded___RHi1z{font-stretch:125%}@media screen and (width>=48rem){.Primer_Brand__Heading-module__Heading-regular--stretch-condensed___CHFa4{font-stretch:var(--condensed-stretch)}.Primer_Brand__Heading-module__Heading-regular--stretch-normal___IX9Vl{font-stretch:100%}.Primer_Brand__Heading-module__Heading-regular--stretch-expanded___ozx5y{font-stretch:125%}}@media screen and (width>=80rem){.Primer_Brand__Heading-module__Heading-narrow--weight-expanded___jvotv .Primer_Brand__Heading-module__Heading-wide--stretch-condensed___d3GoN{font-stretch:var(--condensed-stretch)}.Primer_Brand__Heading-module__Heading-wide--stretch-normal___te0lW{font-stretch:100%}.Primer_Brand__Heading-module__Heading-wide--stretch-expanded___TlWrW{font-stretch:125%}}.Primer_Brand__Heading-module__Heading--letter-spacing-condensed___b6mZa,.Primer_Brand__Heading-module__Heading-narrow--letter-spacing-condensed___U6uGD{letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading--letter-spacing-normal___Qhzoc,.Primer_Brand__Heading-module__Heading-narrow--letter-spacing-normal___gzn9r{letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading--letter-spacing-none___vuohz,.Primer_Brand__Heading-module__Heading-narrow--letter-spacing-none___RR_W3{letter-spacing:0}@media screen and (width>=48rem){.Primer_Brand__Heading-module__Heading-regular--letter-spacing-condensed___gEGJy{letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading-regular--letter-spacing-normal___GWmk5{letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading-regular--letter-spacing-none____NH9r{letter-spacing:0}}@media screen and (width>=80rem){.Primer_Brand__Heading-module__Heading-narrow--weight-wide___ikyG2 .Primer_Brand__Heading-module__Heading-wide--letter-spacing-condensed___RhUHL{letter-spacing:var(--brand-text-letterSpacing-900)}.Primer_Brand__Heading-module__Heading-wide--letter-spacing-normal___qPBdW{letter-spacing:var(--brand-heading-letterSpacing-700)}.Primer_Brand__Heading-module__Heading-wide--letter-spacing-none___w4Oh2{letter-spacing:0}}.Primer_Brand__ExpandableArrow-module__ExpandableArrow___rkfek{--ExpandableArrow-duration:.2s;--ExpandableArrow-easing:ease;transition:transform .2s;transition:transform var(--ExpandableArrow-duration) var(--ExpandableArrow-easing);transform:translate(0)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow--expanded___gajDr{transform:translate(4px)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___g4mdy{stroke-dasharray:10;stroke-dashoffset:10px;transition:stroke-dashoffset var(--ExpandableArrow-duration) var(--ExpandableArrow-easing)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem--expanded___KwI_9{stroke-dashoffset:20px}.Primer_Brand__ExpandableArrow-module__ExpandableArrow--reversed___LPFUS{transform:rotate(180deg)}.Primer_Brand__ExpandableArrow-module__ExpandableArrow--reversed___LPFUS.Primer_Brand__ExpandableArrow-module__ExpandableArrow--expanded___gajDr{transform:rotate(180deg)translate(4px)}:root{--brand-Button-icon-size-large:var(--base-size-20);--brand-Button-icon-size-medium:var(--base-size-16);--brand-Button-icon-size-small:var(--base-size-16);--brand-Button-control-size-large:var(--brand-control-large-size);--brand-Button-control-size-medium:var(--brand-control-medium-size);--brand-Button-control-size-small:var(--brand-control-small-size)}:root,[data-color-mode=light]{--brand-button-primary-bgColor-rest:var(--base-color-scale-green-6);--brand-button-primary-bgColor-hover:color-mix(in srgb, var(--base-color-scale-green-6), #000 16%);--brand-button-primary-bgColor-active:linear-gradient(0deg, #0000003d 0%, #0000003d 100%), var(--base-color-scale-green-6);--brand-button-primary-bgColor-disabled:var(--base-color-scale-gray-4);--brand-button-primary-borderColor-rest:transparent;--brand-button-primary-borderColor-hover:transparent;--brand-button-primary-borderColor-active:var(--base-color-scale-green-7);--brand-button-primary-borderColor-disabled:transparent;--brand-button-primary-fgColor-rest:var(--base-color-scale-white-0);--brand-button-primary-fgColor-disabled:var(--base-color-scale-gray-2);--brand-button-primary-shadow-active:none;--brand-button-secondary-bgColor-rest:#0000000f;--brand-button-secondary-bgColor-hover:#0000001e;--brand-button-secondary-bgColor-active:#00000036;--brand-button-secondary-borderColor-rest:var(--base-color-scale-gray-2);--brand-button-secondary-borderColor-hover:var(--base-color-scale-gray-2);--brand-button-secondary-borderColor-active:var(--base-color-scale-gray-2);--brand-button-secondary-fgColor-rest:var(--brand-color-text-default);--brand-button-secondary-fgColor-disabled:var(--base-color-scale-gray-3);--brand-button-subtle-bgColor-rest:#00000003;--brand-button-subtle-bgColor-hover:#0000001e;--brand-button-subtle-bgColor-active:#00000036;--brand-button-subtle-borderColor-rest:var(--base-color-scale-gray-2);--brand-button-subtle-borderColor-hover:var(--base-color-scale-gray-2);--brand-button-subtle-borderColor-active:var(--base-color-scale-gray-2);--brand-button-subtle-fgColor-rest:var(--brand-color-text-default);--brand-button-subtle-fgColor-disabled:var(--base-color-scale-gray-3)}[data-color-mode=dark]{--brand-button-primary-bgColor-rest:var(--base-color-scale-green-5);--brand-button-primary-bgColor-hover:color-mix(in srgb, var(--base-color-scale-green-5), #000 16%);--brand-button-primary-bgColor-active:linear-gradient(0deg, #0000003d 0%, #0000003d 100%), var(--base-color-scale-green-5);--brand-button-primary-bgColor-disabled:var(--base-color-scale-gray-4);--brand-button-primary-borderColor-rest:transparent;--brand-button-primary-borderColor-hover:transparent;--brand-button-primary-borderColor-active:var(--base-color-scale-green-6);--brand-button-primary-borderColor-disabled:transparent;--brand-button-primary-fgColor-rest:var(--base-color-scale-white-0);--brand-button-primary-fgColor-disabled:var(--base-color-scale-gray-2);--brand-button-primary-shadow-active:none;--brand-button-secondary-bgColor-rest:#ffffff1f;--brand-button-secondary-bgColor-hover:#ffffff29;--brand-button-secondary-bgColor-active:#ffffff42;--brand-button-secondary-borderColor-rest:#ffffff0f;--brand-button-secondary-borderColor-hover:#ffffff1f;--brand-button-secondary-borderColor-active:#ffffff1f;--brand-button-secondary-fgColor-rest:var(--brand-color-text-default);--brand-button-secondary-fgColor-disabled:var(--base-color-scale-gray-4);--brand-button-subtle-bgColor-rest:#00000003;--brand-button-subtle-bgColor-hover:#ffffff29;--brand-button-subtle-bgColor-active:#ffffff3d;--brand-button-subtle-borderColor-rest:var(--base-color-scale-gray-6);--brand-button-subtle-borderColor-hover:#ffffff1f;--brand-button-subtle-borderColor-active:#ffffff1f;--brand-button-subtle-fgColor-rest:var(--brand-color-text-default);--brand-button-subtle-fgColor-disabled:var(--base-color-scale-gray-4)}.Primer_Brand__Button-module__Button___lDruK{appearance:none;-webkit-user-select:none;user-select:none;vertical-align:middle;border-radius:var(--base-size-6);cursor:pointer;border:solid var(--brand-borderWidth-thin) transparent;box-sizing:border-box;justify-content:center;align-items:center;gap:var(--brand-control-medium-gap);background:0 0;-webkit-text-decoration:none;text-decoration:none;transition:background-color .2s,border-color .2s;display:inline-flex}.Primer_Brand__Button-module__Button___lDruK:where(button){font:inherit}.Primer_Brand__Button-module__Button___lDruK:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Button-module__Button___lDruK:focus-visible{outline:4px solid var(--brand-color-focus);outline-offset:2px;transition:none}.Primer_Brand__Button-module__Button--disabled___Ba17E,.Primer_Brand__Button-module__Button--disabled___Ba17E:hover,.Primer_Brand__Button-module__Button--disabled___Ba17E:focus{cursor:not-allowed}.Primer_Brand__Button-module__Button--size-small___iNTn1 .Primer_Brand__Button-module__Button__text___Z3ocU{display:flex}.Primer_Brand__Button-module__Button__text___Z3ocU{position:relative}.Primer_Brand__Button-module__Button--label___lUBc0{font-family:var(--brand-body-fontFamily);font-style:normal;font-weight:var(--base-text-weight-medium);text-align:center}.Primer_Brand__Button-module__Button__icon-visual___zR2Hi{height:var(--brand-Button-icon-size-medium);fill:currentColor;align-self:center;width:auto;display:flex}.Primer_Brand__Button-module__Button__trailing-visual___zg8jd,.Primer_Brand__Button-module__Button__leading-visual___FIPvg{display:flex}.Primer_Brand__Button-module__Button-arrow___SkJXQ{margin-inline-start:calc(var(--base-size-8) * -1);margin-inline-end:calc(var(--base-size-4) * -1)}.Primer_Brand__Button-module__Button--primary___xIC7G{color:var(--brand-button-primary-fgColor-rest);background-color:var(--brand-button-primary-bgColor-rest)}.Primer_Brand__Button-module__Button--size-small___iNTn1.Primer_Brand__Button-module__Button--primary___xIC7G{border-width:var(--brand-borderWidth-thin)}.Primer_Brand__Button-module__Button--primary___xIC7G:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true]):not([aria-expanded=true])):hover{background-color:var(--brand-button-primary-bgColor-hover)}.Primer_Brand__Button-module__Button--primary___xIC7G:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true])):active,.Primer_Brand__Button-module__Button--primary___xIC7G[aria-expanded=true]{background:var(--brand-button-primary-bgColor-active);border-color:var(--brand-button-primary-borderColor-active)}.Primer_Brand__Button-module__Button--label-primary___Leisi{color:var(--brand-button-primary-fgColor-rest)}.Primer_Brand__Button-module__Button--primary___xIC7G:disabled,.Primer_Brand__Button-module__Button--primary___xIC7G[aria-disabled=true],.Primer_Brand__Button-module__Button--primary___xIC7G.Primer_Brand__Button-module__Button--disabled___Ba17E{background-color:var(--brand-button-primary-bgColor-disabled)}.Primer_Brand__Button-module__Button--primary___xIC7G:where(:disabled,[aria-disabled=true],.Primer_Brand__Button-module__Button--disabled___Ba17E) :where(.Primer_Brand__Button-module__Button-arrow--disabled____UgPq,.Primer_Brand__Button-module__Button__icon-visual--disabled___j7aVy),.Primer_Brand__Button-module__Button--label-primary___Leisi.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:var(--brand-button-primary-fgColor-disabled)}.Primer_Brand__Button-module__Button--secondary___akMC2{background-color:var(--brand-button-secondary-bgColor-rest);border-color:var(--brand-button-secondary-borderColor-rest);color:var(--brand-button-secondary-fgColor-rest);-webkit-backdrop-filter:blur(var(--base-size-20));backdrop-filter:blur(var(--base-size-20))}.Primer_Brand__Button-module__Button--secondary___akMC2:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true]):not([aria-expanded=true])):hover{background-color:var(--brand-button-secondary-bgColor-hover);border-color:var(--brand-button-secondary-borderColor-hover)}.Primer_Brand__Button-module__Button--secondary___akMC2:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true])):active,.Primer_Brand__Button-module__Button--secondary___akMC2[aria-expanded=true]{background-color:var(--brand-button-secondary-bgColor-active);border-color:var(--brand-button-secondary-borderColor-active)}.Primer_Brand__Button-module__Button--secondary___akMC2:disabled{border-color:var(--brand-button-secondary-fgColor-disabled)}.Primer_Brand__Button-module__Button--secondary___akMC2:where(:disabled,[aria-disabled=true],.Primer_Brand__Button-module__Button--disabled___Ba17E) :where(.Primer_Brand__Button-module__Button-arrow--disabled____UgPq,.Primer_Brand__Button-module__Button__icon-visual--disabled___j7aVy),.Primer_Brand__Button-module__Button--label-secondary___DRJoJ.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:var(--brand-button-secondary-fgColor-disabled)}.Primer_Brand__Button-module__Button--subtle___UMmi9{background-color:var(--brand-button-subtle-bgColor-rest);border-width:var(--brand-borderWidth-thin);border-color:var(--brand-button-subtle-borderColor-rest);color:var(--brand-color-text-default);-webkit-backdrop-filter:blur(var(--base-size-20));backdrop-filter:blur(var(--base-size-20))}.Primer_Brand__Button-module__Button--subtle___UMmi9:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true]):not([aria-expanded=true])):hover{background-color:var(--brand-button-subtle-bgColor-hover);border-color:var(--brand-button-subtle-borderColor-hover)}.Primer_Brand__Button-module__Button--subtle___UMmi9:where(:not(.Primer_Brand__Button-module__Button___lDruK[disabled]):not(.Primer_Brand__Button-module__Button___lDruK[aria-disabled=true])):active,.Primer_Brand__Button-module__Button--subtle___UMmi9[aria-expanded=true]{background-color:var(--brand-button-subtle-bgColor-active);border-color:var(--brand-button-subtle-borderColor-active)}.Primer_Brand__Button-module__Button--label-subtle___RRaqm{color:var(--brand-button-subtle-fgColor-rest)}.Primer_Brand__Button-module__Button--subtle___UMmi9:where(:disabled,[aria-disabled=true],.Primer_Brand__Button-module__Button--disabled___Ba17E) :where(.Primer_Brand__Button-module__Button-arrow--disabled____UgPq,.Primer_Brand__Button-module__Button__icon-visual--disabled___j7aVy),.Primer_Brand__Button-module__Button--label-subtle___RRaqm.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:var(--brand-button-subtle-fgColor-disabled)}.Primer_Brand__Button-module__Button--size-small___iNTn1{min-height:var(--brand-Button-control-size-small);padding-inline:var(--brand-control-small-paddingInline-normal)}.Primer_Brand__Button-module__Button--size-medium___EyCyw{min-height:var(--brand-Button-control-size-medium);padding:var(--brand-control-medium-paddingBlock-condensed) var(--base-size-20)}.Primer_Brand__Button-module__Button--size-large___REN1l{min-height:var(--brand-Button-control-size-large);padding:var(--brand-control-large-paddingBlock-condensed) var(--brand-control-large-paddingInline-spacious)}.Primer_Brand__Button-module__Button--size-small___iNTn1 :where(.Primer_Brand__Button-module__Button__icon-visual___zR2Hi){height:var(--brand-Button-icon-size-small)}.Primer_Brand__Button-module__Button--size-medium___EyCyw :where(.Primer_Brand__Button-module__Button__icon-visual___zR2Hi){height:var(--brand-Button-icon-size-medium)}.Primer_Brand__Button-module__Button--size-large___REN1l :where(.Primer_Brand__Button-module__Button__icon-visual___zR2Hi,.Primer_Brand__Button-module__Button-arrow___SkJXQ){height:var(--brand-Button-icon-size-large);width:var(--brand-Button-icon-size-large)}.Primer_Brand__Button-module__Button--label-medium___DW2TM{font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:.01rem}.Primer_Brand__Button-module__Button--label-large____iBy6{font-size:var(--brand-text-subhead-size-large);line-height:var(--brand-text-subhead-lineHeight-large)}.Primer_Brand__Button-module__Button--block___F5RXs{width:100%}@media (forced-colors:active){.Primer_Brand__Button-module__Button--disabled___Ba17E{outline-color:graytext}.Primer_Brand__Button-module__Button--label___lUBc0.Primer_Brand__Button-module__Button-label--disabled___ZBpbj{color:graytext}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Button-module__Button___lDruK,.Primer_Brand__Button-module__Button___lDruK:before,.Primer_Brand__Button-module__Button___lDruK:after,.Primer_Brand__Button-module__Button___lDruK *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz{display:none}@media (forced-colors:active){.Primer_Brand__Tooltip-module__Tooltip___u1Usz{outline:var(--brand-borderWidth-thin) solid transparent}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[popover]{--offset:var(--base-size-8,--base-size-8);--b:1em;--h:.5em;--p:50%;--r:var(--brand-borderRadius-medium);--c:var(--brand-color-neutral-emphasisPlus);clip:auto;white-space:normal;width:max-content;font:normal normal var(--brand-text-size-100) / var(--brand-text-lineHeight-100) var(--brand-fontStack-sansSerif);-webkit-font-smoothing:subpixel-antialiased;color:var(--brand-Tooltip-color-default);text-align:center;word-wrap:break-word;background:var(--c);border-radius:var(--r);opacity:0;border:0;max-width:250px;margin:auto;padding:.5em .75em;position:absolute;inset:auto;overflow:visible}:is(.Primer_Brand__Tooltip-module__Tooltip___u1Usz[popover]:popover-open,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[popover].Primer_Brand__Tooltip-module__\:popover-open___DQych){animation-name:Primer_Brand__Tooltip-module__tooltip-appear___OeSNz;animation-duration:.2s;animation-duration:var(--brand-animation-duration-faster,.2s);animation-timing-function:ease-in;animation-delay:0s;animation-fill-mode:forwards;display:block}.Primer_Brand__Tooltip-module__Tooltip___u1Usz:after{height:var(--offset);content:"";display:block;position:absolute;left:0;right:0}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=n],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0;border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0;clip-path:polygon(0 100%, 0 0, 100% 0, 100% 100%, min(100%, var(--p) + var(--b) / 2) 100%, var(--p) calc(100% + var(--h)), max(0%, var(--p) - var(--b) / 2) 100%)}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=n],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw]{-o-border-image:conic-gradient(var(--c) 0 0) 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0;border-image:conic-gradient(var(--c) 0 0) fill 0 / var(--r) calc(100% - var(--p) - var(--b) / 2) 0 calc(var(--p) - var(--b) / 2) / 0 0 var(--h) 0}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=s],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0;border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0;clip-path:polygon(0 0, 0 100%, 100% 100%, 100% 0, min(100%, var(--p) + var(--b) / 2) 0, var(--p) calc(-1 * var(--h)), max(0%, var(--p) - var(--b) / 2) 0)}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=s],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]{-o-border-image:conic-gradient(var(--c) 0 0) 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0;border-image:conic-gradient(var(--c) 0 0) fill 0/ 0 calc(100% - var(--p) - var(--b) / 2) var(--r) calc(var(--p) - var(--b) / 2) / var(--h) 0 0 0}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=w]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0;border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0;clip-path:polygon(100% 100%, 0 100%, 0 0, 100% 0, 100% max(0%, var(--p) - var(--b) / 2), calc(100% + var(--h)) var(--p), 100% min(100%, var(--p) + var(--b) / 2))}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=w]{-o-border-image:conic-gradient(var(--c) 0 0) 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0;border-image:conic-gradient(var(--c) 0 0) fill 0 / calc(var(--p) - var(--b) / 2) 0 calc(100% - var(--p) - var(--b) / 2) var(--r) / 0 var(--h) 0 0}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=e]{-o-border-image:conic-gradient(var(--c) 0, var(--c) 0) 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h);border-image:conic-gradient(var(--c) 0, var(--c) 0) fill 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h);clip-path:polygon(0 100%, 100% 100%, 100% 0, 0 0, 0 max(0%, var(--p) - var(--b) / 2), calc(-1 * var(--h)) var(--p), 0 min(100%, var(--p) + var(--b) / 2))}@supports (background:conic-gradient(red 0deg, red 0deg 1deg, red 2deg)){.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=e]{-o-border-image:conic-gradient(var(--c) 0 0) 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h);border-image:conic-gradient(var(--c) 0 0) fill 0 / calc(var(--p) - var(--b) / 2) var(--r) calc(100% - var(--p) - var(--b) / 2) 0/ 0 0 0 var(--h)}}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se]{--p:25%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw],.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]{--p:75%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=n]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=ne]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=nw]:after{top:100%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=s]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=se]:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=sw]:after{bottom:100%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=w]:after{height:100%;width:var(--offset);content:"";display:block;position:absolute;bottom:0;left:100%}.Primer_Brand__Tooltip-module__Tooltip___u1Usz[data-direction=e]:after{height:100%;width:var(--offset);content:"";margin-left:calc(var(--offset) * -1px);display:block;position:absolute;bottom:0;right:100%}@keyframes Primer_Brand__Tooltip-module__tooltip-appear___OeSNz{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Tooltip-module__Tooltip___u1Usz,.Primer_Brand__Tooltip-module__Tooltip___u1Usz:before,.Primer_Brand__Tooltip-module__Tooltip___u1Usz:after,.Primer_Brand__Tooltip-module__Tooltip___u1Usz *{animation-duration:0s!important}}:root,[data-color-mode=light]{--brand-Tooltip-color-default:var(--brand-color-text-onEmphasis)}[data-color-mode=dark]{--brand-Tooltip-color-default:var(--brand-color-text-default)}:root{--brand-IconButton-loadingIndicator-animationDuration-reducedMotion:1.6s;--brand-IconButton-loadingIndicator-animationDuration-default:.8s;--brand-IconButton-icon-size-large:var(--brand-Button-icon-size-large);--brand-IconButton-icon-size-medium:var(--brand-Button-icon-size-large);--brand-IconButton-icon-size-small:var(--brand-Button-icon-size-small);--brand-IconButton-control-size-large:var(--brand-Button-control-size-large);--brand-IconButton-control-size-medium:var(--brand-Button-control-size-medium);--brand-IconButton-control-size-small:var(--brand-Button-control-size-small)}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-IconButton-danger-fgColor-rest:var(--brand-color-danger-fg);--brand-IconButton-danger-fgColor-hover:var(--base-color-scale-white-0);--brand-IconButton-danger-fgColor-active:var(--base-color-scale-white-0);--brand-IconButton-danger-bgColor-rest:var(--brand-button-secondary-bgColor-rest);--brand-IconButton-danger-bgColor-hover:var(--brand-color-danger-emphasis);--brand-IconButton-danger-bgColor-active:var(--brand-color-danger-emphasis);--brand-IconButton-danger-borderColor-rest:var(--brand-button-secondary-borderColor-rest);--brand-IconButton-danger-borderColor-hover:var(--brand-color-danger-emphasis);--brand-IconButton-danger-borderColor-active:var(--brand-color-danger-emphasis);--brand-IconButton-inactive-fgColor:var(--brand-color-text-muted);--brand-IconButton-inactive-bgColor:var(--brand-color-canvas-subtle);--brand-IconButton-inactive-borderColor:var(--brand-color-canvas-subtle);--brand-IconButton-invisible-bgColor-rest:transparent;--brand-IconButton-invisible-borderColor-rest:transparent}.Primer_Brand__IconButton-module__IconButton___Rw5mP{flex:none;gap:0;padding:0}.Primer_Brand__IconButton-module__IconButton___Rw5mP.Primer_Brand__IconButton-module__IconButton___Rw5mP{min-width:var(--brand-IconButton-control-size-medium);width:var(--brand-IconButton-control-size-medium);height:var(--brand-IconButton-control-size-medium)}.Primer_Brand__IconButton-module__IconButton--small___vIOsv.Primer_Brand__IconButton-module__IconButton--small___vIOsv{min-width:var(--brand-IconButton-control-size-small);width:var(--brand-IconButton-control-size-small);height:var(--brand-IconButton-control-size-small)}.Primer_Brand__IconButton-module__IconButton--large___XSwOm.Primer_Brand__IconButton-module__IconButton--large___XSwOm{min-width:var(--brand-IconButton-control-size-large);width:var(--brand-IconButton-control-size-large);height:var(--brand-IconButton-control-size-large)}.Primer_Brand__IconButton-module__IconButton--rounded___D7bgG.Primer_Brand__IconButton-module__IconButton--rounded___D7bgG{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true]){color:var(--brand-IconButton-danger-fgColor-rest);background-color:var(--brand-IconButton-danger-bgColor-rest);border-color:var(--brand-IconButton-danger-borderColor-rest)}.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true]):not([aria-expanded=true]):hover{color:var(--brand-IconButton-danger-fgColor-hover);background-color:var(--brand-IconButton-danger-bgColor-hover);border-color:var(--brand-IconButton-danger-borderColor-hover)}.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true]):active,.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN.Primer_Brand__IconButton-module__IconButton--variant-danger___nppfN:not([disabled]):not([aria-disabled=true])[aria-expanded=true]{color:var(--brand-IconButton-danger-fgColor-active);background-color:var(--brand-IconButton-danger-bgColor-active);border-color:var(--brand-IconButton-danger-borderColor-active)}.Primer_Brand__IconButton-module__IconButton--variant-invisible___N5QCb.Primer_Brand__IconButton-module__IconButton--variant-invisible___N5QCb:where(:not(:hover):not(:active):not([aria-expanded=true])){background-color:var(--brand-IconButton-invisible-bgColor-rest);border-color:var(--brand-IconButton-invisible-borderColor-rest);-webkit-backdrop-filter:none;backdrop-filter:none}.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f,.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f:hover,.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f:active{color:var(--brand-IconButton-inactive-fgColor);cursor:auto;background-color:var(--brand-IconButton-inactive-bgColor);border-color:var(--brand-IconButton-inactive-borderColor);-webkit-backdrop-filter:none;backdrop-filter:none}.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f .Primer_Brand__IconButton-module__IconButton__icon___krMSy{color:inherit}.Primer_Brand__IconButton-module__IconButton--small___vIOsv .Primer_Brand__IconButton-module__IconButton__icon___krMSy{width:var(--brand-IconButton-icon-size-small);height:var(--brand-IconButton-icon-size-small)}.Primer_Brand__IconButton-module__IconButton--medium___o7XG8 .Primer_Brand__IconButton-module__IconButton__icon___krMSy{width:var(--brand-IconButton-icon-size-medium);height:var(--brand-IconButton-icon-size-medium)}.Primer_Brand__IconButton-module__IconButton--large___XSwOm .Primer_Brand__IconButton-module__IconButton__icon___krMSy{width:var(--brand-IconButton-icon-size-large);height:var(--brand-IconButton-icon-size-large)}.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{box-sizing:border-box;width:var(--brand-IconButton-icon-size-medium);height:var(--brand-IconButton-icon-size-medium);border:var(--brand-borderWidth-thin) solid currentcolor;animation:Primer_Brand__IconButton-module__IconButton-spin___Xg2de var(--brand-IconButton-loadingIndicator-animationDuration-default) linear infinite;border-inline-end-color:#0000;border-radius:50%;display:block}.Primer_Brand__IconButton-module__IconButton--small___vIOsv .Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{width:var(--brand-IconButton-icon-size-small);height:var(--brand-IconButton-icon-size-small)}.Primer_Brand__IconButton-module__IconButton--large___XSwOm .Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{width:var(--brand-IconButton-icon-size-large);height:var(--brand-IconButton-icon-size-large)}.Primer_Brand__IconButton-module__IconButton__loadingAnnouncement___EDict{width:var(--base-size-1);height:var(--base-size-1);margin:calc(var(--base-size-1) * -1);clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;padding:0;position:absolute;overflow:hidden}@keyframes Primer_Brand__IconButton-module__IconButton-spin___Xg2de{to{transform:rotate(360deg)}}@media (forced-colors:active){.Primer_Brand__IconButton-module__IconButton--inactive___rqx6f{color:graytext;border-color:graytext}.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{border-color:buttontext;border-inline-end-color:#0000}}@media (prefers-reduced-motion:reduce){.Primer_Brand__IconButton-module__IconButton__loadingIndicator___x8pth{animation-duration:var(--brand-IconButton-loadingIndicator-animationDuration-reducedMotion)}}:root,[data-color-mode=light]{--brand-ActionMenu-color-splitButton-divider-default:var(--brand-color-border-muted);--brand-ActionMenu-color-splitButton-divider-primary:var(--base-color-scale-green-7);--brand-ActionMenu-color-item-hover:var(--base-color-scale-gray-1);--brand-ActionMenu-color-scrollbar-thumb-bg:var(--base-color-scale-gray-0)}[data-color-mode=dark]{--brand-ActionMenu-color-splitButton-divider-default:var(--brand-color-border-muted);--brand-ActionMenu-color-splitButton-divider-primary:var(--brand-color-border-muted);--brand-ActionMenu-color-item-hover:var(--base-color-scale-gray-6);--brand-ActionMenu-color-scrollbar-thumb-bg:var(--base-color-scale-gray-3)}.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5{--focus-outline-width:3px;position:relative}.Primer_Brand__ActionMenu-module__ActionMenu--disabled___Ic5nl{cursor:not-allowed}.Primer_Brand__ActionMenu-module__ActionMenu__button___gqNoG{height:auto}.Primer_Brand__ActionMenu-module__ActionMenu__button--default___mloG_{--brand-borderRadius-medium:var(--brand-borderRadius-full)}.Primer_Brand__ActionMenu-module__ActionMenu__button--small___VpvNg{padding:calc(var(--base-size-4) / 2) var(--base-size-12)}.Primer_Brand__ActionMenu-module__ActionMenu__button--medium___xG3FK{padding:calc(var(--base-size-8) + 2px) var(--base-size-28)}.Primer_Brand__ActionMenu-module__ActionMenu__button___gqNoG>span:first-of-type{max-width:200px;overflow:hidden}.Primer_Brand__ActionMenu-module__ActionMenu__button--split-button___zE_P6{border-radius:var(--brand-borderRadius-medium);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);background-color:var(--brand-color-canvas-default);padding:0;display:inline-flex}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH,.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:hover{z-index:1;border-top-right-radius:0;border-bottom-right-radius:0;position:relative}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:before,.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:hover:before{content:"";top:calc(var(--base-size-2) / -2);right:calc(var(--base-size-2) * -1);width:var(--brand-borderWidth-thin);height:calc(100% + var(--base-size-2));background-color:var(--brand-ActionMenu-color-splitButton-divider-default);position:absolute}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--primary___GexBE.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:before{background-color:var(--brand-ActionMenu-color-splitButton-divider-primary)}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--subtle___O9TkT.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:before{top:calc(var(--base-size-2) * -1);height:calc(100% + var(--base-size-4))}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--subtle___O9TkT.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-primary___pruFH:active:before{width:0}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--medium___cpKu6.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J,.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-menu___rbice{padding:var(--brand-control-medium-paddingBlock-condensed) var(--brand-control-medium-paddingInline-normal)}.Primer_Brand__ActionMenu-module__ActionMenu__inner-button-dropdown-icon___Pd6ae{vertical-align:middle!important}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button___kDo2J.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--split-button-menu___rbice{z-index:0;border-top-left-radius:0;border-bottom-left-radius:0;position:relative}.Primer_Brand__ActionMenu-module__ActionMenu__innerButton--disabled___ZjXdS{cursor:not-allowed;pointer-events:none}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP{z-index:100;padding:var(--base-size-12);visibility:hidden;background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-radius:var(--brand-borderRadius-large);min-width:min-content;max-height:460px;position:absolute;overflow-y:auto;box-shadow:0 100px 80px #00000003,0 41px 33px #00000005,0 22px 17px #00000005,0 12px 10px #00000008,0 6px 5px #0000000a,0 2px 2px #00000012}.Primer_Brand__ActionMenu-module__ActionMenu__menu--small___EiV1K{padding:var(--base-size-8)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--medium___X8Sgj{padding:var(--base-size-12)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--visible___dIcw5{visibility:visible}.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-bottom___dEYrx{animation:.189s var(--brand-animation-easing-glide) 0s 1 normal none running Primer_Brand__ActionMenu-module__overlay-appear-outside-bottom___P9_uK}.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-top___WhOjX{animation:.189s var(--brand-animation-easing-glide) 0s 1 normal none running Primer_Brand__ActionMenu-module__overlay-appear-outside-top___hI7o9}@keyframes Primer_Brand__ActionMenu-module__overlay-appear-outside-bottom___P9_uK{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes Primer_Brand__ActionMenu-module__overlay-appear-outside-top___hI7o9{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.Primer_Brand__ActionMenu-module__ActionMenu__menu--medium___X8Sgj.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-bottom___dEYrx{margin-block-start:var(--base-size-8)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--medium___X8Sgj.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-top___WhOjX{margin-block-start:calc(var(--base-size-8) * -1)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--small___EiV1K.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-bottom___dEYrx{margin-block-start:var(--base-size-4)}.Primer_Brand__ActionMenu-module__ActionMenu__menu--small___EiV1K.Primer_Brand__ActionMenu-module__ActionMenu__menu--pos-outside-top___WhOjX{margin-block-start:calc(var(--base-size-4) * -1)}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP::-webkit-scrollbar{width:var(--base-size-12)}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP::-webkit-scrollbar-track{border-left:1px solid var(--brand-color-border-muted);border-top-right-radius:var(--brand-borderRadius-large);border-bottom-right-radius:var(--brand-borderRadius-large)}.Primer_Brand__ActionMenu-module__ActionMenu__menu____B9HP::-webkit-scrollbar-thumb{border-radius:var(--brand-borderRadius-medium);border:1px solid var(--brand-color-border-default);background-color:var(--brand-ActionMenu-color-scrollbar-thumb-bg)}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr{border-radius:var(--brand-borderRadius-medium);flex:1 0 auto;grid-template-columns:min-content 1fr;grid-template-areas:"leadingVisual text";align-items:center;list-style:none;display:grid}.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl{grid-template-columns:subgrid;grid-template-rows:subgrid;grid-gap:var(--base-size-8);align-items:center;gap:var(--base-size-8);color:var(--brand-color-text-default);grid-area:1/1/-1/-1;-webkit-text-decoration:none;text-decoration:none;display:grid}.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor--disabled___SrwBA{pointer-events:none;cursor:not-allowed}.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl:focus-visible{box-shadow:none;outline:none}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:has(.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl:focus-visible){box-shadow:0 0 0 var(--focus-outline-width) var(--brand-color-focus);outline:none;transition:none}.Primer_Brand__ActionMenu-module__ActionMenu__item--medium___YjquB{padding:var(--brand-control-medium-paddingBlock-condensed) var(--brand-control-medium-paddingInline-normal);min-height:var(--brand-control-medium-size)}.Primer_Brand__ActionMenu-module__ActionMenu__item--medium___YjquB:has(.Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl){padding:0}.Primer_Brand__ActionMenu-module__ActionMenu__item--medium___YjquB .Primer_Brand__ActionMenu-module__ActionMenu__item-anchor___P15pl{padding:var(--brand-control-medium-paddingBlock-condensed) var(--brand-control-medium-paddingInline-normal)}.Primer_Brand__ActionMenu-module__ActionMenu__item--small___Y17Or{padding:var(--base-size-8) var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr[aria-disabled=true]{cursor:not-allowed}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:hover:not(.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr[aria-disabled=true]){cursor:pointer;background-color:var(--brand-ActionMenu-color-item-hover)}.Primer_Brand__ActionMenu-module__ActionMenu__item--selection-type-single___ZdivU{padding-right:var(--base-size-48)}.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:focus-visible{box-shadow:0 0 0 var(--focus-outline-width) var(--brand-color-focus);outline:none;transition:none}.Primer_Brand__ActionMenu-module__ActionMenu__item-leadingVisual___UWjE1{min-width:var(--base-size-16);margin-right:var(--brand-control-medium-gap);color:var(--brand-color-text-default);pointer-events:none;grid-area:leadingVisual;display:flex}.Primer_Brand__ActionMenu-module__ActionMenu__item-text___K_1vl{grid-area:text;width:max-content;display:grid}.Primer_Brand__ActionMenu-module__ActionMenu__item-text___K_1vl>span{line-height:var(--brand-control-medium-lineBoxHeight)}.Primer_Brand__ActionMenu-module__ActionMenu__item-icon___JyMwz{fill:var(--brand-color-text-default)}.Primer_Brand__ActionMenu-module__ActionMenu__item-content--disabled___WrxPY{color:var(--base-color-scale-gray-3)}.Primer_Brand__ActionMenu-module__ActionMenu__item-icon--disabled___Ebefz{fill:var(--base-color-scale-gray-3)}@media (forced-colors:active){.Primer_Brand__ActionMenu-module__ActionMenu__item___GxmDr:focus-visible{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}@media (prefers-reduced-motion:reduce){.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5,.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5:before,.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5:after,.Primer_Brand__ActionMenu-module__ActionMenu___xAoB5 *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__ButtonGroup-module__ButtonGroup___QQSsj{gap:var(--base-size-8) var(--base-size-16);flex-flow:wrap;display:inline-flex}.Primer_Brand__ButtonGroup-module__ButtonGroup___QQSsj>*{flex-grow:1}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t{flex-wrap:nowrap;gap:0}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t .Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu{flex-grow:0;display:flex;position:relative}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t .Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:not(:first-child){margin-inline-start:calc(var(--brand-borderWidth-thin) * -1)}.Primer_Brand__ButtonGroup-module__ButtonGroup--variant-joined___Fxe7t .Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:focus-within{z-index:1}.Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX.Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX{border-radius:0}.Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:first-child .Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX{border-start-start-radius:var(--brand-borderRadius-medium);border-end-start-radius:var(--brand-borderRadius-medium)}.Primer_Brand__ButtonGroup-module__ButtonGroup__item___cqbJu:last-child .Primer_Brand__ButtonGroup-module__ButtonGroup__joinedButton___W6KlX{border-start-end-radius:var(--brand-borderRadius-medium);border-end-end-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Image-module__Image__container___acBJi{display:inline-block}.Primer_Brand__Image-module__Image___FgVuK{-o-object-fit:cover;object-fit:cover;display:inline-block}.Primer_Brand__Image-module__Image--aspect-ratio-custom___gXFxx{aspect-ratio:var(--brand-image-aspectRatio)}.Primer_Brand__Image-module__Image--aspect-ratio-1-1___gDnTF{aspect-ratio:1}.Primer_Brand__Image-module__Image--aspect-ratio-16-9___bscHI{aspect-ratio:16/9}.Primer_Brand__Image-module__Image--aspect-ratio-16-10___dkGM6{aspect-ratio:16/10}.Primer_Brand__Image-module__Image--aspect-ratio-4-3___Tt_MI{aspect-ratio:4/3}.Primer_Brand__Image-module__Image--borderRadius-small___p94p1{border-radius:var(--brand-borderRadius-small);display:block}.Primer_Brand__Image-module__Image--borderRadius-medium___VsUEt{border-radius:var(--brand-borderRadius-medium);display:block}.Primer_Brand__Image-module__Image--borderRadius-large___ivnDN{border-radius:var(--brand-borderRadius-large);display:block}.Primer_Brand__Image-module__Image--borderRadius-xlarge___X8Rkm{border-radius:var(--brand-borderRadius-xlarge);display:block}.Primer_Brand__Image-module__Image--borderRadius-full___AlwaQ{border-radius:var(--brand-borderRadius-full);display:block}:root{--brand-Hero-regular-padding:var(--base-size-128) 0;--brand-Hero-narrow-padding:var(--base-size-96) 0}.Primer_Brand__Link-module__Link___lvKjM{--visual-width:var(--external-icon-size,var(--arrow-size,0px));--gap:0px;-moz-column-gap:0px;-moz-column-gap:var(--gap);column-gap:0;column-gap:var(--gap);cursor:pointer;justify-content:center;align-items:center;-webkit-text-decoration:none;text-decoration:none;display:inline-flex;position:relative}.Primer_Brand__Link-module__Link--arrow-start___AT1uu,.Primer_Brand__Link-module__Link--arrow-end___l0EPS{--gap:var(--base-size-4);--arrow-size:var(--base-size-16);position:relative;top:.05em}.Primer_Brand__Link-module__Link--arrow-start___AT1uu.Primer_Brand__Link-module__Link--large___cXMt5,.Primer_Brand__Link-module__Link--arrow-end___l0EPS.Primer_Brand__Link-module__Link--large___cXMt5{--arrow-size:var(--base-size-20)}.Primer_Brand__Link-module__Link--is-external___AthYf{--gap:var(--base-size-4);--external-icon-size:var(--base-size-16)}.Primer_Brand__Link-module__Link--is-external___AthYf.Primer_Brand__Link-module__Link--large___cXMt5{--external-icon-size:var(--base-size-20)}.Primer_Brand__Link-module__Link___lvKjM:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Link-module__Link___lvKjM:after{width:calc(100% - var(--gap) - var(--visual-width));pointer-events:none;content:"";border:var(--brand-borderWidth-thin) solid currentColor;transform-origin:0 0;position:absolute;bottom:-.15em;left:0;transform:scaleX(0)}@media screen and (prefers-reduced-motion:no-preference){.Primer_Brand__Link-module__Link___lvKjM:after{transition:transform var(--brand-animation-duration-fast) ease}}.Primer_Brand__Link-module__Link___lvKjM:active:after,.Primer_Brand__Link-module__Link___lvKjM:hover:after{transform:scaleX(1)}.Primer_Brand__Link-module__Link___lvKjM:focus:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__Link-module__Link--default___UKAcZ,.Primer_Brand__Link-module__Link--default___UKAcZ span{color:var(--brand-Link-color-default)}.Primer_Brand__Link-module__Link--accent___FWEDd,.Primer_Brand__Link-module__Link--accent___FWEDd span{color:var(--brand-Link-color-accent)}.Primer_Brand__Link-module__Link--label___j8etE{font-weight:var(--base-text-weight-medium);color:inherit!important}.Primer_Brand__Link-module__Link--large___cXMt5 .Primer_Brand__Link-module__Link--label___j8etE{font-size:var(--base-size-20)}.Primer_Brand__Link-module__Link--large___cXMt5 .Primer_Brand__Link-module__Link-arrow___HBMJ9{width:var(--arrow-size);height:var(--arrow-size)}.Primer_Brand__Link-module__Link--arrow-start___AT1uu:after{transform-origin:right 0;left:auto;right:0}@media (prefers-reduced-motion:reduce){.Primer_Brand__Link-module__Link___lvKjM,.Primer_Brand__Link-module__Link___lvKjM:before,.Primer_Brand__Link-module__Link___lvKjM:after,.Primer_Brand__Link-module__Link___lvKjM *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-Link-color-default:var(--brand-color-text-default);--brand-Link-color-accent:var(--brand-color-text-link-rest)}:root{--brand-RiverBreakout-variant-gridline-spacing-contentGap:var(--base-size-16);--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-20);--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd:var(--base-size-40);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-36);--brand-RiverBreakout-spacing-inner:var(--base-size-40);--brand-RiverAccordion-variant-gridline-spacing-contentGap:var(--base-size-32);--brand-RiverAccordion-variant-gridline-spacing-outerInline:var(--base-size-20);--brand-RiverAccordion-variant-gridline-spacing-outerBlock:var(--base-size-40);--brand-River-variant-gridline-spacing-outerInline:var(--base-size-20);--brand-River-variant-gridline-spacing-outerBlock:var(--base-size-40);--brand-River-variant-gridline-visual-padding:var(--base-size-32);--brand-River-spacing-outerBlock:var(--base-size-36);--brand-River-spacing-innerY:var(--base-size-24);--brand-River-spacing-inner:var(--base-size-40)}@media (width>=768px){:root{--brand-RiverBreakout-variant-gridline-spacing-contentGap:var(--base-size-20);--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-36);--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd:var(--base-size-48);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-40);--brand-RiverBreakout-spacing-inner:var(--base-size-48);--brand-RiverAccordion-variant-gridline-spacing-outerInline:var(--base-size-36);--brand-RiverAccordion-variant-gridline-spacing-outerBlock:var(--base-size-36);--brand-River-spacing-innerY:var(--base-size-24)}}@media (width>=1012px){:root{--brand-River-variant-gridline-visual-padding:var(--base-size-64)}}@media (width>=1280px){:root{--brand-RiverBreakout-variant-gridline-spacing-contentGap:var(--base-size-24);--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-64);--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd:var(--base-size-80);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-64);--brand-RiverBreakout-spacing-inner:var(--base-size-64);--brand-RiverAccordion-variant-gridline-spacing-contentGap:var(--base-size-64);--brand-RiverAccordion-variant-gridline-spacing-outerInline:var(--base-size-64);--brand-RiverAccordion-variant-gridline-spacing-outerBlock:var(--base-size-64);--brand-River-variant-gridline-spacing-outerInline:var(--base-size-64);--brand-River-variant-gridline-spacing-outerBlock:var(--base-size-64);--brand-River-spacing-outerBlock:var(--base-size-48);--brand-River-spacing-innerY:var(--base-size-32);--brand-River-spacing-inner:var(--base-size-24)}}.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE{grid-gap:0;grid-template:"visual""accordion"/1fr;gap:0;display:grid;position:relative}@media screen and (width>=63.25rem){.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE{--gap-width:var(--brand-Grid-spacing-column-gap);--column-and-gap-width:calc((100% + var(--gap-width)) / 12);--4-grid-columns:calc(4 * var(--column-and-gap-width));--7-grid-columns-minus-last-gap:calc((7 * var(--column-and-gap-width)) - var(--gap-width));gap:var(--column-and-gap-width);grid-template-rows:auto}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-start___RuTNC{grid-template-columns:var(--4-grid-columns) var(--7-grid-columns-minus-last-gap);grid-template-areas:"accordion visual"}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-end___cYDE6{grid-template-columns:var(--7-grid-columns-minus-last-gap) var(--4-grid-columns);grid-template-areas:"visual accordion"}}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{padding-inline:var(--brand-RiverAccordion-variant-gridline-spacing-outerInline);padding-block:var(--brand-RiverAccordion-variant-gridline-spacing-outerBlock);position:relative}@media screen and (width>=63.25rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{--gap-width:var(--brand-RiverAccordion-variant-gridline-spacing-contentGap);--half-column:calc(50% - var(--gap-width) / 2);gap:var(--gap-width);align-items:center}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet.Primer_Brand__RiverAccordion-module__RiverAccordion__align-start___RuTNC{grid-template-columns:var(--half-column) var(--half-column);grid-template-areas:"accordion visual"}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet.Primer_Brand__RiverAccordion-module__RiverAccordion__align-end___cYDE6{grid-template-columns:var(--half-column) var(--half-column);grid-template-areas:"visual accordion"}}@media (width>=80rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP{margin-inline:calc(-1 * var(--brand-RiverAccordion-variant-gridline-spacing-outerInline));margin-block-start:calc(-1 * var(--brand-RiverAccordion-variant-gridline-spacing-outerBlock))}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE{max-width:618px;margin-inline:auto}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf{border-radius:0}.Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{grid-area:accordion}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP{grid-area:visual}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf{border-radius:var(--base-size-6);grid-template-columns:subgrid;grid-template-rows:subgrid;width:100%;display:grid;overflow:hidden}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw{opacity:0;width:100%;height:100%;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), scale var(--brand-animation-duration-default) var(--brand-animation-easing-default);grid-area:1/1;align-items:center;display:flex;scale:1.05}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw>*{border-radius:var(--base-size-6);-o-object-fit:contain;object-fit:contain;width:100%;height:auto;display:block;overflow:hidden}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw img,.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw picture,.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw video{border-radius:var(--base-size-6);-o-object-fit:contain;object-fit:contain;width:100%;height:auto;display:block}.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw>* img,.Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw>* video{border-radius:var(--base-size-6);-o-object-fit:cover;object-fit:cover;width:100%;height:auto;display:block}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp{padding:var(--base-size-32);background:var(--brand-RiverAccordion-visual-background,var(--brand-color-canvas-subtle));justify-content:center;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp>*{border-radius:var(--base-size-6);justify-content:center;align-items:center;max-width:100%;height:auto;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp img,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp picture,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp video{border-radius:var(--base-size-6);max-width:100%;height:auto}@media screen and (width>=63.25rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA{grid-template-columns:1fr 1fr;align-items:stretch;gap:0;padding:0}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{padding:var(--brand-RiverAccordion-variant-gridline-spacing-outerBlock) var(--brand-RiverAccordion-variant-gridline-spacing-outerInline);flex-direction:column;justify-content:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-start___RuTNC.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{padding-inline-end:var(--brand-RiverAccordion-variant-gridline-spacing-contentGap)}.Primer_Brand__RiverAccordion-module__RiverAccordion__align-end___cYDE6.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS{padding-inline-start:var(--brand-RiverAccordion-variant-gridline-spacing-contentGap)}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP{margin:0}.Primer_Brand__RiverAccordion-module__RiverAccordion--active-item-has-background___xYbsA .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf{height:100%}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp{padding:var(--base-size-64);justify-content:center;align-items:center}.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp>*,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp img,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp picture,.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsWrapper___H5Ixf>.Primer_Brand__RiverAccordion-module__RiverAccordion__visual--has-background___kuInp video{border-radius:var(--base-size-6)}}:is(.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:first-child) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:first-child,.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(2)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(2),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(3)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(3),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(4)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(4),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(5)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(5),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(6)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(6),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(7)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(7),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(8)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(8),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(9)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(9),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq:nth-child(10)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:nth-child(10),.Primer_Brand__RiverAccordion-module__RiverAccordion___aCPIE:not(:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq)) .Primer_Brand__RiverAccordion-module__RiverAccordion__visualsContainer___evCWP .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw:first-child){opacity:1;z-index:1;scale:1}.Primer_Brand__RiverAccordion-module__RiverAccordion__accordionContainer___fGxlS .Primer_Brand__RiverAccordion-module__RiverAccordion__visual___GxbPw{clip:rect(0, 0, 0, 0);word-wrap:normal;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH{border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-start:var(--base-size-32);position:relative}@media screen and (width<=63.24rem){.Primer_Brand__RiverAccordion-module__RiverAccordion--variant-gridline___Xsbet .Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:last-child{border-bottom:none}}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:not(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq) .Primer_Brand__RiverAccordion-module__RiverAccordion__heading___STSM7{color:var(--brand-color-text-muted)}.Primer_Brand__RiverAccordion-module__RiverAccordion__trigger___x_yLq{color:inherit;cursor:pointer;font:inherit;text-align:left;width:100%;padding:0;padding:var(--base-size-4);margin:0;margin:calc(var(--base-size-4) * -1);background:0 0;border:none;justify-content:space-between;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__trigger--has-leading-visual___lyq8k{gap:var(--base-size-20);justify-content:flex-start}.Primer_Brand__RiverAccordion-module__RiverAccordion__leadingVisual___OseYz{height:var(--base-size-20);width:var(--base-size-20);flex-shrink:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__leadingVisual___OseYz>*{width:100%;height:100%}.Primer_Brand__RiverAccordion-module__RiverAccordion__headingText___tOQEC{flex:1;min-width:0}.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq .Primer_Brand__RiverAccordion-module__RiverAccordion__trigger___x_yLq{cursor:auto;cursor:initial}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:not(.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq) .Primer_Brand__RiverAccordion-module__RiverAccordion__trigger___x_yLq:after{content:"";width:100%;height:100%;display:block;position:absolute}.Primer_Brand__RiverAccordion-module__RiverAccordion__panel___GkOCl{transition:grid-template-rows var(--brand-animation-duration-default) var(--brand-animation-easing-default), margin-block-start var(--brand-animation-duration-default) var(--brand-animation-easing-default), padding-block-end var(--brand-animation-duration-default) var(--brand-animation-easing-default);grid-template-rows:0fr;margin-block-start:var(--base-size-32);display:grid;overflow-y:clip}.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq .Primer_Brand__RiverAccordion-module__RiverAccordion__panel___GkOCl{grid-template-rows:1fr;margin-block-start:var(--base-size-12);padding-block-end:var(--base-size-32)}.Primer_Brand__RiverAccordion-module__RiverAccordion__content___ECkev{align-items:flex-start;gap:var(--base-size-20);flex-direction:column;min-height:0;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__item___SQRnH:has(.Primer_Brand__RiverAccordion-module__RiverAccordion__leadingVisual___OseYz) .Primer_Brand__RiverAccordion-module__RiverAccordion__content___ECkev{padding-inline-start:calc(var(--base-size-20) + var(--base-size-20))}.Primer_Brand__RiverAccordion-module__RiverAccordion__icon___gl6pH{color:var(--brand-color-text-muted);flex-shrink:0;align-items:center;display:flex}.Primer_Brand__RiverAccordion-module__RiverAccordion__item--open___nnixq .Primer_Brand__RiverAccordion-module__RiverAccordion__icon___gl6pH{color:var(--brand-color-text-default)}.Primer_Brand__shared-module__gridline___Vmwmu{position:relative}.Primer_Brand__shared-module__gridline___Vmwmu:before,.Primer_Brand__shared-module__gridline___Vmwmu:after{content:"";border-top:var(--brand-borderWidth-thin) solid;-o-border-image:linear-gradient(var(--brand-color-border-muted), var(--brand-color-border-muted)) 1;border-image:linear-gradient(var(--brand-color-border-muted), var(--brand-color-border-muted)) 1;z-index:1;pointer-events:none;border-image-outset:0 100vw;height:0;position:absolute;left:0;right:0}.Primer_Brand__shared-module__gridline___Vmwmu:before{top:0}.Primer_Brand__shared-module__gridline___Vmwmu:after{bottom:0}:root,[data-color-mode=light]{--brand-Label-color-default:var(--brand-color-text-default);--brand-Label-color-blue:var(--base-color-scale-blue-5);--brand-Label-color-blue-purple-start:var(--base-color-scale-blue-5);--brand-Label-color-blue-purple-end:var(--base-color-scale-purple-5);--brand-Label-color-coral:var(--base-color-scale-coral-5);--brand-Label-color-green:var(--base-color-scale-green-6);--brand-Label-color-green-blue-start:var(--base-color-scale-green-6);--brand-Label-color-green-blue-end:var(--base-color-scale-blue-5);--brand-Label-color-green-blue-purple-1:#000aff;--brand-Label-color-green-blue-purple-2:#096bde;--brand-Label-color-green-blue-purple-3:var(--base-color-scale-green-6);--brand-Label-color-green-blue-purple-4:#8250df;--brand-Label-color-gray:var(--base-color-scale-gray-5);--brand-Label-color-indigo:var(--base-color-scale-indigo-5);--brand-Label-color-lemon:var(--base-color-scale-lemon-5);--brand-Label-color-lime:var(--base-color-scale-lime-5);--brand-Label-color-orange:var(--base-color-scale-orange-5);--brand-Label-color-pink:var(--base-color-scale-pink-5);--brand-Label-color-pink-blue-start:var(--base-color-scale-pink-5);--brand-Label-color-pink-blue-end:var(--base-color-scale-blue-5);--brand-Label-color-purple:var(--base-color-scale-purple-5);--brand-Label-color-purple-red-start:var(--base-color-scale-purple-5);--brand-Label-color-purple-red-end:var(--base-color-scale-red-5);--brand-Label-color-red:var(--base-color-scale-red-5);--brand-Label-color-red-orange-start:var(--base-color-scale-red-5);--brand-Label-color-red-orange-end:var(--base-color-scale-orange-5);--brand-Label-color-teal:var(--base-color-scale-teal-5);--brand-Label-color-yellow:var(--base-color-scale-yellow-5)}[data-color-mode=dark]{--brand-Label-color-default:var(--brand-color-text-default);--brand-Label-color-blue:var(--base-color-scale-blue-2);--brand-Label-color-blue-purple-start:var(--base-color-scale-blue-2);--brand-Label-color-blue-purple-end:var(--base-color-scale-purple-2);--brand-Label-color-coral:var(--base-color-scale-coral-2);--brand-Label-color-green:var(--base-color-scale-green-2);--brand-Label-color-green-blue-start:var(--base-color-scale-green-2);--brand-Label-color-green-blue-end:var(--base-color-scale-blue-2);--brand-Label-color-green-blue-purple-3:#00ff46;--brand-Label-color-gray:var(--base-color-scale-gray-2);--brand-Label-color-indigo:var(--base-color-scale-indigo-2);--brand-Label-color-lemon:var(--base-color-scale-lemon-2);--brand-Label-color-lime:var(--base-color-scale-lime-2);--brand-Label-color-orange:var(--base-color-scale-orange-2);--brand-Label-color-pink:var(--base-color-scale-pink-2);--brand-Label-color-pink-blue-start:var(--base-color-scale-pink-2);--brand-Label-color-pink-blue-end:var(--base-color-scale-blue-2);--brand-Label-color-purple:var(--base-color-scale-purple-2);--brand-Label-color-purple-red-start:var(--base-color-scale-purple-2);--brand-Label-color-purple-red-end:var(--base-color-scale-red-2);--brand-Label-color-red:var(--base-color-scale-red-2);--brand-Label-color-red-orange-start:var(--base-color-scale-red-2);--brand-Label-color-red-orange-end:var(--base-color-scale-orange-2);--brand-Label-color-teal:var(--base-color-scale-teal-2);--brand-Label-color-yellow:var(--base-color-scale-yellow-2)}.Primer_Brand__Label-module__Label___TW0HL{--brand-Label-gradient-radial:radial-gradient(circle at top left, var(--brand-Label-color-start), var(--brand-Label-color-end));--brand-Label-gradient-conical:conic-gradient(from 90deg at center, var(--brand-Label-color-stop-1) 0deg, var(--brand-Label-color-stop-2) 160deg, var(--brand-Label-color-stop-3) 175deg, var(--brand-Label-color-stop-4) 200deg, var(--brand-Label-color-stop-4) 350deg, var(--brand-Label-color-stop-1) 360deg);--brand-Label-background:var(--brand-Label-gradient-conical,var(--brand-Label-gradient-radial,var(--brand-Label-color,currentColor)));vertical-align:middle;border-radius:var(--brand-borderRadius-xlarge);color:var(--brand-Label-color-start,var(--brand-Label-color,currentColor));text-align:center;background:0 0;justify-content:center;align-items:center;height:min-content;display:inline-flex;position:relative}[data-color-mode=dark] .Primer_Brand__Label-module__Label___TW0HL{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Label-module__Label___TW0HL:before{content:"";padding:var(--brand-borderWidth-thin);border-radius:inherit;background:var(--brand-Label-background);-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask-composite:xor;position:absolute;inset:0;-webkit-mask-composite:xor;mask-composite:exclude}.Primer_Brand__Label-module__Label--size-small___TvoL_{min-height:var(--base-size-20);padding-inline:var(--base-size-8);padding-block:var(--base-size-2)}.Primer_Brand__Label-module__Label--size-small___TvoL_ .Primer_Brand__Label-module__Label__label___bD_B4{font-size:var(--base-size-12)!important}.Primer_Brand__Label-module__Label--size-medium___g4Jkm{min-height:var(--base-size-28);padding-inline:var(--base-size-16);padding-block:var(--base-size-4)}.Primer_Brand__Label-module__Label--size-large___BrKTp{min-height:var(--base-size-32);padding-inline:var(--base-size-16);padding-block:var(--base-size-4)}.Primer_Brand__Label-module__Label--color-default___YCx2l{--brand-Label-color:var(--brand-Label-color-default)}.Primer_Brand__Label-module__Label--color-blue___lZSxf{--brand-Label-color:var(--brand-Label-color-blue)}.Primer_Brand__Label-module__Label--color-blue-purple___ER3VP{--brand-Label-color-start:var(--brand-Label-color-blue-purple-start);--brand-Label-color-end:var(--brand-Label-color-blue-purple-end)}.Primer_Brand__Label-module__Label--color-coral___V0Yif{--brand-Label-color:var(--brand-Label-color-coral)}.Primer_Brand__Label-module__Label--color-green___SoiE4{--brand-Label-color:var(--brand-Label-color-green)}.Primer_Brand__Label-module__Label--color-green-blue___R2mSi{--brand-Label-color-start:var(--brand-Label-color-green-blue-start);--brand-Label-color-end:var(--brand-Label-color-green-blue-end)}.Primer_Brand__Label-module__Label--color-gray___MCa_k{--brand-Label-color:var(--brand-Label-color-gray)}.Primer_Brand__Label-module__Label--color-indigo___VEHOi{--brand-Label-color:var(--brand-Label-color-indigo)}.Primer_Brand__Label-module__Label--color-lemon___xvb0x{--brand-Label-color:var(--brand-Label-color-lemon)}.Primer_Brand__Label-module__Label--color-lime___rORM1{--brand-Label-color:var(--brand-Label-color-lime)}.Primer_Brand__Label-module__Label--color-orange___PMqMi{--brand-Label-color:var(--brand-Label-color-orange)}.Primer_Brand__Label-module__Label--color-pink___kHEv5{--brand-Label-color:var(--brand-Label-color-pink)}.Primer_Brand__Label-module__Label--color-pink-blue___y5skb{--brand-Label-color-start:var(--brand-Label-color-pink-blue-start);--brand-Label-color-end:var(--brand-Label-color-pink-blue-end)}.Primer_Brand__Label-module__Label--color-green-blue-purple___UKGU_{--brand-Label-color-stop-1:var(--brand-Label-color-green-blue-purple-1);--brand-Label-color-stop-2:var(--brand-Label-color-green-blue-purple-2);--brand-Label-color-stop-3:var(--brand-Label-color-green-blue-purple-3);--brand-Label-color-stop-4:var(--brand-Label-color-green-blue-purple-4)}.Primer_Brand__Label-module__Label--color-purple___ZHLtp{--brand-Label-color:var(--brand-Label-color-purple)}.Primer_Brand__Label-module__Label--color-purple-red___MsWGq{--brand-Label-color-start:var(--brand-Label-color-purple-red-start);--brand-Label-color-end:var(--brand-Label-color-purple-red-end)}.Primer_Brand__Label-module__Label--color-red___GYMDt{--brand-Label-color:var(--brand-Label-color-red)}.Primer_Brand__Label-module__Label--color-red-orange___FVyXX{--brand-Label-color-start:var(--brand-Label-color-red-orange-start);--brand-Label-color-end:var(--brand-Label-color-red-orange-end)}.Primer_Brand__Label-module__Label--color-teal___VOUIS{--brand-Label-color:var(--brand-Label-color-teal)}.Primer_Brand__Label-module__Label--color-yellow___S2Zu2{--brand-Label-color:var(--brand-Label-color-yellow)}.Primer_Brand__Label-module__Label__text____nAxj:not(.Primer_Brand__Label-module__Label--gradient___smCNu .Primer_Brand__Label-module__Label__text____nAxj){background:var(--brand-Label-background);-webkit-text-fill-color:transparent;-webkit-box-decoration-break:clone;box-decoration-break:clone;-webkit-background-clip:text;background-clip:text}.Primer_Brand__Label-module__Label__text____nAxj{line-height:var(--base-size-16)}.Primer_Brand__Label-module__Label__icon-visual___lD1Qa{height:var(--base-size-16);align-self:center;width:auto;display:flex}.Primer_Brand__Label-module__Label__leading-visual___a1rnF{margin-right:var(--base-size-8);display:flex}.Primer_Brand__Label-module__Label__label___bD_B4{font-weight:var(--base-text-weight-medium);line-height:inherit}@media (forced-colors:active){.Primer_Brand__Label-module__Label___TW0HL{outline:var(--brand-borderWidth-thin) solid transparent}}:root{--brand-River-visual-shadow:0px 100px 80px #00000004, 0px 41.7776px 33.4221px #00000006, 0px 22.3363px 17.869px #00000007, 0px 12.5216px 10.0172px #00000009, 0px 6.6501px 5.32008px #0000000b, 0px 2.76726px 2.21381px #00000012;--brand-River-label-margin:var(--base-size-16);--brand-River-heading-margin:var(--base-size-16)}:root,[data-color-mode=light]{--brand-InlineCode-color-fg-default:var(--brand-color-text-muted);--brand-InlineCode-color-fg-heading:var(--brand-color-text-default);--brand-InlineCode-bgColor:var(--base-color-scale-gray-1)}[data-color-mode=dark]{--brand-InlineCode-color-fg-default:var(--brand-color-text-muted);--brand-InlineCode-color-fg-heading:var(--brand-color-text-default);--brand-InlineCode-bgColor:var(--base-color-scale-gray-7)}.Primer_Brand__river-shared-module__River___eSXvR{grid-gap:var(--brand-River-spacing-inner);gap:var(--brand-River-spacing-inner);padding-inline:var(--brand-River-spacing-outerInline);padding-block:var(--brand-River-spacing-outerBlock);grid-auto-rows:min-content;display:grid;container-type:inline-size}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{padding-inline:var(--brand-River-variant-gridline-spacing-outerInline);padding-block:var(--brand-River-variant-gridline-spacing-outerBlock);gap:var(--base-size-32);position:relative}@media screen and (width>=48rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{gap:var(--base-size-28)}}@media screen and (width>=80rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__river-shared-module__River--align-center___VxJ3H{text-align:center}.Primer_Brand__river-shared-module__River__content___p4EdY{order:2}.Primer_Brand__river-shared-module__River__visual___kjFE2 img,.Primer_Brand__river-shared-module__River__visual___kjFE2 picture{display:block}.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL img,.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL picture,.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL video{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx{border-radius:var(--brand-borderRadius-large);overflow:hidden}.Primer_Brand__river-shared-module__River__visual--has-shadow___PyzIW{box-shadow:var(--brand-River-visual-shadow)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{background-color:var(--brand-color-canvas-subtle);padding:var(--brand-River-variant-gridline-visual-padding);margin-inline:calc(-1 * var(--brand-River-variant-gridline-spacing-outerInline));border-radius:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S img,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S picture,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S video{border-radius:var(--brand-borderRadius-large);width:auto;max-width:100%;height:auto}@media screen and (width<=47.99rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{justify-content:flex-end;align-items:flex-end;padding-block-end:0;padding-inline-end:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S img,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S picture,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S video{border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:0}}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__river-shared-module__River___eSXvR{width:100%;max-width:618px;margin-inline:auto}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{align-items:flex-end;padding-block-end:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S img,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S picture,.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S video{border-end-end-radius:0;border-end-start-radius:0}}.Primer_Brand__river-shared-module__River__heading___tl6zS{margin-bottom:var(--brand-River-heading-margin)}.Primer_Brand__river-shared-module__River__call-to-action___yeIFh{margin-top:var(--base-size-24)}.Primer_Brand__river-shared-module__River__text___TQQhU strong,.Primer_Brand__river-shared-module__River__text___TQQhU b{font-weight:var(--base-text-weight-normal);color:var(--brand-color-text-default)}.Primer_Brand__river-shared-module__River__heading___tl6zS code,.Primer_Brand__river-shared-module__River__text___TQQhU code{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);white-space:normal;word-wrap:anywhere;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:1.6}.Primer_Brand__river-shared-module__River__leadingComponent___RBKiv img,.Primer_Brand__river-shared-module__River__leadingComponent___RBKiv picture,.Primer_Brand__river-shared-module__River__trailingComponent___bjdxv img,.Primer_Brand__river-shared-module__River__trailingComponent___bjdxv picture{display:block}.Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{margin-block-start:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-start:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River__label___ztaaN{margin-block-end:var(--brand-River-label-margin)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V .Primer_Brand__river-shared-module__River__visual___kjFE2{order:1}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V .Primer_Brand__river-shared-module__River__content___p4EdY{order:2}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4 .Primer_Brand__river-shared-module__River__content___p4EdY{order:1}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4 .Primer_Brand__river-shared-module__River__visual___kjFE2{order:2}@media screen and (width<=63.24rem){.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-block-start:calc(-1 * var(--brand-River-variant-gridline-spacing-outerBlock))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-block-end:calc(-1 * var(--brand-River-variant-gridline-spacing-outerBlock))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-block-start:calc(-1 * var(--brand-River-variant-gridline-spacing-outerBlock))}}@media screen and (width>=63.25rem){.Primer_Brand__river-shared-module__River___eSXvR{grid-template-rows:initial}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin:0}.Primer_Brand__river-shared-module__River__content___p4EdY{order:initial}.Primer_Brand__river-shared-module__River--50-50___y5_l2{grid-template-columns:[content]1fr[visual]1fr}.Primer_Brand__river-shared-module__River--60-40___NljA1{grid-template-columns:[content]4fr[visual]6fr}.Primer_Brand__river-shared-module__River--align-start___wo12V{grid-template-areas:"content visual"}.Primer_Brand__river-shared-module__River--align-end___aNjz4{grid-template-areas:"visual content"}.Primer_Brand__river-shared-module__River--align-end___aNjz4.Primer_Brand__river-shared-module__River--60-40___NljA1{grid-template-columns:[visual]6fr[content]4fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-inline-start:calc(var(--base-size-80) + var(--base-size-8))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-inline-end:calc(var(--base-size-80) + var(--base-size-8))}.Primer_Brand__river-shared-module__River__content___p4EdY{grid-area:content;align-content:center;display:grid}.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__body-text___aJne5,.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__heading___tl6zS{max-width:400px}.Primer_Brand__river-shared-module__River--align-start___wo12V:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:var(--base-size-128)}.Primer_Brand__river-shared-module__River--align-end___aNjz4:not(.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--base-size-128)}.Primer_Brand__river-shared-module__River__content--align-block-end___xI62E{align-content:end}.Primer_Brand__river-shared-module__River__visual___kjFE2{grid-area:visual}.Primer_Brand__river-shared-module__River--align-center___VxJ3H{grid-auto-rows:min-content;grid-template-columns:initial}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__content___p4EdY,.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual___kjFE2{grid-area:unset;justify-self:center}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__body-text___aJne5{justify-self:center;max-width:600px}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-bottom:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__content___p4EdY{margin-top:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H):has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){gap:0;padding:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H):has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){grid-template-columns:1fr 1fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--60-40___NljA1:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H):has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){grid-template-columns:560fr 676fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4.Primer_Brand__river-shared-module__River--60-40___NljA1:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){grid-template-columns:676fr 560fr}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--base-size-64);padding-inline-end:var(--brand-River-spacing-inner);padding-block:var(--brand-River-variant-gridline-spacing-outerBlock)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2.Primer_Brand__river-shared-module__River--align-start___wo12V:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:calc(var(--base-size-80) + var(--base-size-32))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--60-40___NljA1.Primer_Brand__river-shared-module__River--align-start___wo12V:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:var(--base-size-128)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--brand-River-spacing-inner);padding-inline-end:var(--base-size-64);padding-block:var(--brand-River-variant-gridline-spacing-outerBlock)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2.Primer_Brand__river-shared-module__River--align-end___aNjz4:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:calc(var(--base-size-80) + var(--base-size-32))}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--60-40___NljA1.Primer_Brand__river-shared-module__River--align-end___aNjz4:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--base-size-128)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-start___wo12V:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-end:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-end___aNjz4:not(:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S)) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline-start:var(--brand-River-spacing-inner)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--50-50___y5_l2:not(.Primer_Brand__river-shared-module__River--align-center___VxJ3H) .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{margin-inline:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S){padding:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual--has-background___QG17S{width:100%;margin:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__visual___kjFE2{margin-bottom:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H{gap:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H .Primer_Brand__river-shared-module__River__content___p4EdY{margin-top:0;margin-bottom:var(--base-size-64)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1.Primer_Brand__river-shared-module__River--align-center___VxJ3H:has(.Primer_Brand__river-shared-module__River__visual--has-background___QG17S) .Primer_Brand__river-shared-module__River__content___p4EdY{padding-inline:var(--brand-River-variant-gridline-spacing-outerInline);padding-block-start:var(--brand-River-variant-gridline-spacing-outerBlock)}}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:center;align-items:flex-end;padding-block-end:0;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:flex-start;align-items:flex-end;padding-block-end:0;padding-inline-start:0;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW{padding:var(--brand-River-variant-gridline-visual-padding);border-radius:0;justify-content:flex-end;align-items:flex-end;padding-block-end:0;padding-inline-end:0;display:flex}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb{padding:var(--brand-River-variant-gridline-visual-padding)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK{border-radius:0;padding:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW [data-video-player-container]{border-radius:0;width:auto;max-width:100%;height:auto}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb [data-video-player-container]{border-radius:0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-center___p6KT1 [data-video-player-container]{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end___ErF_R [data-video-player-container]{border-radius:var(--brand-borderRadius-large) var(--brand-borderRadius-large) 0 0}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-start___QmQP6 [data-video-player-container]{border-radius:0;border-start-end-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--position-block-end-inline-end___kmFTW [data-video-player-container]{border-radius:0;border-start-start-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-all___M94vb [data-video-player-container]{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--fill-media___psmFL.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK [data-video-player-container]{-o-object-fit:cover;object-fit:cover;width:100%;max-width:none;height:100%}.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK [data-video-player-container],.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK img:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK picture:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK video:not(.Primer_Brand__river-shared-module__does-not-exist____jjTp),.Primer_Brand__river-shared-module__River--variant-gridline___mq5R1 .Primer_Brand__river-shared-module__River__visual___kjFE2.Primer_Brand__river-shared-module__River__visual--rounded___x1iTx.Primer_Brand__river-shared-module__River__visual--padding-none___th1qK [data-video-player-container]{border-radius:0}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e{gap:var(--brand-RiverBreakout-spacing-inner);flex-direction:column;padding-block-start:var(--brand-River-spacing-outerBlock);padding-block-end:var(--brand-River-spacing-outerBlock);display:flex}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU{max-width:37.5rem;color:var(--brand-color-text-default);font-size:var(--brand-text-size-500);font-weight:var(--brand-heading-weight-500);letter-spacing:var(--brand-heading-letterSpacing-500);line-height:var(--brand-text-lineHeight-500)}.Primer_Brand__river-shared-module__RiverBreakout--muted___k_sJO .Primer_Brand__river-shared-module__River__text___TQQhU{color:var(--brand-color-text-muted)}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU em,.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU b{color:var(--brand-color-text-default);font-style:normal;font-weight:inherit}.Primer_Brand__river-shared-module__RiverBreakout__hiddenHeading___axLfo{clip:rect(1px, 1px, 1px, 1px);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{padding-block-start:var(--base-size-12)}@media screen and (width>=48rem){.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__content___p4EdY{grid-gap:var(--brand-River-spacing-inner);gap:var(--brand-River-spacing-inner);grid-row-gap:var(--brand-River-spacing-innerY);row-gap:var(--brand-River-spacing-innerY);grid-template-columns:5fr 3fr;grid-template-areas:"text trailingComponent""cta trailingComponent";grid-auto-rows:auto 1fr;display:grid}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__text___TQQhU{grid-area:text}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{grid-area:cta;margin-block:0}.Primer_Brand__river-shared-module__RiverBreakout___VNW5e .Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{grid-area:trailingComponent;justify-self:flex-end;margin-block-start:0}}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{padding-inline:var(--brand-RiverBreakout-variant-gridline-spacing-outerInline);gap:0;padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:0;position:relative}@media screen and (width<=63.24rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{width:100%;max-width:38.625rem;margin-inline:auto}}@media screen and (width>=618px){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{border-inline:none}}@media screen and (width>=1300px){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__visual___kjFE2{overflow:hidden}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__visual--rounded___x1iTx{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__content___p4EdY{gap:var(--brand-RiverBreakout-variant-gridline-spacing-contentGap);padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{padding-block-start:var(--base-size-12)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);margin-inline:calc(-1 * var(--brand-RiverBreakout-variant-gridline-spacing-outerInline));padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd);padding-inline:var(--brand-RiverBreakout-variant-gridline-spacing-outerInline)}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__content___p4EdY{flex-direction:column;display:flex}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{margin-block-start:0}}@media screen and (width>=63.25rem){.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX:has(.Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY){padding-block-end:0}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__content___p4EdY{grid-template-columns:1fr 31rem;grid-template-areas:"text trailingComponent""cta trailingComponent";grid-template-columns:1fr var(--brand-RiverBreakout-gridline-trailing-width,31rem);grid-gap:var(--brand-RiverBreakout-variant-gridline-spacing-contentGap);gap:var(--brand-RiverBreakout-variant-gridline-spacing-contentGap);flex:1;grid-template-rows:auto 1fr;padding-block:0;display:grid}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__text___TQQhU{grid-area:text;padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__call-to-action___yeIFh{grid-area:cta;margin-block:0;padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd)}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent___bjdxv{grid-area:trailingComponent;margin-block-start:0}.Primer_Brand__river-shared-module__RiverBreakout--variant-gridline___jHgqX .Primer_Brand__river-shared-module__River__trailingComponent--divider___q9hCY{border-top:none;border-left:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-inline:0;padding-block:0;padding-inline-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerInline);align-self:stretch;margin-block:0;margin-inline:0;padding-block-start:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock);padding-block-end:var(--brand-RiverBreakout-variant-gridline-spacing-outerBlockEnd)}}:root,[data-color-mode=light]{--brand-Accordion-toggle-color-start:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-end:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-default:var(--brand-color-text-default);--brand-Accordion-toggle-color-blue:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-blue-purple-start:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-blue-purple-end:var(--base-color-scale-purple-5);--brand-Accordion-toggle-color-coral:var(--base-color-scale-coral-5);--brand-Accordion-toggle-color-green:var(--base-color-scale-green-6);--brand-Accordion-toggle-color-green-blue-start:var(--base-color-scale-green-6);--brand-Accordion-toggle-color-green-blue-end:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-gray:var(--base-color-scale-gray-5);--brand-Accordion-toggle-color-indigo:var(--base-color-scale-indigo-5);--brand-Accordion-toggle-color-lemon:var(--base-color-scale-lemon-5);--brand-Accordion-toggle-color-lime:var(--base-color-scale-lime-5);--brand-Accordion-toggle-color-orange:var(--base-color-scale-orange-5);--brand-Accordion-toggle-color-pink:var(--base-color-scale-pink-5);--brand-Accordion-toggle-color-pink-blue-start:var(--base-color-scale-pink-5);--brand-Accordion-toggle-color-pink-blue-end:var(--base-color-scale-blue-5);--brand-Accordion-toggle-color-purple:var(--base-color-scale-purple-5);--brand-Accordion-toggle-color-purple-red-start:var(--base-color-scale-purple-5);--brand-Accordion-toggle-color-purple-red-end:var(--base-color-scale-red-5);--brand-Accordion-toggle-color-red:var(--base-color-scale-red-5);--brand-Accordion-toggle-color-red-orange-start:var(--base-color-scale-red-5);--brand-Accordion-toggle-color-red-orange-end:var(--base-color-scale-orange-5);--brand-Accordion-toggle-color-teal:var(--base-color-scale-teal-5);--brand-Accordion-toggle-color-yellow:var(--base-color-scale-yellow-5);--brand-Accordion-border-color-default:var(--brand-color-border-muted);--brand-Accordion-indicator-idle:var(--base-color-scale-gray-3);--brand-Accordion-indicator-hover:var(--base-color-scale-gray-5);--brand-Accordion-indicator-active:var(--brand-color-accent-primary)}[data-color-mode=dark]{--brand-Accordion-toggle-color-start:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-end:var(--brand-color-accent-primary);--brand-Accordion-toggle-color-default:var(--brand-color-text-default);--brand-Accordion-toggle-color-blue:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-blue-purple-start:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-blue-purple-end:var(--base-color-scale-purple-2);--brand-Accordion-toggle-color-coral:var(--base-color-scale-coral-2);--brand-Accordion-toggle-color-green:var(--base-color-scale-green-2);--brand-Accordion-toggle-color-green-blue-start:var(--base-color-scale-green-2);--brand-Accordion-toggle-color-green-blue-end:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-gray:var(--base-color-scale-gray-2);--brand-Accordion-toggle-color-indigo:var(--base-color-scale-indigo-2);--brand-Accordion-toggle-color-lemon:var(--base-color-scale-lemon-2);--brand-Accordion-toggle-color-lime:var(--base-color-scale-lime-2);--brand-Accordion-toggle-color-orange:var(--base-color-scale-orange-2);--brand-Accordion-toggle-color-pink:var(--base-color-scale-pink-2);--brand-Accordion-toggle-color-pink-blue-start:var(--base-color-scale-pink-2);--brand-Accordion-toggle-color-pink-blue-end:var(--base-color-scale-blue-2);--brand-Accordion-toggle-color-purple:var(--base-color-scale-purple-2);--brand-Accordion-toggle-color-purple-red-start:var(--base-color-scale-purple-2);--brand-Accordion-toggle-color-purple-red-end:var(--base-color-scale-red-2);--brand-Accordion-toggle-color-red:var(--base-color-scale-red-2);--brand-Accordion-toggle-color-red-orange-start:var(--base-color-scale-red-2);--brand-Accordion-toggle-color-red-orange-end:var(--base-color-scale-orange-2);--brand-Accordion-toggle-color-teal:var(--base-color-scale-teal-2);--brand-Accordion-toggle-color-yellow:var(--base-color-scale-yellow-2);--brand-Accordion-border-color-default:var(--brand-color-border-muted);--brand-Accordion-indicator-idle:var(--base-color-scale-gray-7);--brand-Accordion-indicator-hover:var(--base-color-scale-gray-5);--brand-Accordion-indicator-active:var(--brand-color-accent-primary)}.Primer_Brand__Accordion-module__Accordion___M_LPt{--brand-Accordion-content-height:0px;box-sizing:border-box;position:relative}.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk:after,.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk .Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy,.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk>.Primer_Brand__Accordion-module__Accordion__content___wMZGe,.Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{transition:none}.Primer_Brand__Accordion-module__Accordion--default___wLsHR{border-bottom:var(--brand-borderWidth-thin) solid var(--brand-Accordion-border-color-default)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{background-color:var(--brand-color-canvas-subtle);border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block:var(--base-size-20);padding-inline:var(--base-size-20);justify-content:flex-start;align-items:center;gap:0}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk:before{content:"";width:calc(var(--base-size-8) - 1px);height:var(--base-size-12);background-color:var(--brand-Accordion-indicator-idle);flex-shrink:0;margin-inline-end:var(--base-size-12);display:block}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk:hover:before{background-color:var(--brand-Accordion-indicator-hover)}details[open]>.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk:before{background-color:var(--brand-Accordion-indicator-active)}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h3,.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h4,.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h5,.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk h6{font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-100);letter-spacing:.15px;text-transform:uppercase}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)+.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{border-block-start:none}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{padding-block-start:var(--base-size-12);padding-inline:var(--base-size-20)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA:not(.Primer_Brand__Accordion-module__Accordion___M_LPt .Primer_Brand__Accordion-module__Accordion___M_LPt)>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA:after{block-size:var(--base-size-12)}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA .Primer_Brand__Accordion-module__Accordion--default___wLsHR:last-child{border-bottom:none}.Primer_Brand__Accordion-module__Accordion--emphasis___j9wgA .Primer_Brand__Accordion-module__Accordion--default___wLsHR:last-child:after{display:none}.Primer_Brand__Accordion-module__Accordion--default___wLsHR:after{content:"";background-color:var(--brand-Accordion-border-color-default);height:var(--brand-borderWidth-thin);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);transform-origin:50% 100%;width:100%;position:absolute;bottom:0;left:0;transform:scaleY(0)}.Primer_Brand__Accordion-module__Accordion--default___wLsHR:hover:after,details[open].Primer_Brand__Accordion-module__Accordion--default___wLsHR:after{background-color:var(--brand-color-accent-primary);transform:scaleY(1)}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{cursor:pointer;padding:var(--base-size-24) 0;justify-content:space-between;align-items:center;display:flex;position:relative}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc::-webkit-details-marker{display:none}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus)}details[open].Primer_Brand__Accordion-module__Accordion___M_LPt:has(>summary:focus-visible){outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}details[open].Primer_Brand__Accordion-module__Accordion___M_LPt>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc:focus-visible{outline:none}.Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{cursor:pointer;height:var(--base-size-24);width:var(--base-size-24);color:var(--brand-color-text-emphasized);justify-content:center;align-items:center;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.Primer_Brand__Accordion-module__Accordion__summary___NUIYc:not(.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW) .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{right:0}.Primer_Brand__Accordion-module__Accordion__summary--emphasis___FqzWk .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{color:var(--brand-color-text-default);order:1;margin-inline-start:auto;position:static;transform:none}.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{left:0}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_ .Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW{color:var(--brand-Accordion-toggle-color-start,var(--brand-color-text-emphasized))}.Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy{transform-origin:50%;transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide)}details[open]>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc .Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy{transform:rotate(-180deg)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-default___J06Ol{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-default)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-blue___BpPxQ{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-blue)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-blue-purple___R4Ta3{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-blue-purple-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-coral___T3Lvh{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-coral)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-green___GThPe{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-green)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-green-blue___PHnZc{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-green-blue-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-gray___gGQN8{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-gray)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-indigo___f5_9S{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-indigo)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-lemon___c5Gz6{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-lemon)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-lime___Tj0cg{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-lime)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-orange____Dby3{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-orange)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-pink___BXVJc{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-pink)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-pink-blue___NVPxr{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-pink-blue-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-purple___whcwP{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-purple)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-purple-red___l3gUG{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-purple-red-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-red___txXJX{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-red)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-red-orange___ZODhv{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-red-orange-start)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-teal___h2drb{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-teal)}.Primer_Brand__Accordion-module__Accordion__summary--toggleColor-yellow___WGTG3{--brand-Accordion-toggle-color-start:var(--brand-Accordion-toggle-color-yellow)}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_:not(.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW){padding-inline-end:var(--base-size-48)}.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW{padding-inline-start:var(--base-size-48)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe,.Primer_Brand__Accordion-module__Accordion__content___wMZGe p,.Primer_Brand__Accordion-module__Accordion__content___wMZGe span:not(.Primer_Brand__Accordion-module__Accordion__summary-toggle___Hw7fW),.Primer_Brand__Accordion-module__Accordion__content___wMZGe ul,.Primer_Brand__Accordion-module__Accordion__content___wMZGe ol{color:var(--brand-color-text-muted);font-family:var(--brand-fontStack-sansSerif);font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:0;transition:max-height var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);position:relative;overflow:hidden}.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{opacity:0;transition:opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-glide)}.Primer_Brand__Accordion-module__Accordion--default___wLsHR>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{top:calc(var(--base-size-2) - var(--base-size-24))}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA:before{content:"";block-size:var(--base-size-12);display:block}.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA:after{content:"";display:block}[data-color-mode=dark] .Primer_Brand__Accordion-module__Accordion__content___wMZGe{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Accordion-module__Accordion__content___wMZGe p:not(:first-child){margin-block-start:var(--base-size-16)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a{color:var(--brand-InlineLink-color-rest);-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a,.Primer_Brand__Accordion-module__Accordion__content___wMZGe a>span{font-weight:inherit;color:var(--brand-InlineLink-color-rest)}.Primer_Brand__Accordion-module__Accordion__content___wMZGe a:active,.Primer_Brand__Accordion-module__Accordion__content___wMZGe a:active>span{color:var(--brand-InlineLink-color-pressed)}details[open]>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:var(--brand-Accordion-content-height);z-index:0;position:relative}details[open].Primer_Brand__Accordion-module__Accordion--disableAnimation___kmWJk>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:none}details[open]>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{opacity:1}details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__content___wMZGe{max-height:0}details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__content___wMZGe>.Primer_Brand__Accordion-module__Accordion__content-inner___AZfFA{opacity:0}.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe,details[open]>.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe,details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__summary--default___C4Jx_+.Primer_Brand__Accordion-module__Accordion__content___wMZGe{margin-block-start:0}details.Primer_Brand__Accordion-module__Accordion--closing___fnh8x>.Primer_Brand__Accordion-module__Accordion__summary___NUIYc .Primer_Brand__Accordion-module__Accordion__summary-toggleIcon___IdMKy{transform:rotate(0)}details[open]>.Primer_Brand__Accordion-module__Accordion__summary--reversed-toggles___cpkAW+.Primer_Brand__Accordion-module__Accordion__content___wMZGe{padding-inline-start:var(--base-size-48)}@media screen and (width>=48rem){.Primer_Brand__Accordion-module__Accordion__summary___NUIYc{gap:var(--base-size-40)}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Accordion-module__Accordion___M_LPt,.Primer_Brand__Accordion-module__Accordion___M_LPt:before,.Primer_Brand__Accordion-module__Accordion___M_LPt:after,.Primer_Brand__Accordion-module__Accordion___M_LPt *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Icon-module__Icon___bf2xY{box-sizing:content-box;padding:0}.Primer_Brand__Icon-module__Icon___bf2xY>svg{display:block}.Primer_Brand__Icon-module__Icon--size-20___bxF8U{width:var(--base-size-20);height:var(--base-size-20)}.Primer_Brand__Icon-module__Icon--size-24___yTJML{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__Icon-module__Icon--size-28___tnGmL{width:var(--base-size-28);height:var(--base-size-28)}.Primer_Brand__Icon-module__Icon--size-32___Rhkw8{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Icon-module__Icon--size-36___F4Mcj{width:var(--base-size-36);height:var(--base-size-36)}.Primer_Brand__Icon-module__Icon--size-40___cXhgu{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Icon-module__Icon--size-44___vwox2{width:var(--base-size-44);height:var(--base-size-44)}.Primer_Brand__Icon-module__Icon--background___d6RdL{padding:var(--base-size-12);border-radius:var(--base-size-12)}.Primer_Brand__Icon-module__Icon--color-default___z2cYk{color:var(--brand-Icon-color-default)}.Primer_Brand__Icon-module__Icon--background-color-default___h6tiH{background-color:var(--brand-Icon-background-default)}.Primer_Brand__Icon-module__Icon--color-blue___Wne9C{color:var(--brand-Icon-color-blue)}.Primer_Brand__Icon-module__Icon--background-color-blue___zsNDL{background-color:var(--brand-Icon-background-blue)}.Primer_Brand__Icon-module__Icon--color-coral___vdwGj{color:var(--brand-Icon-color-coral)}.Primer_Brand__Icon-module__Icon--background-color-coral___FKaij{background-color:var(--brand-Icon-background-coral)}.Primer_Brand__Icon-module__Icon--color-green___OxAZK{color:var(--brand-Icon-color-green)}.Primer_Brand__Icon-module__Icon--background-color-green___UUQt1{background-color:var(--brand-Icon-background-green)}.Primer_Brand__Icon-module__Icon--color-gray___tVTnd{color:var(--brand-Icon-color-gray)}.Primer_Brand__Icon-module__Icon--background-color-gray___dpdtX{background-color:var(--brand-Icon-background-gray)}.Primer_Brand__Icon-module__Icon--color-indigo___OrE5M{color:var(--brand-Icon-color-indigo)}.Primer_Brand__Icon-module__Icon--background-color-indigo___TIqOT{background-color:var(--brand-Icon-background-indigo)}.Primer_Brand__Icon-module__Icon--color-lemon___Ftx9H{color:var(--brand-Icon-color-lemon)}.Primer_Brand__Icon-module__Icon--background-color-lemon___BhpS6{background-color:var(--brand-Icon-background-lemon)}.Primer_Brand__Icon-module__Icon--color-lime___mQVWo{color:var(--brand-Icon-color-lime)}.Primer_Brand__Icon-module__Icon--background-color-lime___K4TMA{background-color:var(--brand-Icon-background-lime)}.Primer_Brand__Icon-module__Icon--color-orange___CIjjp{color:var(--brand-Icon-color-orange)}.Primer_Brand__Icon-module__Icon--background-color-orange___z52U7{background-color:var(--brand-Icon-background-orange)}.Primer_Brand__Icon-module__Icon--color-pink___cS_v5{color:var(--brand-Icon-color-pink)}.Primer_Brand__Icon-module__Icon--background-color-pink___cy5Kg{background-color:var(--brand-Icon-background-pink)}.Primer_Brand__Icon-module__Icon--color-purple___d05Sh{color:var(--brand-Icon-color-purple)}.Primer_Brand__Icon-module__Icon--background-color-purple___JmhnQ{background-color:var(--brand-Icon-background-purple)}.Primer_Brand__Icon-module__Icon--color-red___K_2c0{color:var(--brand-Icon-color-red)}.Primer_Brand__Icon-module__Icon--background-color-red___qoirP{background-color:var(--brand-Icon-background-red)}.Primer_Brand__Icon-module__Icon--color-teal___fix20{color:var(--brand-Icon-color-teal)}.Primer_Brand__Icon-module__Icon--background-color-teal___a7cyd{background-color:var(--brand-Icon-background-teal)}.Primer_Brand__Icon-module__Icon--color-yellow___Z1juk{color:var(--brand-Icon-color-yellow)}.Primer_Brand__Icon-module__Icon--background-color-yellow___Yhfck{background-color:var(--brand-Icon-background-yellow)}:root{--brand-Icon-color-yellow:var(--base-color-scale-yellow-5);--brand-Icon-color-teal:var(--base-color-scale-teal-5);--brand-Icon-color-red:var(--base-color-scale-red-5);--brand-Icon-color-purple:var(--base-color-scale-purple-5);--brand-Icon-color-pink:var(--base-color-scale-pink-5);--brand-Icon-color-orange:var(--base-color-scale-orange-5);--brand-Icon-color-lime:var(--base-color-scale-lime-5);--brand-Icon-color-lemon:var(--base-color-scale-lemon-5);--brand-Icon-color-indigo:var(--base-color-scale-indigo-5);--brand-Icon-color-gray:var(--base-color-scale-gray-6);--brand-Icon-color-green:var(--base-color-scale-green-6);--brand-Icon-color-coral:var(--base-color-scale-coral-5);--brand-Icon-color-blue:var(--base-color-scale-blue-5);--brand-Icon-color-default:var(--brand-Icon-color-green);--brand-Icon-background-yellow:var(--base-color-scale-yellow-0);--brand-Icon-background-teal:var(--base-color-scale-teal-0);--brand-Icon-background-red:var(--base-color-scale-red-0);--brand-Icon-background-purple:var(--base-color-scale-purple-0);--brand-Icon-background-pink:var(--base-color-scale-pink-0);--brand-Icon-background-orange:var(--base-color-scale-orange-0);--brand-Icon-background-lime:var(--base-color-scale-lime-0);--brand-Icon-background-lemon:var(--base-color-scale-lemon-0);--brand-Icon-background-indigo:var(--base-color-scale-indigo-0);--brand-Icon-background-gray:var(--base-color-scale-gray-0);--brand-Icon-background-green:var(--base-color-scale-green-0);--brand-Icon-background-coral:var(--base-color-scale-coral-0);--brand-Icon-background-blue:var(--base-color-scale-blue-0);--brand-Icon-background-default:var(--brand-Icon-background-green)}:root,[data-color-mode=light]{--brand-Icon-background-default:var(--brand-Icon-background-green);--brand-Icon-background-blue:var(--base-color-scale-blue-0);--brand-Icon-background-coral:var(--base-color-scale-coral-0);--brand-Icon-background-green:var(--base-color-scale-green-0);--brand-Icon-background-gray:var(--base-color-scale-gray-0);--brand-Icon-background-indigo:var(--base-color-scale-indigo-0);--brand-Icon-background-lemon:var(--base-color-scale-lemon-0);--brand-Icon-background-lime:var(--base-color-scale-lime-0);--brand-Icon-background-orange:var(--base-color-scale-orange-0);--brand-Icon-background-pink:var(--base-color-scale-pink-0);--brand-Icon-background-purple:var(--base-color-scale-purple-0);--brand-Icon-background-red:var(--base-color-scale-red-0);--brand-Icon-background-teal:var(--base-color-scale-teal-0);--brand-Icon-background-yellow:var(--base-color-scale-yellow-0);--brand-Icon-color-default:var(--brand-Icon-color-green);--brand-Icon-color-blue:var(--base-color-scale-blue-5);--brand-Icon-color-coral:var(--base-color-scale-coral-5);--brand-Icon-color-green:var(--base-color-scale-green-6);--brand-Icon-color-gray:var(--base-color-scale-gray-6);--brand-Icon-color-indigo:var(--base-color-scale-indigo-5);--brand-Icon-color-lemon:var(--base-color-scale-lemon-5);--brand-Icon-color-lime:var(--base-color-scale-lime-5);--brand-Icon-color-orange:var(--base-color-scale-orange-5);--brand-Icon-color-pink:var(--base-color-scale-pink-5);--brand-Icon-color-purple:var(--base-color-scale-purple-5);--brand-Icon-color-red:var(--base-color-scale-red-5);--brand-Icon-color-teal:var(--base-color-scale-teal-5);--brand-Icon-color-yellow:var(--base-color-scale-yellow-5)}[data-color-mode=dark]{--brand-Icon-background-default:var(--brand-Icon-background-green);--brand-Icon-background-blue:var(--base-color-scale-blue-8);--brand-Icon-background-coral:var(--base-color-scale-coral-8);--brand-Icon-background-green:var(--base-color-scale-green-8);--brand-Icon-background-gray:var(--base-color-scale-gray-6);--brand-Icon-background-indigo:var(--base-color-scale-indigo-8);--brand-Icon-background-lemon:var(--base-color-scale-lemon-8);--brand-Icon-background-lime:var(--base-color-scale-lime-8);--brand-Icon-background-orange:var(--base-color-scale-orange-8);--brand-Icon-background-pink:var(--base-color-scale-pink-8);--brand-Icon-background-purple:var(--base-color-scale-purple-8);--brand-Icon-background-red:var(--base-color-scale-red-8);--brand-Icon-background-teal:var(--base-color-scale-teal-8);--brand-Icon-background-yellow:var(--base-color-scale-yellow-8);--brand-Icon-color-default:var(--brand-Icon-color-green);--brand-Icon-color-blue:var(--base-color-scale-blue-2);--brand-Icon-color-coral:var(--base-color-scale-coral-2);--brand-Icon-color-green:var(--base-color-scale-green-2);--brand-Icon-color-gray:var(--base-color-scale-gray-2);--brand-Icon-color-indigo:var(--base-color-scale-indigo-2);--brand-Icon-color-lemon:var(--base-color-scale-lemon-2);--brand-Icon-color-lime:var(--base-color-scale-lime-2);--brand-Icon-color-orange:var(--base-color-scale-orange-2);--brand-Icon-color-pink:var(--base-color-scale-pink-2);--brand-Icon-color-purple:var(--base-color-scale-purple-2);--brand-Icon-color-red:var(--base-color-scale-red-2);--brand-Icon-color-teal:var(--base-color-scale-teal-2);--brand-Icon-color-yellow:var(--base-color-scale-yellow-2)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{--river-breakout-tabs-columns:1}@media screen and (width<=63.24rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{width:100%;max-width:38.625rem;margin-inline:auto}}@media screen and (width>=80rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{--brand-RiverBreakout-variant-gridline-spacing-outerInline:var(--base-size-60);--brand-RiverBreakout-variant-gridline-spacing-outerBlock:var(--base-size-60)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordion___sGtKW{flex-direction:column;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabList___xlU3i{flex-direction:column;padding-block-end:var(--base-size-80);display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisuals___hDA4K{border-radius:var(--brand-borderRadius-small);order:1;width:100%;margin-block-end:var(--base-size-36);position:relative;overflow:hidden}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisuals___yL4Ev{width:100%;margin-block-end:var(--base-size-16);position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_{z-index:1;min-width:0;position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__backgroundVisual___rywqw{z-index:0;pointer-events:none;position:absolute;inset:0;overflow:hidden}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{z-index:1;position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{padding:var(--base-size-32)}@media screen and (width>=63.25rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{padding:var(--base-size-64)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--image-position-block-end___qTggg .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--image-position-block-end___qTggg .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU{padding-block-end:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9:has(>[data-video-player-container]){border-radius:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__visual--rounded___herZ2>[data-video-player-container]{border-radius:var(--brand-borderRadius-medium);overflow:hidden}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--has-background-visual___dx2xk.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--image-position-block-end___qTggg .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__visual--rounded___herZ2>[data-video-player-container]{border-radius:var(--brand-borderRadius-medium) var(--brand-borderRadius-medium) 0 0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--background-visual-full-bleed___EsvXd .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisuals___hDA4K{border-radius:0;overflow:visible}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs--background-visual-full-bleed___EsvXd .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__backgroundVisual___rywqw{inset-block-start:calc(-1 * var(--brand-RiverBreakout-variant-gridline-spacing-outerBlock));inset-inline:calc(-1 * var(--brand-RiverBreakout-variant-gridline-spacing-outerInline))}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9 img,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9 picture,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisual___ZpMy9 video,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU img,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU picture,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionSharedVisual___K1OyU video{max-width:100%;display:block}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9 [class*=River__visual--rounded]{border-radius:var(--brand-borderRadius-small)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__sharedVisualPanel___Jkko_[hidden]{display:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tablist___f5FNH{grid-template-columns:repeat(var(--river-breakout-tabs-columns), minmax(0, 1fr));grid-gap:var(--base-size-40);gap:var(--base-size-40);order:2;display:grid}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListActions___iCX6R{grid-template-columns:repeat(var(--river-breakout-tabs-columns), minmax(0, 1fr));grid-gap:var(--base-size-40);gap:var(--base-size-40);order:3;display:grid}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item___SymTq{flex-direction:column;align-items:flex-start;min-width:0;display:flex;position:relative}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item___SymTq:before{content:"";height:var(--brand-borderWidth-thin);transform-origin:50% 0;background-color:var(--brand-color-border-muted);transition:transform var(--brand-animation-duration-fast) ease, background-color var(--brand-animation-duration-fast) ease;position:absolute;inset-block-start:0;inset-inline:0;transform:scaleY(1)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item--selected___dLXod:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}@media screen and (width>=63.25rem) and (hover:hover) and (pointer:fine){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item___SymTq:hover:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__heading___HScg4{color:var(--brand-color-text-muted);transition:color var(--brand-animation-duration-fast) ease-in-out;margin:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item--selected___dLXod .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__heading___HScg4{color:var(--brand-color-text-default)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__icon___Xr8op{justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tab___tHZFA{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;outline:none;flex-direction:column;align-items:flex-start;padding-block-start:var(--base-size-28);padding-inline:0;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tab___tHZFA:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-4)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tabHeading___cEwLt{margin:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tab___tHZFA>*+.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__tabHeading___cEwLt{margin-block-start:var(--base-size-20)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListContent___D9V9I{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;margin-block-start:var(--base-size-12);display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListAction___SaBmu{color:var(--brand-Link-color-accent);font-weight:var(--base-text-weight-medium);-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__wideTabListActionItem___q6pS2{margin-block-start:var(--base-size-12)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__content___LpEoz{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordion___sGtKW{padding-block-end:var(--base-size-40)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5,.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5>span{color:var(--brand-Link-color-accent);font-weight:var(--base-text-weight-medium)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionContent___wykRr .Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__link___zcQY5{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o{border-top:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o:after{display:none}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o:before{content:"";height:var(--brand-borderWidth-thin);transform-origin:50% 0;background-color:var(--brand-color-border-muted);transition:transform var(--brand-animation-duration-fast) ease, background-color var(--brand-animation-duration-fast) ease;position:absolute;inset-block-start:0;inset-inline:0;transform:scaleY(1)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__item--selected___dLXod:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}@media (hover:hover) and (pointer:fine){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionItem___SyD2o:hover:before{transform:translateY(calc(-1 * var(--brand-borderWidth-thin))) scaleY(2);background-color:var(--brand-color-accent-primary)}}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionHeading___RiuA9{color:var(--brand-color-text-default)}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionHeadingInner___vvOjI{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:inline-flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionIcon___pslaZ{flex-shrink:0}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionLabel___gIy1N{align-items:center;display:inline-flex}.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs__accordionPanel___EqiKL{gap:var(--base-size-24);flex-direction:column;display:flex}@media screen and (width>=618px){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{border-inline:none}}@media screen and (width>=1300px){.Primer_Brand__RiverBreakoutTabs-module__RiverBreakoutTabs___X8Dk9{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--ease:cubic-bezier(.22, .56, .23, .89);-webkit-font-smoothing:antialiased;--stackDistance:calc(var(--base-size-24) * -1);--visualMaxWidth:1032px;--visualMaxWidthUL:1032;--visualMaxHeight:min(690px, 60vh);--visualMaxHeightUL:690;--storyScrollPadding:min(32px, 5vw);position:relative}@media (height<=720px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--visualMaxHeight:55vh}}@media (height<=600px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--visualMaxHeight:50vh}}@media (height<=500px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--visualMaxHeight:40vh}}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__inner___V0daX{position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-cover___rCa_Y{width:100%;position:absolute;left:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__image___WmawN{z-index:10;border-radius:var(--brand-borderRadius-large);width:auto;margin-left:auto;margin-right:auto;display:block;position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll--enabled___EpqB5 .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__internal-river___eUmDR{grid-template-columns:1fr;gap:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll--enabled___EpqB5 .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__internal-river___eUmDR img,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll--enabled___EpqB5 .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__internal-river___eUmDR video{display:none}@media (width<=542px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--topOffset:calc((100vh - min(664px, 60vh)) / 5)}}@media (width<=768px) and (height>=670px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--extraBottomSpacing:calc(-1 * (100vh - 100vw) / 5)}}@media (width>=542px) and (width<=1028px) and (height>=670px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--extraBottomSpacing:calc(-1 * (100vh - 100vw) / 3)}}@media (width>=542px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--scrollTextHeight:42vh}}@media (height<=520px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--scrollTextHeight:70vh}}@media (width>=1028px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--stackDistance:-30px}}@media (height<=800px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--stackDistance:-20px}}@media (height<=500px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--stackDistance:-15px}}@media screen and (width<=768px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{--topOffset:calc((100vh - min(664px, 60vh)) / 3);--availableWidth:calc(100vw - var(--storyScrollPadding) * 2);--relativeVisualHeight:calc(var(--visualMaxHeightUL) / var(--visualMaxWidthUL) * var(--availableWidth));--visualHeight:min(var(--visualMaxHeight), var(--relativeVisualHeight));--visualWidth:calc(var(--visualHeight) * var(--visualMaxWidthUL) / var(--visualMaxHeightUL));--scrollTextHeight:58vh;--textToVisualPadding:max(5vh, 40px);--topScrollOffset:calc(var(--visualHeight));--bottomScrollOffset:calc(100vh - var(--topOffset) - var(--visualHeight) - var(--textToVisualPadding));--extraBottomSpacing:70px}@supports (height:100dvh){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR{height:100dvh}}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container___ZJlnt{width:100%;height:100%;position:absolute;top:0;left:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo{min-height:var(--scrollTextHeight);transition:opacity .3s var(--ease);position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo:has(+.Primer_Brand__RiverStoryScroll-module__in-viewport___AxNUA){opacity:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__in-viewport___AxNUA+.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg{opacity:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{max-width:calc(1032px + var(--storyScrollPadding) * 2);padding-right:var(--storyScrollPadding);padding-left:var(--storyScrollPadding);margin-top:min(30vw,22vh);margin-left:auto;margin-right:auto}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq{padding-top:var(--topScrollOffset);padding-bottom:var(--bottomScrollOffset)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__image___WmawN{width:100%;height:auto;max-width:var(--visualWidth);border-radius:var(--brand-borderRadius-large)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR{pointer-events:none;padding-top:var(--topOffset);margin-top:calc(-1 * var(--topOffset));z-index:1;flex-direction:column;height:100vh;display:flex;position:sticky;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual--below___gJyav{background-image:linear-gradient(180deg, var(--brand-RiverStoryScroll-content-inactive-bgColor) calc(var(--topOffset) + var(--visualHeight) + 3px), transparent calc(var(--topOffset) + var(--visualHeight) + var(--textToVisualPadding)), transparent 93%, var(--brand-RiverStoryScroll-content-inactive-bgColor) 99%)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual--below___gJyav .Primer_Brand__RiverStoryScroll-module__story-scroll-text___isxdl{margin-top:var(--base-size-40)}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B{opacity:0;display:none}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:nth-child(2){opacity:1;display:block}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C{transition:.5s var(--ease) transform, .5s var(--ease) filter, .5s var(--ease) opacity;pointer-events:auto}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(~.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){margin-left:auto;margin-right:auto;display:block;position:absolute;left:0;right:0}.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B{transform:translateY(calc(var(--stackDistance) * -1)) scale(1.015);margin-left:auto;margin-right:auto;display:block;position:absolute;left:0;right:0}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(var(--stackDistance)) scale(.95);filter:brightness(70%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(calc(var(--stackDistance) * 2)) scale(.9);filter:brightness(50%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(calc(var(--stackDistance) * 3)) scale(.85);filter:brightness(30%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B:has(+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B+.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv){transform:translateY(calc(var(--stackDistance) * 4)) scale(.8);filter:brightness(10%);opacity:1}.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv{display:block;position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-stack___jBEVs{padding-top:var(--textToVisualPadding);top:calc(var(--topOffset) + var(--visualHeight));position:sticky}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo:last-child .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-stack___jBEVs{height:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv{gap:var(--base-size-4);left:calc(var(--base-size-20) * -1 - 2px);height:var(--visualHeight);margin:auto;flex-direction:column;justify-content:center;margin-block-start:calc(var(--base-size-20) * -1);display:flex;position:absolute;right:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k{border-radius:var(--brand-borderRadius-large);opacity:.55;background:var(--brand-RiverStoryScroll-pagination-fgColor);width:6px;height:6px;transition:opacity var(--brand-animation-duration-default) var(--ease), height var(--brand-animation-duration-default) var(--ease)}.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(2)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:first-child,.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(3)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(2),.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(4)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(3),.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(5)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(4),.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv:nth-child(6)~.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination___KPrEv .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__pagination-dot___G_E1k:nth-child(5){opacity:1;height:var(--base-size-24)}}@media screen and (width>=768px){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__inner___V0daX{grid-gap:var(--base-size-24);gap:var(--base-size-24);grid-template-columns:1fr 1fr;display:grid}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container___ZJlnt{order:2;align-items:center;width:100%;height:80vh;display:flex;position:sticky;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__image___WmawN{width:100%}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C{width:100%;transition:opacity .3s var(--ease);padding-top:10vh;position:sticky;top:0;right:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-container-inner___oFalR.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual--below___gJyav{position:sticky;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C.Primer_Brand__RiverStoryScroll-module__tracker-outside-viewport___K2b2B{z-index:-1;opacity:0;position:absolute;top:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__visual-scroll-responder___DKr1C.Primer_Brand__RiverStoryScroll-module__tracker-in-viewport___MYQAv{z-index:1;opacity:1}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container____Rsbs.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq{padding-top:10vh}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container____Rsbs.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq .Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo{padding:20vh 0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg{position:relative}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo{filter:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg{filter:blur(1px);transition:filter var(--brand-animation-duration-extended) var(--brand-animation-easing-default)}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo:after{content:"";transition:opacity var(--brand-animation-duration-extended) var(--brand-animation-easing-default), visibility var(--brand-animation-duration-extended) var(--brand-animation-easing-default);opacity:0;visibility:hidden;background-color:var(--brand-RiverStoryScroll-content-inactive-bgColor);position:absolute;inset:0}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__tracker___SR7oo.Primer_Brand__RiverStoryScroll-module__outside-viewport___ivCAg:after{opacity:.7;visibility:visible}}@media screen and (width>=768px) and (height>=900px) and (prefers-reduced-motion:no-preference){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z{margin-top:-20vh}.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container____Rsbs.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll__content-container--below____OTaq{padding-top:16vh}}@media (prefers-reduced-motion:reduce){.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z:before,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z:after,.Primer_Brand__RiverStoryScroll-module__RiverStoryScroll___GKo1Z *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-RiverStoryScroll-pagination-fgColor:var(--base-color-scale-gray-6);--brand-RiverStoryScroll-content-inactive-bgColor:var(--brand-color-canvas-default)}[data-color-mode=dark]{--brand-RiverStoryScroll-pagination-fgColor:var(--base-color-scale-white-0);--brand-RiverStoryScroll-content-inactive-bgColor:var(--brand-color-canvas-default)}.Primer_Brand__Pagination-module__Pagination___qDHkk{margin-top:var(--base-size-20);margin-bottom:var(--base-size-16);text-align:center}.Primer_Brand__Pagination-module__Pagination__inner___tB9Za{justify-content:center;align-items:center;gap:var(--base-size-8);flex-wrap:wrap;display:inline-flex}.Primer_Brand__Pagination-module__Pagination__pageItem___Ehtp4{--brand-button-subtle-borderColor-rest:transparent;--brand-button-subtle-borderColor-hover:transparent;--brand-button-subtle-borderColor-active:transparent;transition:none}.Primer_Brand__Pagination-module__Pagination__controlContent___QuYzj{gap:var(--base-size-4);align-items:center;display:inline-flex;position:relative}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper___UbqtD{flex-shrink:0;display:none}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper--previous___yVz6V{transform:translateX(var(--base-size-2))}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper--next___jHfRO{transform:translateX(calc(var(--base-size-2) * -1))}.Primer_Brand__Pagination-module__Pagination__controlArrow___gKpCw{width:var(--base-size-16);height:var(--base-size-16)}@media screen and (width<=47.99rem){.Primer_Brand__Pagination-module__Pagination__controlItem___jcLa5{padding-inline:var(--base-size-8);--brand-button-subtle-borderColor-rest:transparent;--brand-button-subtle-borderColor-hover:transparent;--brand-button-subtle-borderColor-active:transparent}.Primer_Brand__Pagination-module__Pagination__controlText___jthrj{width:var(--base-size-2);height:var(--base-size-2);clip:rect(0, 0, 0, 0);word-wrap:normal;border:0;padding:0;position:absolute;overflow:hidden}.Primer_Brand__Pagination-module__Pagination__controlArrowWrapper___UbqtD{display:flex}.Primer_Brand__Pagination-module__Pagination__controlItem___jcLa5>span{align-items:center;display:flex}.Primer_Brand__Pagination-module__Pagination__controlItem___jcLa5>span>span{align-items:center;line-height:0;display:flex}}:root,[data-color-mode=light]{--brand-MediaPlaylist-bgColor:linear-gradient(180deg, #f2f5f380 0%, #f2f5f300 100%), var(--brand-color-canvas-default)}[data-color-mode=dark]{--brand-MediaPlaylist-bgColor:linear-gradient(180deg, var(--base-color-scale-gray-8) 0%, var(--base-color-scale-black-0) 100%), var(--brand-color-canvas-default)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{padding-block-start:var(--base-size-36);padding-inline:var(--base-size-20)}@media screen and (width<=63.24rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{width:100%;max-width:38.625rem;margin-inline:auto;padding:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h1+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h2+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h3+p{margin-block-start:var(--base-size-12)}}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__layout___YZKVk{background:var(--brand-MediaPlaylist-bgColor);flex-direction:column;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__playlist___nIpOa{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);order:2;min-width:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__heading___nM7Ip{min-height:var(--base-size-48);align-items:center;gap:var(--base-size-8);padding:var(--base-size-12) var(--base-size-16);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);color:var(--brand-color-text-muted);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);text-transform:uppercase;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__headingLabel___BRQPm{color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-transform:inherit;margin:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__headingCounter___ao736{align-items:center;gap:var(--base-size-8);color:var(--brand-color-text-default);display:inline-flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__headingCounter___ao736:before{content:"•";color:var(--brand-color-text-muted)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanels___hwtyP{width:100%;padding:var(--base-size-16);order:1}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanel___sTQVI{min-width:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanel___sTQVI[hidden]{display:none}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panel___VH451{gap:var(--base-size-20);flex-direction:column;width:100%;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL{max-width:var(--brand-Prose-lineLength)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR{background-color:var(--base-color-scale-black-0);overflow:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR img,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR picture,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR video,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR iframe{width:100%;max-width:100%;display:block}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tablist___IODGO{flex-direction:column;order:2;display:flex;overflow-x:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist--overflowItems___tKiJV .Primer_Brand__MediaPlaylist-module__MediaPlaylist__tablist___IODGO{max-block-size:calc((3 * var(--base-size-64)) + (6 * var(--base-size-12)));overscroll-behavior:contain;scroll-padding-block:var(--base-size-24);overflow-y:auto}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__pagination___WG5zu{padding:var(--base-size-12) var(--base-size-16) var(--base-size-16);border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);order:3;justify-content:center;margin:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item___BXYUO{min-width:0;min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-12)));flex-direction:column;flex:none;align-items:flex-start;display:flex;position:relative;overflow-x:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item___BXYUO:before{content:"";height:var(--brand-borderWidth-thin);transform-origin:50% 100%;background-color:var(--brand-color-border-muted);transition:transform var(--brand-animation-duration-fast) ease, background-color var(--brand-animation-duration-fast) ease;position:absolute;inset-block-end:0;inset-inline:0;transform:scaleY(1)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item--selected___vmJ8h{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item--selected___vmJ8h:before{background-color:var(--brand-color-accent-primary);transform:scaleY(2)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeading___mWbE8{color:var(--brand-color-text-muted);margin:0;display:block}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item--selected___vmJ8h .Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeading___mWbE8{color:var(--brand-color-text-default)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingContent___Nl9LU{flex:auto;min-width:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingDetails___Y6For{gap:var(--base-size-4);flex-direction:column;min-width:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingTitle___PcEmO{color:inherit;word-wrap:anywhere;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tab___hcSSV{box-sizing:border-box;width:100%;min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-12)));color:inherit;font:inherit;text-align:left;cursor:pointer;padding:var(--base-size-12) var(--base-size-16);background:0 0;border:0;outline:none;flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tabContent___sa1zl{align-items:flex-start;gap:var(--base-size-12);width:100%;min-width:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__thumbnail___ApiLF{width:var(--base-size-112);block-size:calc(var(--base-size-64) - var(--brand-borderWidth-thin));aspect-ratio:16/9;border-radius:var(--brand-borderRadius-small);background-color:var(--brand-color-canvas-subtle);flex-shrink:0;display:block;overflow:hidden}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__thumbnail___ApiLF>*{-o-object-fit:cover;object-fit:cover;width:100%;height:100%;display:block}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tab___hcSSV:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-4)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__content___BaIhp{align-items:flex-start;gap:var(--base-size-12);flex-direction:column;display:flex}@media screen and (width<=63.24rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanels___hwtyP{padding-block-end:var(--base-size-24)}}@media screen and (width>=38.625rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{box-sizing:border-box;width:100%;border-inline:none;max-inline-size:80rem;margin-inline:auto;padding:0}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__layout___YZKVk{--brand-MediaPlaylist-desktopGutter:3.75rem;--brand-MediaPlaylist-sidebarWidth:27rem;box-sizing:border-box;grid-template-columns:minmax(0,1fr) minmax(0,27rem);grid-template-areas:"media tabs";grid-template-columns:minmax(0, 1fr) minmax(0, var(--brand-MediaPlaylist-sidebarWidth));grid-column-gap:3.75rem;grid-column-gap:var(--brand-MediaPlaylist-desktopGutter);-moz-column-gap:3.75rem;-moz-column-gap:var(--brand-MediaPlaylist-desktopGutter);column-gap:3.75rem;column-gap:var(--brand-MediaPlaylist-desktopGutter);width:100%;padding-inline-start:3.75rem;padding-inline-start:var(--brand-MediaPlaylist-desktopGutter);display:grid}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__playlist___nIpOa{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex-direction:column;grid-area:tabs;align-self:stretch;padding-block-start:calc(var(--base-size-48) + var(--base-size-12));display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist--overflowItems___tKiJV .Primer_Brand__MediaPlaylist-module__MediaPlaylist__tablist___IODGO{max-block-size:calc((3 * var(--base-size-64)) + (6 * var(--base-size-20)))}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanels___hwtyP{padding-block:var(--base-size-80);grid-area:media;justify-content:flex-start;align-items:flex-start;padding-inline:0;display:flex}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__mediaPanel___sTQVI{width:100%}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panel___VH451{gap:var(--base-size-40)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR{width:100%}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__media___rS1uR iframe{aspect-ratio:16/9;border-radius:var(--base-size-6)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__itemHeadingDetails___Y6For{font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h1+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h2+p,.Primer_Brand__MediaPlaylist-module__MediaPlaylist__panelContent___xAUrL h3+p{margin-block-start:var(--base-size-12)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__heading___nM7Ip{min-height:auto;padding-block-start:var(--base-size-24);padding-block-end:var(--base-size-12);padding-inline-start:var(--base-size-32);padding-inline-end:var(--brand-MediaPlaylist-desktopGutter)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__item___BXYUO{min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-20)))}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tab___hcSSV{min-block-size:calc(var(--base-size-64) + (2 * var(--base-size-20)));padding-block:var(--base-size-20);padding-inline-start:var(--base-size-32);padding-inline-end:var(--brand-MediaPlaylist-desktopGutter)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__tabContent___sa1zl{align-items:center}}@media screen and (width>=80rem){.Primer_Brand__MediaPlaylist-module__MediaPlaylist___X3BZt{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__MediaPlaylist-module__MediaPlaylist__playlist___nIpOa{border-inline-end:0}}:root,[data-color-mode=light]{--brand-control-color-border-default:var(--base-color-scale-gray-4);--brand-control-color-border-disabled:var(--base-color-scale-gray-2);--brand-control-color-canvas-disabled:var(--base-color-scale-gray-1);--brand-control-color-fg-default:var(--brand-color-text-default);--brand-control-color-fg-disabled:var(--base-color-scale-gray-4);--brand-control-color-focus:var(--base-color-scale-blue-6);--brand-control-checkbox-bg-default:var(--base-color-scale-white-0);--brand-control-checkbox-bg-hover:var(--brand-color-canvas-subtle);--brand-control-checkbox-bg-checked:var(--base-color-scale-green-6);--brand-control-checkbox-bg-checked-hover:color-mix(in srgb, var(--brand-color-text-emphasized), #000 26%);--brand-control-checkbox-bg-indeterminate:var(--base-color-scale-green-6);--brand-control-checkbox-bg-indeterminate-hover:color-mix(in srgb, var(--brand-color-text-emphasized), #000 26%);--brand-control-checkbox-bg-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #fff 65%);--brand-control-checkbox-fg-checked:var(--base-color-scale-white-0);--brand-control-checkbox-fg-checked-disabled:var(--base-color-scale-white-0);--brand-control-checkbox-border-default:var(--base-color-scale-gray-4);--brand-control-checkbox-border-hover:var(--base-color-scale-gray-4);--brand-control-checkbox-border-checked:var(--base-color-scale-green-6);--brand-control-checkbox-border-checked-hover:var(--brand-color-text-emphasized);--brand-control-checkbox-border-indeterminate:var(--base-color-scale-green-6);--brand-control-checkbox-border-indeterminate-hover:var(--brand-color-text-emphasized);--brand-control-checkbox-border-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #fff 65%);--brand-control-checkbox-border-unchecked-disabled:var(--base-color-scale-gray-1);--brand-control-radio-bg-default:var(--base-color-scale-white-0);--brand-control-radio-bg-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-checked:var(--base-color-scale-white-0);--brand-control-radio-bg-checked-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-disabled:var(--brand-color-canvas-default);--brand-control-radio-border-default:var(--brand-control-color-border-default);--brand-control-radio-border-hover:var(--base-color-scale-gray-4);--brand-control-radio-border-checked:var(--brand-control-color-border-default);--brand-control-radio-border-checked-hover:var(--brand-control-color-border-default);--brand-control-radio-border-disabled:var(--base-color-scale-gray-4);--brand-control-radio-dot-default:var(--base-color-scale-black-0);--brand-control-radio-dot-checked:var(--base-color-scale-green-6);--brand-control-radio-dot-checked-hover:color-mix(in srgb, var(--brand-color-text-emphasized), #000 26%)}[data-color-mode=dark]{--brand-control-color-border-default:var(--base-color-scale-gray-4);--brand-control-color-border-disabled:var(--base-color-scale-gray-5);--brand-control-color-canvas-disabled:var(--base-color-scale-gray-8);--brand-control-color-fg-default:var(--brand-color-text-default);--brand-control-color-fg-disabled:var(--base-color-scale-gray-5);--brand-control-color-focus:var(--base-color-scale-blue-2);--brand-control-checkbox-bg-default:var(--base-color-scale-gray-7);--brand-control-checkbox-bg-hover:var(--brand-color-canvas-subtle);--brand-control-checkbox-bg-checked:var(--base-color-scale-green-5);--brand-control-checkbox-bg-checked-hover:#309a4d;--brand-control-checkbox-bg-indeterminate:var(--base-color-scale-green-5);--brand-control-checkbox-bg-indeterminate-hover:#309a4d;--brand-control-checkbox-bg-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #000 35%);--brand-control-checkbox-fg-checked:var(--base-color-scale-white-0);--brand-control-checkbox-fg-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-5), #000 20%);--brand-control-checkbox-border-default:var(--base-color-scale-gray-4);--brand-control-checkbox-border-hover:var(--base-color-scale-gray-5);--brand-control-checkbox-border-checked:#077726;--brand-control-checkbox-border-checked-hover:#0000001f;--brand-control-checkbox-border-indeterminate:#077726;--brand-control-checkbox-border-indeterminate-hover:#0000001f;--brand-control-checkbox-border-checked-disabled:color-mix(in srgb, var(--base-color-scale-green-6), #000 35%);--brand-control-checkbox-border-unchecked-disabled:var(--base-color-scale-gray-5);--brand-control-radio-bg-default:var(--base-color-scale-black-0);--brand-control-radio-bg-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-checked:var(--base-color-scale-black-0);--brand-control-radio-bg-checked-hover:var(--brand-color-canvas-subtle);--brand-control-radio-bg-disabled:var(--brand-color-canvas-default);--brand-control-radio-border-default:var(--base-color-scale-gray-4);--brand-control-radio-border-hover:var(--base-color-scale-gray-5);--brand-control-radio-border-checked:var(--base-color-scale-gray-4);--brand-control-radio-border-checked-hover:var(--base-color-scale-gray-4);--brand-control-radio-border-disabled:var(--base-color-scale-gray-5);--brand-control-radio-dot-default:var(--base-color-scale-white-0);--brand-control-radio-dot-checked:var(--base-color-scale-green-5);--brand-control-radio-dot-checked-hover:#309a4d}.Primer_Brand__Checkbox-module__Checkbox-wrapper___qo8KL{grid-row:1;position:relative}.Primer_Brand__Checkbox-module__Checkbox___T8FJa{background-color:var(--brand-control-checkbox-bg-default);border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);cursor:pointer;border-radius:3px;outline:1px solid #0000;justify-content:center;align-items:center;width:20px;height:20px;margin:3px 0;transition:all .35s ease-out;display:inline-flex;box-shadow:0 0 0 3px #0000}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s{clip:rect(1px, 1px, 1px, 1px);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__Checkbox-module__Checkbox-checkmark___atiwt{height:var(--base-size-12);width:var(--base-size-12)}.Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:var(--brand-control-checkbox-fg-checked);stroke-dashoffset:111.46px;stroke-dasharray:111.46;transition:all .35s var(--brand-control-animation-easing)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa,.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k{background:var(--brand-control-checkbox-bg-checked);border-color:var(--brand-control-checkbox-border-checked)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:not(:checked):not([disabled])+.Primer_Brand__Checkbox-module__Checkbox___T8FJa:not(.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k):hover{background:var(--brand-control-checkbox-bg-hover);border-color:var(--brand-control-checkbox-border-hover)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked:not([disabled])+.Primer_Brand__Checkbox-module__Checkbox___T8FJa:hover{background:var(--brand-control-checkbox-bg-checked-hover);border-color:var(--brand-control-checkbox-border-checked-hover)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:not([disabled])+.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k:hover{background:var(--brand-control-checkbox-bg-indeterminate-hover);border-color:var(--brand-control-checkbox-border-indeterminate-hover)}.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k .Primer_Brand__Checkbox-module__Checkbox-checkmark___atiwt{fill:var(--brand-control-checkbox-fg-checked)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb,.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:var(--brand-control-checkbox-fg-checked);stroke-dashoffset:0}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:focus+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{box-shadow:0 0 0 3px var(--brand-control-color-focus)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked:focus+.Primer_Brand__Checkbox-module__Checkbox___T8FJa,.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:focus+.Primer_Brand__Checkbox-module__Checkbox--indeterminate___U5S6k{border-color:var(--brand-control-checkbox-border-checked)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s[disabled]+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;border-color:var(--brand-control-checkbox-border-unchecked-disabled);opacity:1;background-color:#0000}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s[disabled]:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{background-color:var(--brand-control-checkbox-bg-checked-disabled);border-color:var(--brand-control-checkbox-border-checked-disabled)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s[disabled]:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:var(--brand-control-checkbox-fg-checked-disabled)}@media (forced-colors:active){.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:focus+.Primer_Brand__Checkbox-module__Checkbox___T8FJa{outline:var(--brand-borderWidth-thin) solid Highlight;outline-offset:var(--base-size-2)}.Primer_Brand__Checkbox-module__Checkbox-input___sux6s:checked+.Primer_Brand__Checkbox-module__Checkbox___T8FJa .Primer_Brand__Checkbox-module__Checkbox-checkmark-path___qgsjb{stroke:highlight}.Primer_Brand__Checkbox-module__Checkbox___T8FJa{transition:none}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Checkbox-module__Checkbox___T8FJa,.Primer_Brand__Checkbox-module__Checkbox___T8FJa:before,.Primer_Brand__Checkbox-module__Checkbox___T8FJa:after,.Primer_Brand__Checkbox-module__Checkbox___T8FJa *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Select-module__Select___Jqn1f{appearance:none;color:var(--brand-control-color-fg-default);cursor:pointer;background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);line-height:var(--brand-text-lineHeight-200);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);border:none;grid-area:1/1/auto/-1;width:100%;transition-property:color,background-color,box-shadow,border-color}@media screen and (forced-colors:active){.Primer_Brand__Select-module__Select___Jqn1f:disabled{background-color:-moz-combobox}}.Primer_Brand__Select-module__Select___Jqn1f::placeholder{color:var(--brand-color-text-muted);opacity:1}.Primer_Brand__Select-module__Select___Jqn1f:focus-visible{border-color:var(--brand-control-color-focus);box-shadow:0 0 0 2px var(--brand-control-color-focus);outline:none}@media (forced-colors:active){.Primer_Brand__Select-module__Select___Jqn1f:focus-visible{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}.Primer_Brand__Select-module__Select___Jqn1f[disabled]{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-color-canvas-disabled);border-color:var(--brand-control-color-border-disabled);opacity:1}.Primer_Brand__Select-module__Select-wrapper--disabled___Ka43y.Primer_Brand__Select-module__Select-wrapper___iV0Tg:after{background-color:var(--brand-control-color-fg-disabled)}.Primer_Brand__Select-module__Select-wrapper--medium___xjmMc{height:var(--brand-control-medium-size)}.Primer_Brand__Select-module__Select-wrapper--medium___xjmMc:after{margin-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) / 2)}.Primer_Brand__Select-module__Select--medium___kckBr{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding-inline:var(--brand-control-medium-paddingInline-condensed);padding-block:0;padding-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-16))}.Primer_Brand__Select-module__Select-wrapper--large___Q4_2q{height:var(--brand-control-large-size)}.Primer_Brand__Select-module__Select-wrapper--large___Q4_2q:after{margin-inline-end:var(--base-size-8)}.Primer_Brand__Select-module__Select--large___A7u6F{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);padding-inline:var(--brand-control-large-paddingInline-condensed);padding-block:0;padding-inline-end:calc(var(--brand-control-large-paddingInline-condensed) + var(--base-size-16))}.Primer_Brand__Select-module__Select-wrapper___iV0Tg{border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);border-radius:6px;border-radius:var(--brand-borderRadius-medium,6px);font-family:var(--brand-body-fontFamily);grid-template-columns:minmax(0, auto) var(--base-size-16);display:inline-grid;position:relative}.Primer_Brand__Select-module__Select-wrapper___iV0Tg:after{content:"";width:var(--base-size-16);height:var(--base-size-16);pointer-events:none;background-color:var(--brand-control-color-fg-default);grid-area:1/2;place-self:center flex-end;position:absolute;right:0;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzU4NjA2OSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=) 0 0/contain no-repeat;mask:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iIzU4NjA2OSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40MjcgOS40MjdsMy4zOTYgMy4zOTZhLjI1MS4yNTEgMCAwMC4zNTQgMGwzLjM5Ni0zLjM5NkEuMjUuMjUgMCAwMDExLjM5NiA5SDQuNjA0YS4yNS4yNSAwIDAwLS4xNzcuNDI3ek00LjQyMyA2LjQ3TDcuODIgMy4wNzJhLjI1LjI1IDAgMDEuMzU0IDBMMTEuNTcgNi40N2EuMjUuMjUgMCAwMS0uMTc3LjQyN0g0LjZhLjI1LjI1IDAgMDEtLjE3Ny0uNDI3eiIgLz48L3N2Zz4=) 0 0/contain no-repeat}.Primer_Brand__Select-module__Select-wrapper--disabled___Ka43y{border-color:var(--brand-control-color-border-disabled)}.Primer_Brand__Select-module__Select-wrapper--fullWidth___oOOo4{width:100%}.Primer_Brand__Select-module__Select--success___pkmVg{border-color:var(--brand-color-success-fg)}.Primer_Brand__Select-module__Select--error___A9JuG{border-color:var(--brand-color-danger-fg)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Select-module__Select___Jqn1f,.Primer_Brand__Select-module__Select___Jqn1f:before,.Primer_Brand__Select-module__Select___Jqn1f:after,.Primer_Brand__Select-module__Select___Jqn1f *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__TextInput-module__TextInput___EtKj3{color:var(--brand-control-color-fg-default);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);line-height:var(--brand-text-lineHeight-100);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);border:none;transition-property:color,background-color,box-shadow;display:flex}.Primer_Brand__TextInput-module__TextInput___EtKj3::placeholder{color:var(--brand-color-text-muted);opacity:1}.Primer_Brand__TextInput-module__TextInput___EtKj3[disabled]{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-color-canvas-disabled);opacity:1}.Primer_Brand__TextInput-module__TextInput___EtKj3:focus{outline:none}.Primer_Brand__TextInput-module__TextInput-wrapper--small___IyT4V{height:var(--brand-control-small-size)}.Primer_Brand__TextInput-module__TextInput--small___jNp_Y{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding:var(--brand-control-small-paddingBlock) var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-wrapper--medium___K9iTj{height:var(--brand-control-medium-size)}.Primer_Brand__TextInput-module__TextInput--medium___kJrew{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding:var(--brand-control-medium-paddingBlock-normal) var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput--large___zpUvY{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);padding:var(--brand-control-large-paddingBlock-normal) var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-wrapper--large___lga4f{height:var(--brand-control-large-size)}.Primer_Brand__TextInput-module__TextInput--fullWidth___rbllM{width:100%}.Primer_Brand__TextInput-module__TextInput-wrapper--disabled___HWTx_{border-color:var(--brand-control-color-border-disabled)}.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu{font-family:var(--brand-body-fontFamily);border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);border-radius:var(--brand-borderRadius-medium);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);transition-property:border;display:inline-flex;position:relative}.Primer_Brand__TextInput-module__TextInput-wrapper--invisible___cKDcl{border-color:#0000}.Primer_Brand__TextInput-module__TextInput-wrapper--fullWidth___eclO4{width:100%;display:flex}.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu:not(.Primer_Brand__TextInput-module__TextInput-wrapper--fullWidth___eclO4){width:min-content}.Primer_Brand__TextInput-module__TextInput-wrapper--monospace___y1fd6{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu:focus-within{border-color:var(--brand-control-color-focus);box-shadow:0 0 0 1px var(--brand-control-color-focus);outline:none}@media (forced-colors:active){.Primer_Brand__TextInput-module__TextInput-wrapper___HgxNu:focus-within{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}.Primer_Brand__TextInput-module__TextInput-wrapper--success___g5ODK,.Primer_Brand__TextInput-module__TextInput-wrapper--success___g5ODK.Primer_Brand__TextInput-module__TextInput-wrapper--disabled___HWTx_{border-color:var(--brand-color-success-fg)}.Primer_Brand__TextInput-module__TextInput-wrapper--error___V7qtN,.Primer_Brand__TextInput-module__TextInput-wrapper--error___V7qtN.Primer_Brand__TextInput-module__TextInput-wrapper--disabled___HWTx_{border-color:var(--brand-color-danger-fg)}.Primer_Brand__TextInput-module__TextInput--has-leading-visual--small___Chfzr{padding-inline-start:calc(var(--brand-control-small-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-small-gap))}.Primer_Brand__TextInput-module__TextInput--has-leading-visual--medium___i7gLS{padding-inline-start:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-medium-gap))}.Primer_Brand__TextInput-module__TextInput--has-leading-visual--large___nCVT9{padding-inline-start:calc(var(--brand-control-large-paddingInline-condensed) + var(--base-size-20) + var(--brand-control-large-gap))}.Primer_Brand__TextInput-module__TextInput--has-trailing-visual--small___gl_37{padding-inline-end:calc(var(--brand-control-small-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-small-gap))}.Primer_Brand__TextInput-module__TextInput--has-trailing-visual--medium___pP4lM{padding-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-16) + var(--brand-control-medium-gap))}.Primer_Brand__TextInput-module__TextInput--has-trailing-visual--large___n1U0P{padding-inline-end:calc(var(--brand-control-medium-paddingInline-condensed) + var(--base-size-20) + var(--brand-control-medium-gap))}.Primer_Brand__TextInput-module__TextInput-leading-visual___tk7Yz,.Primer_Brand__TextInput-module__TextInput-trailing-visual___k0E6L{width:var(--base-size-16);height:100%;color:var(--brand-color-text-default);pointer-events:none;align-items:center;display:flex;position:absolute;top:0}.Primer_Brand__TextInput-module__TextInput-leading-visual--medium___BW5d2{left:var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-trailing-visual--medium___WMlar{right:var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-visual--small___im1Vd{left:var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-trailing-visual--small___cYDMo{right:var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-visual--large___LoDri{left:var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-trailing-visual--large___pdxBc{right:var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-visual-icon--medium___y_4Pu,.Primer_Brand__TextInput-module__TextInput-leading-visual-icon--small___IvacS{width:var(--base-size-16);height:var(--base-size-16)}.Primer_Brand__TextInput-module__TextInput-leading-visual-icon--large___VPOF7{width:var(--base-size-20);height:var(--base-size-20)}.Primer_Brand__TextInput-module__TextInput-leading-text___H5Cfr,.Primer_Brand__TextInput-module__TextInput-trailing-text___ikt8X{color:var(--brand-color-text-muted);pointer-events:none;white-space:nowrap;align-items:center;display:flex}.Primer_Brand__TextInput-module__TextInput-leading-text--disabled___APVY0,.Primer_Brand__TextInput-module__TextInput-trailing-text--disabled___oM2Ls{color:var(--brand-control-color-fg-disabled);background-color:var(--brand-control-color-canvas-disabled)}.Primer_Brand__TextInput-module__TextInput-leading-text___H5Cfr{border-top-left-radius:6px;border-top-left-radius:var(--brand-borderRadius-medium,6px);border-bottom-left-radius:6px;border-bottom-left-radius:var(--brand-borderRadius-medium,6px);border-right:0}.Primer_Brand__TextInput-module__TextInput-trailing-text___ikt8X{border-top-right-radius:6px;border-top-right-radius:var(--brand-borderRadius-medium,6px);border-bottom-right-radius:6px;border-bottom-right-radius:var(--brand-borderRadius-medium,6px);border-left:0}.Primer_Brand__TextInput-module__TextInput-leading-text-inner___wsz6j,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner___hHCPx{color:var(--brand-color-text-muted);display:inline-flex}.Primer_Brand__TextInput-module__TextInput-leading-text-inner--medium___B7Rra,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner--medium___P9cYA{padding-inline:var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-text-inner--small___scMhg,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner--small___B4sQm{padding-inline:var(--brand-control-small-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-text-inner--large___HfLcI,.Primer_Brand__TextInput-module__TextInput-trailing-text-inner--large___LTt33{padding-inline:var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__TextInput-module__TextInput-leading-text-inner___wsz6j{border-right:1px solid var(--brand-color-border-default)}.Primer_Brand__TextInput-module__TextInput-trailing-text-inner___hHCPx{border-left:1px solid var(--brand-color-border-default)}.Primer_Brand__TextInput-module__TextInput--has-leading-text___u7qke{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.Primer_Brand__TextInput-module__TextInput--has-trailing-text___Rsoog{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.Primer_Brand__TextInput-module__TextInput-leading-text--success___LLFx7,.Primer_Brand__TextInput-module__TextInput-trailing-text--success___EfLVd{border-color:var(--brand-color-success-fg)}.Primer_Brand__TextInput-module__TextInput-leading-text--error___TM77D,.Primer_Brand__TextInput-module__TextInput-trailing-text--error___R96jr{border-color:var(--brand-color-danger-fg)}@media (prefers-reduced-motion:reduce){.Primer_Brand__TextInput-module__TextInput___EtKj3,.Primer_Brand__TextInput-module__Checkbox___TOylA:before,.Primer_Brand__TextInput-module__Checkbox___TOylA:after,.Primer_Brand__TextInput-module__Checkbox___TOylA *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Textarea-module__Textarea___xmKD5{color:var(--brand-control-color-fg-default);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);line-height:var(--brand-text-lineHeight-100);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);border:none;transition-property:color,background-color,box-shadow;display:flex}.Primer_Brand__Textarea-module__Textarea___xmKD5::placeholder{color:var(--brand-color-text-muted);opacity:1}.Primer_Brand__Textarea-module__Textarea___xmKD5[disabled]{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-color-canvas-disabled);opacity:1;resize:none}.Primer_Brand__Textarea-module__Textarea___xmKD5:focus{outline:none}.Primer_Brand__Textarea-module__Textarea-resize--vertical___uAPaM{resize:vertical}.Primer_Brand__Textarea-module__Textarea-resize--horizontal___gT0d4{resize:horizontal}.Primer_Brand__Textarea-module__Textarea-resize--none___VNofG{resize:none}.Primer_Brand__Textarea-module__Textarea-resize--both___bDJp5{resize:both}.Primer_Brand__Textarea-module__Textarea--medium___pMZGb{font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);padding:var(--brand-control-medium-paddingBlock-normal) var(--brand-control-medium-paddingInline-condensed)}.Primer_Brand__Textarea-module__Textarea--large___wCPXA{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);padding:var(--brand-control-large-paddingBlock-normal) var(--brand-control-large-paddingInline-condensed)}.Primer_Brand__Textarea-module__Textarea--fullWidth___lPWcQ{width:100%}.Primer_Brand__Textarea-module__Textarea-wrapper--disabled___fg8We{border-color:var(--brand-control-color-border-disabled)}.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG{font-family:var(--brand-body-fontFamily);border:solid 1px var(--brand-control-color-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-color-border-default);border-radius:var(--brand-borderRadius-medium);transition:var(--brand-control-animation-duration) var(--brand-control-animation-easing);transition-property:border;display:inline-flex;position:relative}.Primer_Brand__Textarea-module__Textarea-wrapper--invisible___fF78K{border-color:#0000}.Primer_Brand__Textarea-module__Textarea-wrapper--fullWidth___EtLL9{display:flex}.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG:not(.Primer_Brand__Textarea-module__Textarea-wrapper--fullWidth___EtLL9){width:min-content}.Primer_Brand__Textarea-module__Textarea-wrapper--monospace___lA41d{font-family:var(--brand-fontStack-monospace)}.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG:focus-within{border-color:var(--brand-control-color-focus);box-shadow:0 0 0 1px var(--brand-control-color-focus);outline:none}@media (forced-colors:active){.Primer_Brand__Textarea-module__Textarea-wrapper___A4lsG:focus-within{outline:var(--brand-borderWidth-thick) solid Highlight;outline-offset:var(--base-size-2)}}.Primer_Brand__Textarea-module__Textarea-wrapper--success___RaDVX,.Primer_Brand__Textarea-module__Textarea-wrapper--success___RaDVX.Primer_Brand__Textarea-module__Textarea-wrapper--disabled___fg8We{border-color:var(--brand-color-success-fg)}.Primer_Brand__Textarea-module__Textarea-wrapper--error___zcHSQ,.Primer_Brand__Textarea-module__Textarea-wrapper--error___zcHSQ.Primer_Brand__Textarea-module__Textarea-wrapper--disabled___fg8We{border-color:var(--brand-color-danger-fg)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Textarea-module__Textarea___xmKD5,.Primer_Brand__Textarea-module__Textarea___xmKD5:before,.Primer_Brand__Textarea-module__Textarea___xmKD5:after,.Primer_Brand__Textarea-module__Textarea___xmKD5 *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Radio-module__Radio-wrapper___Gt9uM{-webkit-user-select:none;user-select:none;cursor:pointer;grid-row:1;position:relative}.Primer_Brand__Radio-module__Radio___JycTo{background-color:var(--brand-control-radio-bg-default);border:solid 1px var(--brand-control-radio-border-default);border:solid var(--brand-borderWidth-thin,1px) var(--brand-control-radio-border-default);cursor:pointer;margin:3px 0;border-radius:50%;outline:none;justify-content:center;align-items:center;width:20px;height:20px;margin:3px 3px 0 5px;display:inline-flex;position:relative;box-shadow:0 0 0 3px #0000}.Primer_Brand__Radio-module__Radio___JycTo:before{content:"";pointer-events:none;border:var(--brand-borderWidth-thin) solid transparent;border-radius:50%;width:24px;height:24px;position:absolute;inset:-4px -2px -2px -4px}.Primer_Brand__Radio-module__Radio-input___n3jX4{clip:rect(1px, 1px, 1px, 1px);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__Radio-module__Radio-dot___rmEAJ{border-color:var(--brand-control-radio-dot-checked);background:var(--brand-control-radio-dot-checked);opacity:0;width:12px;height:12px;transition:transform .35s var(--brand-animation-easing-glide), opacity .35s var(--brand-animation-easing-glide);border-radius:50%;display:block;position:absolute;transform:scale(.7)}@media (prefers-reduced-motion){.Primer_Brand__Radio-module__Radio-dot___rmEAJ{transition:none}}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked+.Primer_Brand__Radio-module__Radio___JycTo{background-color:var(--brand-control-radio-bg-checked);border-color:var(--brand-control-radio-border-checked)}.Primer_Brand__Radio-module__Radio-input___n3jX4:not(:checked):not([disabled])+.Primer_Brand__Radio-module__Radio___JycTo:hover{background-color:var(--brand-control-radio-bg-hover);border-color:var(--brand-control-radio-border-hover)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked:not([disabled])+.Primer_Brand__Radio-module__Radio___JycTo:hover{background-color:var(--brand-control-radio-bg-checked-hover);border-color:var(--brand-control-radio-border-checked-hover)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked:not([disabled])+.Primer_Brand__Radio-module__Radio___JycTo:hover .Primer_Brand__Radio-module__Radio-dot___rmEAJ{background:var(--brand-control-radio-dot-checked-hover);border-color:var(--brand-control-radio-dot-checked-hover)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked+.Primer_Brand__Radio-module__Radio___JycTo .Primer_Brand__Radio-module__Radio-dot___rmEAJ{opacity:1;transform:scale(1)}.Primer_Brand__Radio-module__Radio-input___n3jX4:focus+.Primer_Brand__Radio-module__Radio___JycTo{box-shadow:0 0 0 4px var(--brand-control-color-focus)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked:focus+.Primer_Brand__Radio-module__Radio___JycTo{border-color:var(--brand-control-radio-border-checked)}.Primer_Brand__Radio-module__Radio-input___n3jX4[disabled]+.Primer_Brand__Radio-module__Radio___JycTo,.Primer_Brand__Radio-module__Radio-input___n3jX4[disabled]:checked+.Primer_Brand__Radio-module__Radio___JycTo{-webkit-text-fill-color:var(--brand-control-color-fg-disabled);color:var(--brand-control-color-fg-disabled);cursor:not-allowed;background-color:var(--brand-control-radio-bg-disabled);border-color:var(--brand-control-radio-border-disabled);opacity:1}.Primer_Brand__Radio-module__Radio-input___n3jX4[disabled]:checked+.Primer_Brand__Radio-module__Radio___JycTo .Primer_Brand__Radio-module__Radio-dot___rmEAJ{background:var(--brand-control-color-fg-disabled);border-color:var(--brand-control-color-fg-disabled)}@media (forced-colors:active){.Primer_Brand__Radio-module__Radio-input___n3jX4:focus+.Primer_Brand__Radio-module__Radio___JycTo{outline:var(--brand-borderWidth-thin) solid Highlight;outline-offset:var(--base-size-4)}.Primer_Brand__Radio-module__Radio-input___n3jX4:checked+.Primer_Brand__Radio-module__Radio___JycTo .Primer_Brand__Radio-module__Radio-dot___rmEAJ{background-color:highlight}}@media (prefers-reduced-motion:reduce){.Primer_Brand__Radio-module__Radio___JycTo,.Primer_Brand__Radio-module__Radio___JycTo:before,.Primer_Brand__Radio-module__Radio___JycTo:after,.Primer_Brand__Radio-module__Radio___JycTo *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__FormControl-module__FormControl___ZJtXy{font-family:var(--brand-body-fontFamily);gap:var(--base-size-8);flex-direction:column;display:inline-flex}.Primer_Brand__FormControl-module__FormControl--fullWidth___QyLCS{width:100%}.Primer_Brand__FormControl-module__FormControl--checkbox___R2ng7{grid-template-columns:auto 1fr;display:grid}.Primer_Brand__FormControl-module__FormControl--border___CRSaq{border:1px solid var(--brand-control-color-border-default);border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-12)}.Primer_Brand__FormControl-module__FormControl-label___meeuB{color:var(--brand-color-text-default);font-weight:var(--base-text-weight-medium);font-family:var(--brand-body-fontFamily)}.Primer_Brand__FormControl-module__FormControl-label--visually-hidden___cFizI{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.Primer_Brand__FormControl-module__FormControl-label--medium___inrKd{letter-spacing:var(--brand-text-letterSpacing-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__FormControl-module__FormControl-label--large___okLn6{letter-spacing:var(--brand-text-letterSpacing-300);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300)}.Primer_Brand__FormControl-module__FormControl-label--checkbox___x2U9X{cursor:pointer;font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-medium);line-height:var(--base-size-24);width:100%;position:relative;top:1px}.Primer_Brand__FormControl-module__FormControl-control--radio___aSHRG{margin:2px 0 0}.Primer_Brand__FormControl-module__FormControl-hint___dbP0O{grid-column:1/3;display:block}.Primer_Brand__FormControl-module__FormControl-validation___vG5tm{gap:var(--base-size-4);align-items:center;display:flex}.Primer_Brand__FormControl-module__FormControl-validation--success___fGV4L{color:var(--brand-color-success-fg)}.Primer_Brand__FormControl-module__FormControl-validation--error___DJVR5{color:var(--brand-color-danger-fg)}.Primer_Brand__FormControl-module__FormControl-validation-success-icon___UgUzb,.Primer_Brand__FormControl-module__FormControl-validation-error-icon___o3GQW{display:flex}.Primer_Brand__FormControl-module__FormControl-validation--animate-in___C_pxB{animation:.17s cubic-bezier(.44,.74,.36,1) Primer_Brand__FormControl-module__FormControlValidationFadeIn___hRw_R}@keyframes Primer_Brand__FormControl-module__FormControlValidationFadeIn___hRw_R{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.Primer_Brand__FormControl-module__FormControl-validation-checkbox___Cigqb{grid-column:1/3}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK{z-index:90;background:var(--brand-color-canvas-default);height:var(--SubdomainNavBar-height);font-weight:550;position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK:after{content:"";z-index:3;height:var(--brand-borderWidth-thin);background-color:var(--brand-SubdomainNavBar-border-nav-default);pointer-events:none;position:absolute;inset-block-start:100%;inset-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container___aE8uv{--SubdomainNavBar-height:var(--base-size-64);z-index:90}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container___aE8uv{--SubdomainNavBar-height:calc(var(--base-size-64) - var(--base-size-8))}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container___aE8uv:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container--fixed___ZhyZf){position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-outer-container--fixed___ZhyZf{position:fixed;top:0;left:0;right:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{padding:4px 28px;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--centered___FXUTh{max-width:1280px;margin:0 auto}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{padding:4px 32px}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--search-open___nhMNU{animation:.15s Primer_Brand__SubdomainNavBar-module__fade-out___fhdxi}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{align-items:center;gap:var(--base-size-8);max-width:340px;color:var(--brand-color-text-default);padding:0;padding:var(--base-size-16) 0;margin:0;list-style-type:none;display:inline-flex}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{gap:var(--base-size-16)}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{color:var(--brand-color-text-default);align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_{position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-back-arrow___OOrj8{color:var(--brand-color-text-muted);opacity:0;transform:translate(var(--base-size-4), -50%);transition:opacity var(--brand-animation-duration-fast), transform var(--brand-animation-duration-fast) ease;display:flex;position:absolute;inset-block-start:50%;inset-inline-start:calc(-1 * var(--base-size-24) + var(--base-size-4))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_:hover .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-back-arrow___OOrj8{opacity:1;transform:translateY(-50%)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_ svg{width:32px;height:32px}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{line-height:var(--base-size-32);white-space:nowrap;padding-inline-end:var(--base-size-16);-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-featured___i_EMH .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-prefix___MCu96{color:var(--brand-color-text-default)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-label___C3mii{color:inherit}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{align-self:stretch;align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child:after{content:"";box-sizing:border-box;width:var(--brand-borderWidth-thin);height:var(--SubdomainNavBar-height);margin-inline:var(--base-size-16);background-color:var(--brand-color-border-muted);flex:none;align-self:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{align-items:center;min-width:0;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{margin-inline-end:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{margin-inline-start:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn{flex:1 1 0;align-items:center;min-width:0;margin:0;padding:0;list-style-type:none;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{list-style-type:none}@media screen and (width<=767px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--invisible___HnkQO{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--visible___ZeoFv{margin:0;padding:0;display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{box-sizing:border-box;width:100%;padding-block:var(--base-size-16);padding-inline:var(--base-size-16);flex:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{margin-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{margin-inline-start:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{top:var(--SubdomainNavBar-height);z-index:2;background-color:var(--brand-color-canvas-default);width:100%;max-height:calc(100vh - var(--SubdomainNavBar-height) - 0px);max-height:calc(100vh - var(--SubdomainNavBar-height) - var(--SubdomainNavBar-menu-offset-block-start,0px));border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);animation:.5s Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g;animation-timing-function:var(--brand-animation-easing-default);flex-direction:column;justify-content:flex-start;display:flex;position:absolute;left:0;right:0;overflow-y:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper--close___NzelD{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer___VLcHd{flex-direction:column;flex:none;width:100%;display:flex}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow___OXKBt{min-width:0;margin:0 var(--base-size-24) 0 0;flex:1 1 0;align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{min-width:0;block-size:var(--base-size-48);max-block-size:var(--base-size-48);flex-wrap:nowrap;flex:auto;align-items:center;margin:0;padding:0;display:flex;overflow:hidden}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9{white-space:nowrap;flex:none}@media screen and (width<=767px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9{animation-name:Primer_Brand__SubdomainNavBar-module__fade-in-down-staggered___zQfEQ;animation-duration:.5s;animation-delay:calc(var(--animation-order) * 80ms);animation-fill-mode:both;animation-timing-function:var(--brand-animation-easing-default)}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item--overflowed___vVhQg{visibility:hidden;pointer-events:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item--overflow___FXC7u{visibility:hidden;pointer-events:none;flex:none;align-items:center;display:flex;position:absolute;inset-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow--has-overflow___zoCZu .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item--overflow___FXC7u{visibility:visible;pointer-events:auto;position:relative}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{align-items:center;gap:var(--base-size-8);color:var(--brand-color-text-default);font-family:var(--brand-heading-fontFamily);font-weight:var(--base-text-weight-normal);flex-direction:row;-webkit-text-decoration:none;text-decoration:none;display:flex;position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-text___a540y{position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{align-items:center;gap:var(--base-size-8);display:inline-flex}@media screen and (width<=767px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link--title___ApFQt{font-weight:var(--base-text-weight-medium)}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{width:100%;min-height:var(--base-size-40);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-color-text-muted);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200);transition:background-color var(--brand-animation-easing-default) .25s}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible{color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible{box-shadow:inset 0 0 0 var(--brand-borderWidth-thick) var(--brand-color-focus);outline:none}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2{display:none}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2{cursor:pointer;appearance:none;align-items:center;gap:var(--base-size-4);background-color:#0000;border:none;display:inline-flex}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu___RXj_t{z-index:100;background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);animation:Primer_Brand__SubdomainNavBar-module__fade-in-down-overflow____WJvz var(--brand-animation-duration-faster);animation-timing-function:var(--brand-animation-easing-default);min-width:calc(var(--base-size-128) + var(--base-size-32));transform:translateY(calc(0px - var(--base-size-4)));border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:var(--brand-borderRadius-medium);border-end-start-radius:var(--brand-borderRadius-medium);position:absolute;right:auto;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-list___EbzqG{grid-gap:var(--brand-borderWidth-thin);gap:var(--brand-borderWidth-thin);padding:var(--base-size-8);width:100%;margin:0;list-style-type:none;display:grid}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{flex:0 auto;align-items:center;min-width:0;margin-left:auto;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{box-sizing:border-box;align-items:center;min-width:0;display:flex}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{--SubdomainNavBar-search-input-width:calc(var(--base-size-128) * 2 + var(--base-size-24));flex:0 9999 var(--SubdomainNavBar-search-input-width);width:var(--SubdomainNavBar-search-input-width);max-width:100%;min-width:calc(var(--base-size-128) + var(--base-size-32))}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J{cursor:pointer;appearance:none;border:var(--brand-borderWidth-thick) solid transparent;color:var(--brand-color-text-default);width:calc(48px - var(--brand-borderWidth-thick));height:calc(48px - var(--brand-borderWidth-thick));transition:border .25s var(--brand-animation-easing-default), box-shadow .25s ease;border-radius:var(--brand-borderRadius-medium);background-color:#0000;justify-content:center;align-items:center;gap:0;display:flex;position:relative;box-shadow:0 0 0 2px #0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J svg{width:24px;height:24px}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{cursor:pointer;appearance:none;justify-content:space-between;align-items:center;gap:var(--base-size-16);width:100%;block-size:var(--base-size-32);min-block-size:var(--base-size-32);padding:var(--base-size-4) var(--base-size-4) var(--base-size-4) calc(var(--base-size-8) + var(--base-size-2));color:var(--brand-color-text-muted);background-color:var(--brand-color-canvas-subtle);border-radius:var(--brand-borderRadius-medium);font-family:var(--brand-body-fontFamily);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default), box-shadow var(--brand-animation-duration-fast) var(--brand-animation-easing-default);border:0;display:flex;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7:hover{box-shadow:inset 0 0 0 var(--brand-borderWidth-thin) var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7:active{box-shadow:inset 0 0 0 var(--brand-borderWidth-thin) var(--brand-color-border-default)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx{align-items:center;gap:var(--base-size-8);min-width:0;color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-normal);white-space:nowrap;text-overflow:ellipsis;line-height:1.2;display:inline-flex;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx svg{flex:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx span{text-overflow:ellipsis;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-shortcut___M8tMd{min-width:var(--base-size-24);padding-inline:var(--base-size-8);color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-radius:calc(var(--brand-borderRadius-medium) / 2);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-normal);flex:none;justify-content:center;align-self:stretch;align-items:center;line-height:1.6;display:inline-flex}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{flex:0 0 var(--base-size-48);width:var(--base-size-48);justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:var(--base-size-32);padding:var(--base-size-8);background-color:#0000;justify-content:center;gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx{gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx span,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-shortcut___M8tMd{display:none}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J{align-self:center;align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-icon___dXvjL{gap:calc(var(--base-size-4) - var(--brand-borderWidth-thin));flex-direction:column;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-label___iD85T{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{background-color:var(--brand-color-text-default);width:22px;height:2px;margin:var(--base-size-4) auto;border-radius:var(--brand-borderRadius-large);display:block}@media (prefers-reduced-motion:no-preference){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{transition-timing-function:var(--brand-animation-easing-default);transition-property:opacity,transform;transition-duration:.5s}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform-origin:100% 100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform-origin:100% 0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform:rotate(-45deg)translateY(-3px)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(2){opacity:0;transform:scale(0)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform:rotate(45deg)translateY(3px)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT{z-index:3;background-color:var(--brand-color-canvas-muted);position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT:focus-visible{box-shadow:none;outline:none;transition:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT:focus-visible:before{content:"";z-index:2;pointer-events:none;border:var(--brand-borderWidth-thick) solid var(--brand-color-focus);position:absolute;inset:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT:after{content:"";z-index:1;height:calc(var(--brand-borderWidth-thin) * 2);background-color:var(--brand-color-canvas-muted);position:absolute;inset-block-end:calc(var(--brand-borderWidth-thin) * -2);inset-inline:0}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J:hover{border:var(--brand-borderWidth-thick) solid var(--brand-SubdomainNavBar-border-button-hover);background-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button___hMy4J:active{box-shadow:0 0 0 1px var(--brand-SubdomainNavBar-border-button-hover);background-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{display:none}}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{flex:none;align-self:stretch;position:relative}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{--SubdomainNavBar-tablet-search-width:calc(var(--base-size-128) * 2 + var(--base-size-2));flex:0 0 var(--SubdomainNavBar-tablet-search-width);width:var(--SubdomainNavBar-tablet-search-width);padding-inline:var(--base-size-8);border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{justify-content:center;align-self:stretch;align-items:center;gap:var(--base-size-8);width:max-content;min-width:calc(var(--base-size-64) + var(--base-size-32));height:100%;padding-inline:var(--base-size-16);color:var(--brand-color-text-default);border:0;border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);border-radius:0;flex-direction:row;flex:none;overflow:visible}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-label___iD85T{white-space:nowrap;align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-icon___dXvjL{width:var(--base-size-16);height:var(--base-size-16);flex:none;justify-content:center;align-items:stretch;overflow:visible}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-icon___dXvjL .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{width:var(--base-size-16);height:var(--base-size-2);transform-origin:50%;margin:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform:translateY(calc(var(--base-size-6) - var(--brand-borderWidth-thin))) rotate(45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform:translateY(calc(var(--brand-borderWidth-thin) - var(--base-size-6))) rotate(-45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{inset-inline:0;top:var(--SubdomainNavBar-height);z-index:2;box-sizing:border-box;width:100%;max-height:calc(100vh - var(--SubdomainNavBar-height) - 0px);max-height:calc(100vh - var(--SubdomainNavBar-height) - var(--SubdomainNavBar-menu-offset-block-start,0px));background-color:var(--brand-color-canvas-default);border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);animation:Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g var(--brand-animation-duration-default);animation-timing-function:var(--brand-animation-easing-default);flex-direction:column;justify-content:flex-start;display:flex;position:absolute;overflow-y:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{width:max(100%, calc(var(--base-size-128) * 3));min-width:0;inset-inline:auto 0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper--close___NzelD{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--visible___ZeoFv{grid-gap:var(--brand-borderWidth-thin);gap:var(--brand-borderWidth-thin);padding:var(--base-size-8) var(--base-size-16);margin:0;display:grid}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer___VLcHd{flex-direction:column;flex:none;width:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{box-sizing:border-box;width:100%;min-height:var(--base-size-40);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-color-text-muted);background-color:var(--brand-color-canvas-default);border-radius:var(--brand-borderRadius-medium);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx){width:100%;height:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{padding:var(--base-size-8) var(--base-size-12)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{background-color:#0000;border-radius:0;width:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:active>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc[aria-current]:not([aria-current=false])>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{background-color:#0000;outline:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:active,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc[aria-current]:not([aria-current=false]){color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible{box-shadow:inset 0 0 0 var(--brand-borderWidth-thick) var(--brand-color-focus);outline:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link--title___ApFQt{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{box-sizing:border-box;width:100%;height:auto;padding:var(--base-size-16);flex:none;margin-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{width:100%;height:auto;padding:0;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{box-sizing:border-box;width:100%;margin-block:var(--base-size-24);padding-inline:var(--base-size-16);flex-direction:column}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer--has-leading-item___WS7Rf,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list--visible___ZeoFv,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper-footer___VLcHd .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{gap:var(--base-size-16);align-items:center;min-width:0;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{gap:var(--base-size-8);min-width:0;display:flex}@media screen and (width<=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area--visible___fLvbf{z-index:99;width:100%;height:auto;animation-name:Primer_Brand__SubdomainNavBar-module__fade-in-down-staggered___zQfEQ;animation-duration:.5s;animation-delay:.8s;animation-fill-mode:both;animation-timing-function:var(--brand-animation-easing-default);display:flex;left:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--search-open___nhMNU .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area--visible___fLvbf{display:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{box-sizing:border-box;width:100%;margin-block:var(--base-size-24);padding-inline:var(--base-size-24);flex-direction:column;min-width:0}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-cta-button___g_9BM{white-space:nowrap}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO{top:var(--SubdomainNavBar-height);height:auto;max-height:calc(100vh - var(--SubdomainNavBar-height) - 0px);max-height:calc(100vh - var(--SubdomainNavBar-height) - var(--SubdomainNavBar-menu-offset-block-start,0px))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-backdrop___sLFAC{inset-block-start:calc(var(--SubdomainNavBar-height) + 0px);z-index:1;background-color:var(--brand-SubdomainNavBar-searchDialog-backdropColor);animation:Primer_Brand__SubdomainNavBar-module__fade-in___u4FB2 var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);position:fixed;inset-block-start:calc(var(--SubdomainNavBar-height) + var(--SubdomainNavBar-menu-offset-block-start,0px));inset-block-end:0;inset-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container--search-open___nhMNU{animation:none}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK{--SubdomainNavBar-mobile-control-size:var(--base-size-48)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{gap:0;max-width:none;height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li{height:100%;padding-inline:0 var(--base-size-16);align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{width:auto;padding-inline:var(--base-size-16) var(--base-size-8);justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_{justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_ svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{padding-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2>*{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{height:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{flex:0 0 var(--SubdomainNavBar-mobile-control-size);width:var(--SubdomainNavBar-mobile-control-size);border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);justify-content:center;height:100%;padding-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{box-sizing:border-box;flex:0 0 var(--SubdomainNavBar-mobile-control-size);width:var(--SubdomainNavBar-mobile-control-size);height:100%;padding-inline:var(--base-size-16);border-radius:0;flex-direction:column;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-mobile-menu-button___CTbHW{gap:calc(var(--base-size-4) - var(--brand-borderWidth-thin));border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF{width:var(--base-size-16);height:var(--base-size-2);transform-origin:50%;margin:0 auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:first-of-type{transform:translateY(calc(var(--base-size-6) - var(--brand-borderWidth-thin))) rotate(45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button--close___I0UtT .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-button-bar___cUVZF:nth-of-type(3){transform:translateY(calc(var(--brand-borderWidth-thin) - var(--base-size-6))) rotate(-45deg)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{padding:var(--base-size-16);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link--title___ApFQt{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-menu-wrapper___b2uqO .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area-inner___dbpYv{padding-inline:var(--base-size-16)}}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{max-width:none;height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5{gap:0;max-width:none;height:100%;padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li{height:100%;padding-inline:0 var(--base-size-16);border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);align-items:center;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{width:auto;padding-inline:var(--base-size-16) var(--base-size-8);border-inline-end:0;justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child{padding-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-area___W8IC5>li:first-child:after{margin-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-title___JWpl2 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-item___CclaY{padding-inline:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_{justify-content:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-logo-mark___pMn2_ svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2{padding-inline-end:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title___Zm_g2>*{font-size:var(--base-size-16);line-height:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow___OXKBt,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{height:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-trailing-component___zpwkV{padding-inline:var(--base-size-16);margin-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{block-size:100%;max-block-size:100%;align-items:stretch;margin:0;padding-inline-start:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-overflow___OXKBt{margin:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9{align-items:center;height:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc{height:100%;padding:0 var(--base-size-16);color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-200);align-items:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2{padding-inline:var(--base-size-4)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{gap:var(--base-size-4);padding:var(--base-size-4) var(--base-size-12);border-radius:var(--brand-borderRadius-full);background-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:hover>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:active>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc[aria-current]:not([aria-current=false])>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:hover>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:active>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2[aria-expanded=true]>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{background-color:var(--brand-SubdomainNavBar-color-link-bgColor)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:focus-visible{outline:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc:focus-visible>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2:focus-visible>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}@media (prefers-reduced-motion:no-preference){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list-item___sz8e9:not(.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-overflow-menu-item___sI1rx)>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link___XmtPc>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-more-link___GR7D2>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-link-content___JKou9{transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default)}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{height:100%;padding-inline:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger--has-trailing-item___sHQYt{border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area___MbQys{padding-inline:var(--base-size-16);align-items:center}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-button-area--has-leading-item___HsvBF{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=63.25rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{--SubdomainNavBar-search-input-width:max(calc(var(--base-size-128) + var(--base-size-32)), min(28.5vw, calc(var(--base-size-128) * 3 + var(--base-size-36))));align-self:stretch}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-primary-nav___QwOCp{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);height:calc(var(--SubdomainNavBar-height) + var(--base-size-48))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp:after{inset-block-start:var(--SubdomainNavBar-height)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:var(--SubdomainNavBar-height);display:grid}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--has-primary-nav___QwOCp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y{grid-template-rows:var(--SubdomainNavBar-height) var(--base-size-48)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-title-navigation___QI1qZ{grid-area:1/1;min-width:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav___rZwCn{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);grid-area:2/1/auto/-1;min-width:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-primary-nav-list___iQd2r{padding-inline-start:calc(var(--base-size-64) + var(--brand-borderWidth-thin))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-leading-component___qa6xA{border-inline-start:0;grid-area:1/2;justify-self:start}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-inner-container___kdy5Y>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-secondary-nav___WHTTz{grid-area:1/3}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:var(--base-size-32);padding:var(--base-size-8);background-color:#0000;justify-content:center;gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder___lFmsx{gap:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-placeholder-text___W96nO,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button-shortcut___M8tMd{display:none}@media screen and (width>=48rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-trigger___WyUIj{flex:0 0 var(--base-size-48);width:var(--base-size-48);min-width:var(--base-size-48);padding-inline:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar--variant-default___jNIQp .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-button____QKi7{width:100%;block-size:100%;padding-inline:var(--base-size-16);border-radius:0}}@media screen and (width>=1024px){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-cta-button--secondary___P0FJH{display:inline-flex}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-form___zoZB5{width:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-area___DttZX{align-items:center;gap:var(--base-size-8);width:100%;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ{cursor:pointer;appearance:none;min-block-size:var(--base-size-32);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle);border-radius:var(--brand-borderRadius-medium);font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-100);font-weight:var(--base-text-weight-medium);line-height:var(--base-size-14);letter-spacing:var(--brand-text-letterSpacing-100);border:0;flex:none;justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ:hover{background-color:var(--brand-color-canvas-inset)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog-control-area___KlFbq{height:var(--base-size-40);background:0 0;align-items:center;max-width:none;margin:0;padding:0;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-text-input___kDY_0{border-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-area___y0BAA{width:100%}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-container___kow2P{padding:var(--base-size-24);background-color:var(--base-color-scale-white-0);border-radius:var(--brand-borderRadius-large);width:80%;max-width:570px;height:70vh;max-height:514px;margin:0 auto;animation:.5s Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g;box-shadow:0 8px 24px #01040926}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results___haCH9{padding:0 var(--base-size-24) 0 0;height:90%;margin:0;list-style:none;overflow-y:scroll}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-heading___FTzyR{font-weight:var(--brand-heading-weight-600);font-size:var(--base-size-20);line-height:var(--base-size-24);margin-bottom:var(--base-size-20);padding:0 var(--base-size-8);color:var(--base-color-scale-black-0);display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-list___vCi4S{margin:0;padding:0;list-style:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec{margin-block-start:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-heading___wULje{margin:0 0 var(--base-size-20);padding:0 var(--base-size-8);color:var(--brand-color-text-muted);font-weight:var(--brand-heading-weight-600);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z{padding:var(--base-size-16) var(--base-size-8);border-bottom:1px solid #b7bfc7;border-bottom:solid var(--brand-borderWidth-thin,1px) var(--brand-SubdomainNavBar-search-results-border-default,#b7bfc7)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a[aria-selected=true]{outline:var(--brand-color-focus) auto var(--brand-borderWidth-thick)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd{letter-spacing:var(--brand-heading-letterSpacing-400);font-size:var(--brand-text-size-400)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a{color:var(--base-color-scale-black-0);margin:0 0 var(--base-size-12);font-size:var(--base-size-16);font-weight:var(--brand-heading-weight-400);font-family:var(--brand-heading-fontFamily);line-height:var(--brand-text-lineHeight-400);-webkit-text-decoration:none;text-decoration:none;display:block}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a svg{flex:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-desc___Rb5Tm{color:var(--base-color-scale-black-0)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5{inset-block-start:calc(var(--base-size-64) + var(--base-size-8));inset-block-end:auto;inset-inline:calc(var(--base-size-64) + var(--base-size-8));z-index:99;width:min(calc(100vw - ((var(--base-size-64) + var(--base-size-8)) * 2)), calc((var(--base-size-128) * 6) + var(--base-size-36)));max-height:calc(100vh - ((var(--base-size-64) + var(--base-size-8)) * 2));height:auto;padding:var(--base-size-16);color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-large);box-shadow:0 0 calc(var(--base-size-32) + var(--base-size-2)) var(--brand-SubdomainNavBar-searchDialog-shadowColor);margin-inline:auto;position:fixed;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog--has-results___fcWO5{padding-block-end:var(--base-size-32)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5::backdrop{background-color:var(--brand-SubdomainNavBar-searchDialog-backdropColor);-webkit-backdrop-filter:blur(var(--base-size-24));backdrop-filter:blur(var(--base-size-24))}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-input-area___DttZX{gap:var(--base-size-16)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-form___zoZB5{min-width:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-form___zoZB5 section>span:focus-within{box-shadow:none;border-color:#0000}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-text-input___kDY_0{color:var(--brand-color-text-default);font-size:calc(var(--base-size-16) + var(--base-size-2));font-weight:var(--base-text-weight-medium);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-close-button___aVOiQ{background-color:var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-area--visible___lo6ji{border-block-start:var(--brand-borderWidth-thin) dashed var(--brand-color-border-muted);margin-block-start:var(--base-size-24);padding-block-start:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-container___kow2P{width:100%;max-width:none;height:auto;max-height:calc(100vh - (((var(--base-size-64) + var(--base-size-8)) * 2) + var(--base-size-128)));box-shadow:none;background-color:#0000;border-radius:0;margin:0;padding:0;animation:none;overflow-y:auto}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results___haCH9{height:auto;margin:0;padding:0;overflow:visible}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results-heading___FTzyR,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-heading___wULje{color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);font-weight:var(--brand-heading-weight-600);line-height:var(--brand-text-lineHeight-100);margin-block-end:var(--base-size-20);padding:0}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec+.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group___HQ5ec{margin-block-start:var(--base-size-24)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z{padding:var(--base-size-16) var(--base-size-4);border-block-end:0;border-block-start:var(--brand-borderWidth-thin) dashed var(--brand-color-border-muted)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-group-list___vCi4S>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z:first-child,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-results___haCH9>.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item___YZV9z:first-child{border-block-start:0;padding-block-start:var(--base-size-12)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd{font-size:var(--brand-text-size-300);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a{align-items:center;gap:calc(var(--base-size-8) + var(--base-size-2));width:100%;color:var(--brand-color-text-default);font-size:var(--brand-text-size-300);font-weight:var(--brand-heading-weight-600);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-100);margin:0;display:flex}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-container___bEvSd a span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-desc___Rb5Tm,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5 .Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-result-item-meta___HjhRd{display:none}@media screen and (width<=47.99rem){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-search-dialog___yqQl5{inset-block-start:var(--base-size-16);inset-block-end:auto;inset-inline:var(--base-size-16);width:calc(100vw - (var(--base-size-16) * 2));max-height:calc(100vh - (var(--base-size-16) * 2));height:auto}}.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar-skip-to-content___WMHSh{z-index:100;position:absolute;inset-block-start:calc(var(--SubdomainNavBar-height) / 2);inset-inline-start:var(--base-size-16);transform:translateY(-50%)}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in-down___kwg9g{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in___u4FB2{0%{opacity:0}to{opacity:1}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in-down-overflow____WJvz{0%{opacity:0;transform:translateY(calc(0px - var(--base-size-24)))}to{opacity:1;transform:translateY(calc(0px - var(--base-size-4)))}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-out___fhdxi{0%{opacity:1}to{opacity:0}}@keyframes Primer_Brand__SubdomainNavBar-module__fade-in-down-staggered___zQfEQ{0%{opacity:0;transform:scale(.6)translateY(-8px)}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK:before,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK:after,.Primer_Brand__SubdomainNavBar-module__SubdomainNavBar___JNpcK *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-SubdomainNavBar-canvas-default:#ffffff80;--brand-SubdomainNavBar-canvas-search:var(--base-color-scale-white-0);--brand-SubdomainNavBar-canvas-overflow-default:var(--base-color-scale-white-0);--brand-SubdomainNavBar-canvas-overflow-hover:var(--base-color-scale-gray-0);--brand-SubdomainNavBar-fg-overflow-default:var(--brand-color-text-default);--brand-SubdomainNavBar-color-link-bgColor:var(--base-color-scale-gray-1);--brand-SubdomainNavBar-searchDialog-shadowColor:#0000001a;--brand-SubdomainNavBar-searchDialog-backdropColor:#0003;--brand-SubdomainNavBar-border-nav-default:var(--base-color-scale-green-6);--brand-SubdomainNavBar-border-nav-pressed:var(--base-color-scale-black-0);--brand-SubdomainNavBar-border-button-hover:var(--base-color-scale-black-0)}[data-color-mode=dark]{--brand-SubdomainNavBar-canvas-default:#0d111780;--brand-SubdomainNavBar-canvas-search:var(--base-color-scale-black-0);--brand-SubdomainNavBar-canvas-overflow-default:var(--base-color-scale-white-0);--brand-SubdomainNavBar-canvas-overflow-hover:var(--base-color-scale-gray-0);--brand-SubdomainNavBar-fg-overflow-default:var(--brand-color-text-onEmphasis);--brand-SubdomainNavBar-color-link-bgColor:var(--base-color-scale-gray-6);--brand-SubdomainNavBar-searchDialog-shadowColor:#0000001a;--brand-SubdomainNavBar-searchDialog-backdropColor:#0003;--brand-SubdomainNavBar-border-nav-default:var(--base-color-scale-green-3);--brand-SubdomainNavBar-border-nav-pressed:var(--base-color-scale-white-0);--brand-SubdomainNavBar-border-button-hover:var(--base-color-scale-white-0)}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-InlineLink-color-rest:var(--brand-color-text-link-rest);--brand-InlineLink-color-pressed:var(--brand-color-text-link-pressed)}:root{--brand-InlineLink-transition-timing:var(--brand-animation-duration-fast)}.Primer_Brand__InlineLink-module__InlineLink___U_Ama{-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__InlineLink-module__InlineLink___U_Ama:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__InlineLink-module__InlineLink___U_Ama,.Primer_Brand__InlineLink-module__InlineLink___U_Ama>span{font-size:inherit;font-weight:inherit;line-height:inherit;color:var(--brand-InlineLink-color-rest)}.Primer_Brand__InlineLink-module__InlineLink___U_Ama:active,.Primer_Brand__InlineLink-module__InlineLink___U_Ama:active>span{color:var(--brand-InlineLink-color-pressed)}[data-color-mode=dark] .Primer_Brand__InlineLink-module__InlineLink___U_Ama{-webkit-font-smoothing:subpixel-antialiased;-moz-osx-font-smoothing:auto}@media (prefers-reduced-motion:reduce){.Primer_Brand__InlineLink-module__InlineLink___U_Ama,.Primer_Brand__InlineLink-module__InlineLink___U_Ama:before,.Primer_Brand__InlineLink-module__InlineLink___U_Ama:after,.Primer_Brand__InlineLink-module__InlineLink___U_Ama *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__InlineCode-module__InlineCode___NJ7el{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);-webkit-box-decoration-break:clone;box-decoration-break:clone;white-space:normal;word-wrap:anywhere;line-height:1.6}.Primer_Brand__InlineCode-module__InlineCode___NJ7el.Primer_Brand__InlineCode-module__InlineCode--nowrap___mcEPL{white-space:nowrap;word-wrap:normal}:where(h1,h2,h3,h4,h5,h6) .Primer_Brand__InlineCode-module__InlineCode___NJ7el{border-radius:var(--base-size-4)}:where(h1,h2,h3,h4,h5,h6) .Primer_Brand__InlineCode-module__InlineCode__text___N7vdd{color:var(--brand-InlineCode-color-fg-heading)}.Primer_Brand__InlineCode-module__InlineCode__text___N7vdd{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto;position:relative;inset-block-start:-.03em}:root,[data-color-mode=light]{--brand-Token-bgColor-default:var(--base-color-scale-gray-0);--brand-Token-bgColor-accent:var(--base-color-scale-green-6);--brand-Token-bgColor-hover-default:var(--base-color-scale-gray-1);--brand-Token-bgColor-hover-accent:var(--base-color-scale-green-7);--brand-Token-bgColor-hover-outline:#0000000f;--brand-Token-bgColor-hover-invisible:#0000000f;--brand-Token-bgColor-invisible:var(--base-color-scale-gray-1);--brand-Token-bgColor-outline:transparent;--brand-Token-border-outline:var(--brand-color-border-muted);--brand-Token-fgColor-default:var(--brand-color-text-default);--brand-Token-fgColor-accent:var(--base-color-scale-white-0);--brand-Token-fgColor-outline:var(--brand-color-text-default);--brand-Token-fgColor-invisible:var(--brand-color-text-default)}[data-color-mode=dark]{--brand-Token-bgColor-default:var(--base-color-scale-gray-7);--brand-Token-bgColor-accent:var(--base-color-scale-green-2);--brand-Token-bgColor-hover-default:var(--base-color-scale-gray-6);--brand-Token-bgColor-hover-accent:var(--base-color-scale-green-1);--brand-Token-bgColor-hover-outline:var(--brand-color-canvas-subtle);--brand-Token-bgColor-hover-invisible:var(--brand-color-canvas-subtle);--brand-Token-bgColor-invisible:transparent;--brand-Token-bgColor-outline:transparent;--brand-Token-border-outline:var(--brand-color-border-default);--brand-Token-fgColor-default:var(--brand-color-text-default);--brand-Token-fgColor-accent:var(--brand-color-text-onEmphasis);--brand-Token-fgColor-outline:var(--brand-color-text-default);--brand-Token-fgColor-invisible:var(--brand-color-text-default)}.Primer_Brand__Token-module__Token___r7qQC{border:var(--brand-borderWidth-thin) solid transparent;border-radius:var(--brand-borderRadius-small);align-items:center;gap:var(--base-size-8);min-width:0;max-width:100%;padding-inline:var(--base-size-8);padding-block:var(--base-size-6);vertical-align:middle;padding-block-end:var(--base-size-6);display:inline-flex}.Primer_Brand__Token-module__Token--hasLeadingVisual___cPRLz{padding-inline:calc((var(--base-size-4) + var(--base-size-8)) / 2);padding-block:calc((var(--base-size-4) + var(--base-size-8)) / 2)}.Primer_Brand__Token-module__Token--interactive___aQ1rk{cursor:pointer;-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Token-module__Token--interactive___aQ1rk:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}[data-color-mode=dark] .Primer_Brand__Token-module__Token___r7qQC{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto}.Primer_Brand__Token-module__Token--variant-default___NBxMW{background-color:var(--brand-Token-bgColor-default);color:var(--brand-Token-fgColor-default)}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-default___NBxMW:hover{background-color:var(--brand-Token-bgColor-hover-default)}.Primer_Brand__Token-module__Token--variant-accent___Ji_P4{background-color:var(--brand-Token-bgColor-accent);color:var(--brand-Token-fgColor-accent)}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-accent___Ji_P4:hover{background-color:var(--brand-Token-bgColor-hover-accent)}.Primer_Brand__Token-module__Token--variant-outline___X52wp{background-color:var(--brand-Token-bgColor-outline);border-color:var(--brand-Token-border-outline);color:var(--brand-Token-fgColor-outline)}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-outline___X52wp:hover{background-color:var(--brand-Token-bgColor-hover-outline)}.Primer_Brand__Token-module__Token--variant-invisible___bJrcK{color:var(--brand-Token-fgColor-invisible);background-color:#0000}.Primer_Brand__Token-module__Token--interactive___aQ1rk.Primer_Brand__Token-module__Token--variant-invisible___bJrcK:hover{background-color:var(--brand-Token-bgColor-hover-invisible)}.Primer_Brand__Token-module__Token__label___wC8Q5{text-overflow:ellipsis;min-width:0;font-weight:var(--base-text-weight-normal);line-height:var(--brand-text-lineHeight-100);white-space:nowrap;letter-spacing:var(--brand-text-letterSpacing-100);flex:auto;display:block;overflow:hidden}.Primer_Brand__Token-module__Token___r7qQC>.Primer_Brand__Token-module__Token__label___wC8Q5{color:inherit}.Primer_Brand__Token-module__Token__leading-visual___SDos3{width:calc((var(--base-size-16) + var(--base-size-20)) / 2);height:calc((var(--base-size-16) + var(--base-size-20)) / 2);flex-shrink:0;justify-content:center;align-items:center;display:flex}.Primer_Brand__Token-module__Token__visual___U0j1l{display:block}.Primer_Brand__Token-module__Token__leading-visual___SDos3>.Primer_Brand__Token-module__Token__visual___U0j1l{width:calc((var(--base-size-16) + var(--base-size-20)) / 2);height:calc((var(--base-size-16) + var(--base-size-20)) / 2);max-width:calc((var(--base-size-16) + var(--base-size-20)) / 2);max-height:calc((var(--base-size-16) + var(--base-size-20)) / 2);border-radius:2px}.Primer_Brand__Token-module__Token__leading-visual___SDos3>.Primer_Brand__Token-module__Token__visual___U0j1l svg,.Primer_Brand__Token-module__Token__leading-visual___SDos3>.Primer_Brand__Token-module__Token__visual___U0j1l img{width:100%;height:100%}@media (forced-colors:active){.Primer_Brand__Token-module__Token___r7qQC{outline:var(--brand-borderWidth-thin) solid transparent}.Primer_Brand__Token-module__Token--interactive___aQ1rk:focus-visible{outline-color:highlight}}:root{--brand-FAQ-maxWidth-list:51rem}:root,[data-color-mode=light]{--brand-FAQ-color-heading:var(--brand-color-text-default);--brand-FAQ-color-tabLabel-selected:var(--brand-color-text-default);--brand-FAQGroup-buttonIndicator-idle:var(--base-color-scale-gray-3);--brand-FAQGroup-buttonIndicator-hover:var(--base-color-scale-gray-5);--brand-FAQGroup-buttonIndicator-active:var(--brand-color-accent-primary)}[data-color-mode=dark]{--brand-FAQ-color-heading:var(--brand-color-text-default);--brand-FAQ-color-tabLabel-selected:var(--brand-color-text-default);--brand-FAQGroup-buttonIndicator-idle:var(--base-color-scale-gray-7);--brand-FAQGroup-buttonIndicator-hover:var(--base-color-scale-gray-5);--brand-FAQGroup-buttonIndicator-active:var(--brand-color-accent-primary)}:root{--brand-FAQ-heading-marginBottom:var(--base-size-40)}@media (width>=544px){:root{--brand-FAQ-heading-marginBottom:var(--base-size-40)}}@media (width>=768px){:root{--brand-FAQ-heading-marginBottom:var(--base-size-64)}}@media (width>=1012px){:root{--brand-FAQ-heading-marginBottom:var(--base-size-96)}}.Primer_Brand__FAQ-module__FAQ___R3vLU{max-width:var(--brand-FAQ-maxWidth-list);margin:0 auto}.Primer_Brand__FAQ-module__FAQ--variant-gridline___mM5vd{border-block-end:var(--brand-color-border-muted) var(--brand-borderWidth-thin) solid;max-width:100%;padding-block-end:var(--base-size-40)}.Primer_Brand__FAQ-module__FAQ__content-wrapper--gridline___XqrgD{padding-inline:var(--base-size-20);max-width:var(--brand-FAQ-maxWidth-list);margin:0 auto}.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{padding-inline:var(--base-size-20);border-block-end:var(--brand-color-border-muted) var(--brand-borderWidth-thin) solid;margin-block-end:var(--base-size-40)}.Primer_Brand__FAQ-module__FAQ__heading___bH0aG{color:var(--brand-FAQ-color-heading);margin-bottom:var(--brand-FAQ-heading-marginBottom)}.Primer_Brand__FAQ-module__FAQ__subheading___I4puv{margin-bottom:var(--base-size-16);color:var(--brand-color-text-muted);text-transform:uppercase;font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__FAQ-module__FAQ__heading--start___eHaT3{text-align:left}.Primer_Brand__FAQ-module__FAQ__heading--center___xMpbW{text-align:center;max-width:18ch;margin-left:auto;margin-right:auto}.Primer_Brand__FAQ-module__FAQ__heading--large___pBEPT{font-weight:var(--brand-text-weight-normal);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800)}.Primer_Brand__FAQ-module__FAQ___R3vLU details+.Primer_Brand__FAQ-module__FAQ__subheading___I4puv{margin-top:var(--base-size-48)}.Primer_Brand__FAQ-module__FAQ___R3vLU.Primer_Brand__FAQ-module__details__summary___zIBcp{font-weight:var(--brand-text-weight-normal);font-size:var(--brand-text-size-800);line-height:var(--brand-text-lineHeight-800);letter-spacing:var(--brand-text-letterSpacing-800);color:var(--brand-FAQ-color-heading);cursor:pointer;background:0 0;border:none;outline:none;margin:0;padding:0}@media screen and (width>=48rem){.Primer_Brand__FAQ-module__FAQ__content-wrapper--gridline___XqrgD,.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{padding-inline:var(--base-size-36)}}@media screen and (width>=63.25rem){.Primer_Brand__FAQ-module__FAQ__content-wrapper--gridline___XqrgD,.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{padding-inline:0}.Primer_Brand__FAQ-module__FAQ__heading-wrapper--gridline___TWgo1{margin-block-end:var(--base-size-48)}.Primer_Brand__FAQ-module__FAQ--variant-gridline___mM5vd{padding-block-end:var(--base-size-64)}}.Primer_Brand__FAQGroup-module__FAQGroup___D0VvR{justify-content:space-between;gap:var(--brand-stack-gap-spacious);display:none}.Primer_Brand__FAQGroup-module__FAQGroup__accordion___dkveP{margin-block-start:var(--base-size-48)}.Primer_Brand__FAQGroup-module__FAQGroup__panel-subHeading___F0U3h{text-transform:uppercase;font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);margin-block-start:calc(var(--base-size-8) + 1px)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist___WdY5Z .Primer_Brand__FAQGroup-module__FAQ__heading___w52lv{display:none}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC{appearance:none;padding-block:var(--base-size-8);cursor:pointer;align-items:center;gap:var(--base-size-12);width:100%;font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-100);letter-spacing:.15px;text-transform:uppercase;text-align:start;color:var(--brand-color-text-muted);text-overflow:ellipsis;white-space:nowrap;transition:gap var(--brand-animation-duration-fast) var(--brand-animation-easing-default);background-color:#0000;border:none;padding-inline:0;display:flex;overflow:hidden}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:2px}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC:before{content:"";width:calc(var(--base-size-8) + var(--base-size-2));height:var(--base-size-12);background-color:var(--brand-FAQGroup-buttonIndicator-idle);transform-origin:0;transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-default), background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default);flex-shrink:0;display:block;transform:scaleX(.7)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC:hover:before{background-color:var(--brand-FAQGroup-buttonIndicator-hover)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC[aria-selected=true]{color:var(--brand-FAQ-color-tabLabel-selected);gap:calc(var(--base-size-12) + 3px)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC[aria-selected=true]:before{background-color:var(--brand-FAQGroup-buttonIndicator-active);transform:scaleX(1)}.Primer_Brand__FAQGroup-module__FAQGroup__nested-accordion-item___JGGeC summary h4{font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__FAQGroup-module__FAQGroup__tablist--gridline___OCZgL{padding-inline-start:var(--base-size-48);padding-block:var(--base-size-80)}.Primer_Brand__FAQGroup-module__FAQGroup__content--gridline___C9omN{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-inline:var(--base-size-64);padding-block-start:var(--base-size-80);padding-block-end:var(--base-size-96)}@media (forced-colors:active){.Primer_Brand__FAQGroup-module__FAQGroup__tablist-button___EgyrC[aria-selected=true]{border-color:highlight;border-width:var(--brand-borderWidth-thicker);color:highlighttext}}.Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{padding-inline:var(--base-size-20)}@media screen and (width>=618px){.Primer_Brand__FAQGroup-module__FAQGroup__gridline-wrapper___OBSr9{border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__FAQGroup-module__FAQGroup__accordion___dkveP{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);max-width:618px;margin-block-start:0;margin-inline:auto}.Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{max-width:618px;margin:0 auto}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper___lkgjS{padding-block-end:var(--base-size-40)}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper--gridline___Q_oGI{border-block-end:var(--brand-color-border-muted) var(--brand-borderWidth-thin) solid}.Primer_Brand__FAQGroup-module__FAQGroup__accordion--gridline___zDvVd:first-child summary{border-block-start:none!important}.Primer_Brand__FAQGroup-module__FAQGroup__accordion--gridline___zDvVd:last-child summary{border-block-end:none!important}}@media screen and (width>=63.25rem){.Primer_Brand__FAQGroup-module__FAQGroup___D0VvR{display:grid}.Primer_Brand__FAQGroup-module__FAQGroup__accordion___dkveP{display:none}.Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{max-width:100%;padding-inline:0}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper--gridline___Q_oGI .Primer_Brand__FAQGroup-module__FAQGroup__heading___zTImD{padding-inline-start:var(--base-size-44)}.Primer_Brand__FAQGroup-module__FAQGroup__heading-wrapper___lkgjS{padding-block-end:var(--base-size-64)}}@media screen and (width>=80rem){.Primer_Brand__FAQGroup-module__FAQGroup__tablist--gridline___OCZgL{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__FAQGroup-module__FAQGroup__content--gridline___C9omN{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__ControlGroup-module__ControlGroup__container___gYDZP{gap:var(--base-size-8);font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-100);border:none;flex-direction:column;margin:0;padding:0;display:flex}.Primer_Brand__ControlGroup-module__ControlGroup__label___scr79{margin:0;margin-block-end:var(--base-size-8);padding:0}.Primer_Brand__ControlGroup-module__ControlGroup__validation___sJqFH{gap:var(--base-size-4);font-weight:var(--base-text-weight-medium);align-items:center;display:flex}.Primer_Brand__ControlGroup-module__ControlGroup__validation--success___eyNH9{color:var(--brand-color-text-emphasized)}.Primer_Brand__ControlGroup-module__ControlGroup__validation--error____n_l3{color:var(--brand-color-danger-fg)}.Primer_Brand__ControlGroup-module__ControlGroup__validation-icon--success___OO92u,.Primer_Brand__ControlGroup-module__ControlGroup__validation-icon--error___rZPNd{display:flex}.Primer_Brand__ControlGroup-module__ControlGroup__validation--animate-in___nHrFv{animation:.17s Primer_Brand__ControlGroup-module__ControlGroupValidationFadeIn___xgh8U var(--brand-animation-easing-glide)}.Primer_Brand__ControlGroup-module__ControlGroup__container___gYDZP label{font-weight:var(--base-text-weight-medium)}@keyframes Primer_Brand__ControlGroup-module__ControlGroupValidationFadeIn___xgh8U{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.Primer_Brand__Avatar-module__Avatar___QrJMw{width:var(--base-size-40);height:var(--base-size-40);display:inline-block;overflow:hidden}.Primer_Brand__Avatar-module__Avatar--shape-circle___VvaB7{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Avatar-module__Avatar--shape-square___hKak4{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Avatar-module__Avatar__image___AajXN{-o-object-fit:cover;object-fit:cover;width:100%;height:100%;display:block}.Primer_Brand__Avatar-module__Avatar--size-32___vJxfW{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar--size-40___RSkow{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar--size-48___TvwXR{width:var(--base-size-48);height:var(--base-size-48)}.Primer_Brand__Avatar-module__Avatar--size-64___rovws{width:var(--base-size-64);height:var(--base-size-64)}.Primer_Brand__Avatar-module__Avatar--size-80___YDbIK{width:var(--base-size-80);height:var(--base-size-80)}.Primer_Brand__Avatar-module__Avatar-narrow--size-32___wmqNx{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar-narrow--size-40___JnS3w{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar-narrow--size-48___X8e2V{width:var(--base-size-48);height:var(--base-size-48)}@media screen and (width>=48rem){.Primer_Brand__Avatar-module__Avatar-regular--size-32___f5goH{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar-regular--size-40___Qaf20{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar-regular--size-48___db8dV{width:var(--base-size-48);height:var(--base-size-48)}.Primer_Brand__Avatar-module__Avatar-regular--size-64___rBoTS{width:var(--base-size-64);height:var(--base-size-64)}.Primer_Brand__Avatar-module__Avatar-regular--size-80___AKjNL{width:var(--base-size-80);height:var(--base-size-80)}}@media screen and (width>=80rem){.Primer_Brand__Avatar-module__Avatar-wide--size-32___Kn8pg{width:var(--base-size-32);height:var(--base-size-32)}.Primer_Brand__Avatar-module__Avatar-wide--size-40___DBSrS{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Avatar-module__Avatar-wide--size-48___ai2Hf{width:var(--base-size-48);height:var(--base-size-48)}.Primer_Brand__Avatar-module__Avatar-wide--size-64___FLSak{width:var(--base-size-64);height:var(--base-size-64)}.Primer_Brand__Avatar-module__Avatar-wide--size-80___h09bA{width:var(--base-size-80);height:var(--base-size-80)}}:root{--brand-Testimonial-quote-letterSpacing-large:var(--brand-text-letterSpacing-900);--brand-Testimonial-quote-letterSpacing-default:var(--brand-text-letterSpacing-400);--brand-Testimonial-quote-fontWeight-large:var(--brand-heading-weight-600);--brand-Testimonial-quote-fontWeight-default:var(--brand-heading-weight-1000);--brand-Testimonial-quote-fontSize-large:var(--brand-text-size-500);--brand-Testimonial-quote-fontSize-default:var(--brand-text-size-400)}:root,[data-color-mode=light]{--brand-Testimonial-quoteMarkBackground-default:var(--base-color-scale-gray-0);--brand-Testimonial-quoteMarkBackground-blue:var(--base-color-scale-blue-0);--brand-Testimonial-quoteMarkBackground-coral:var(--base-color-scale-coral-0);--brand-Testimonial-quoteMarkBackground-green:var(--base-color-scale-green-0);--brand-Testimonial-quoteMarkBackground-gray:var(--base-color-scale-gray-0);--brand-Testimonial-quoteMarkBackground-indigo:var(--base-color-scale-indigo-0);--brand-Testimonial-quoteMarkBackground-lemon:var(--base-color-scale-lemon-0);--brand-Testimonial-quoteMarkBackground-lime:var(--base-color-scale-lime-0);--brand-Testimonial-quoteMarkBackground-orange:var(--base-color-scale-orange-0);--brand-Testimonial-quoteMarkBackground-pink:var(--base-color-scale-pink-0);--brand-Testimonial-quoteMarkBackground-purple:var(--base-color-scale-purple-0);--brand-Testimonial-quoteMarkBackground-red:var(--base-color-scale-red-0);--brand-Testimonial-quoteMarkBackground-teal:var(--base-color-scale-teal-0);--brand-Testimonial-quoteMarkBackground-yellow:var(--base-color-scale-yellow-0);--brand-Testimonial-quoteMarkBackground-blue-purple:var(--base-color-scale-blue-0);--brand-Testimonial-quoteMarkBackground-green-blue:var(--base-color-scale-green-0);--brand-Testimonial-quoteMarkBackground-pink-blue:var(--base-color-scale-pink-0);--brand-Testimonial-quoteMarkBackground-purple-red:var(--base-color-scale-purple-0);--brand-Testimonial-quoteMarkBackground-red-orange:var(--base-color-scale-red-0);--brand-Testimonial-borderMask-default:linear-gradient(180deg, #0009, #0000004d);--brand-Testimonial-borderMask-subtle:linear-gradient(180deg, #0009, #0000004d);--brand-Testimonial-quoteMarkColor-default:var(--brand-color-text-default);--brand-Testimonial-quoteMarkColor-blue:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-blue-purple-start:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-blue-purple-end:var(--base-color-scale-purple-5);--brand-Testimonial-quoteMarkColor-coral:var(--base-color-scale-coral-5);--brand-Testimonial-quoteMarkColor-green:var(--base-color-scale-green-6);--brand-Testimonial-quoteMarkColor-green-blue-start:var(--base-color-scale-green-6);--brand-Testimonial-quoteMarkColor-green-blue-end:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-gray:var(--base-color-scale-gray-5);--brand-Testimonial-quoteMarkColor-indigo:var(--base-color-scale-indigo-5);--brand-Testimonial-quoteMarkColor-lemon:var(--base-color-scale-lemon-5);--brand-Testimonial-quoteMarkColor-lime:var(--base-color-scale-lime-5);--brand-Testimonial-quoteMarkColor-orange:var(--base-color-scale-orange-5);--brand-Testimonial-quoteMarkColor-pink:var(--base-color-scale-pink-5);--brand-Testimonial-quoteMarkColor-pink-blue-start:var(--base-color-scale-pink-5);--brand-Testimonial-quoteMarkColor-pink-blue-end:var(--base-color-scale-blue-5);--brand-Testimonial-quoteMarkColor-purple:var(--base-color-scale-purple-5);--brand-Testimonial-quoteMarkColor-purple-red-start:var(--base-color-scale-purple-5);--brand-Testimonial-quoteMarkColor-purple-red-end:var(--base-color-scale-red-5);--brand-Testimonial-quoteMarkColor-red:var(--base-color-scale-red-5);--brand-Testimonial-quoteMarkColor-red-orange-start:var(--base-color-scale-red-5);--brand-Testimonial-quoteMarkColor-red-orange-end:var(--base-color-scale-orange-5);--brand-Testimonial-quoteMarkColor-teal:var(--base-color-scale-teal-5);--brand-Testimonial-quoteMarkColor-yellow:var(--base-color-scale-yellow-5);--brand-Testimonial-quote-color-default:var(--brand-color-text-default);--brand-Testimonial-quote-color-emphasis:var(--base-color-scale-green-7)}[data-color-mode=dark]{--brand-Testimonial-quoteMarkBackground-default:var(--base-color-scale-gray-6);--brand-Testimonial-quoteMarkBackground-blue:var(--base-color-scale-blue-8);--brand-Testimonial-quoteMarkBackground-coral:var(--base-color-scale-coral-8);--brand-Testimonial-quoteMarkBackground-green:var(--base-color-scale-green-8);--brand-Testimonial-quoteMarkBackground-gray:var(--base-color-scale-gray-6);--brand-Testimonial-quoteMarkBackground-indigo:var(--base-color-scale-indigo-8);--brand-Testimonial-quoteMarkBackground-lemon:var(--base-color-scale-lemon-8);--brand-Testimonial-quoteMarkBackground-lime:var(--base-color-scale-lime-8);--brand-Testimonial-quoteMarkBackground-orange:var(--base-color-scale-orange-8);--brand-Testimonial-quoteMarkBackground-pink:var(--base-color-scale-pink-8);--brand-Testimonial-quoteMarkBackground-purple:var(--base-color-scale-purple-8);--brand-Testimonial-quoteMarkBackground-red:var(--base-color-scale-red-8);--brand-Testimonial-quoteMarkBackground-teal:var(--base-color-scale-teal-8);--brand-Testimonial-quoteMarkBackground-yellow:var(--base-color-scale-yellow-8);--brand-Testimonial-quoteMarkBackground-blue-purple:var(--base-color-scale-blue-8);--brand-Testimonial-quoteMarkBackground-green-blue:var(--base-color-scale-green-8);--brand-Testimonial-quoteMarkBackground-pink-blue:var(--base-color-scale-pink-8);--brand-Testimonial-quoteMarkBackground-purple-red:var(--base-color-scale-purple-8);--brand-Testimonial-quoteMarkBackground-red-orange:var(--base-color-scale-red-8);--brand-Testimonial-borderMask-default:linear-gradient(180deg, #0009, #0000001a);--brand-Testimonial-borderMask-subtle:linear-gradient(180deg, #0009, #0000001a);--brand-Testimonial-quoteMarkColor-default:var(--brand-color-text-default);--brand-Testimonial-quoteMarkColor-blue:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-blue-purple-start:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-blue-purple-end:var(--base-color-scale-purple-2);--brand-Testimonial-quoteMarkColor-coral:var(--base-color-scale-coral-2);--brand-Testimonial-quoteMarkColor-green:var(--base-color-scale-green-2);--brand-Testimonial-quoteMarkColor-green-blue-start:var(--base-color-scale-green-2);--brand-Testimonial-quoteMarkColor-green-blue-end:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-gray:var(--base-color-scale-gray-2);--brand-Testimonial-quoteMarkColor-indigo:var(--base-color-scale-indigo-2);--brand-Testimonial-quoteMarkColor-lemon:var(--base-color-scale-lemon-2);--brand-Testimonial-quoteMarkColor-lime:var(--base-color-scale-lime-2);--brand-Testimonial-quoteMarkColor-orange:var(--base-color-scale-orange-2);--brand-Testimonial-quoteMarkColor-pink:var(--base-color-scale-pink-2);--brand-Testimonial-quoteMarkColor-pink-blue-start:var(--base-color-scale-pink-2);--brand-Testimonial-quoteMarkColor-pink-blue-end:var(--base-color-scale-blue-2);--brand-Testimonial-quoteMarkColor-purple:var(--base-color-scale-purple-2);--brand-Testimonial-quoteMarkColor-purple-red-start:var(--base-color-scale-purple-2);--brand-Testimonial-quoteMarkColor-purple-red-end:var(--base-color-scale-red-2);--brand-Testimonial-quoteMarkColor-red:var(--base-color-scale-red-2);--brand-Testimonial-quoteMarkColor-red-orange-start:var(--base-color-scale-red-2);--brand-Testimonial-quoteMarkColor-red-orange-end:var(--base-color-scale-orange-2);--brand-Testimonial-quoteMarkColor-teal:var(--base-color-scale-teal-2);--brand-Testimonial-quoteMarkColor-yellow:var(--base-color-scale-yellow-2);--brand-Testimonial-quote-color-default:var(--brand-color-text-default);--brand-Testimonial-quote-color-emphasis:var(--brand-color-text-emphasized)}.Primer_Brand__Testimonial-module__Testimonial___UUywT{color:var(--brand-color-text-default);font-family:var(--brand-fontStack-sansSerif)}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4{border-radius:var(--brand-borderRadius-xlarge);padding:var(--base-size-48) var(--base-size-32);position:relative}@media screen and (width>=48rem){.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4{padding:var(--base-size-48)}}@media screen and (width>=63.25rem){.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c{padding:var(--base-size-96) var(--base-size-128)}}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4{background-color:var(--brand-color-canvas-default)}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc:before,.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4:before{pointer-events:none;content:"";border-radius:inherit;position:absolute;inset:0}.Primer_Brand__Testimonial-module__Testimonial--variant-subtle___NHtOc.Primer_Brand__Testimonial-module__Testimonial--border___B_Qre:before{-webkit-mask-image:var(--brand-Testimonial-borderMask-subtle);-webkit-mask-image:var(--brand-Testimonial-borderMask-subtle);mask-image:var(--brand-Testimonial-borderMask-subtle);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default)}.Primer_Brand__Testimonial-module__Testimonial--variant-default___leAB4.Primer_Brand__Testimonial-module__Testimonial--border___B_Qre:before{-webkit-mask-image:var(--brand-Testimonial-borderMask-default);-webkit-mask-image:var(--brand-Testimonial-borderMask-default);mask-image:var(--brand-Testimonial-borderMask-default);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1{--brand-Testimonial-quoteMarkColor-gradient:radial-gradient(circle at top left, var(--brand-Testimonial-quoteMarkColor-start), var(--brand-Testimonial-quoteMarkColor-end));--brand-Testimonial-quoteMarkColor-background:var(--brand-Testimonial-quoteMarkColor-gradient,var(--brand-Testimonial-quoteMarkColor,currentColor));color:var(--brand-Testimonial-quoteMarkColor-start,var(--brand-Testimonial-quoteMarkColor,currentColor));font-size:var(--base-size-48);line-height:var(--base-size-48);font-weight:var(--base-text-weight-extrabold);position:relative}.Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1:before{content:"";background:var(--brand-Testimonial-quoteMarkColor-background);-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));mask:linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default)) content-box, linear-gradient(var(--brand-color-canvas-default), var(--brand-color-canvas-default));-webkit-mask-composite:xor;position:absolute;inset:0;-webkit-mask-composite:xor;mask-composite:exclude}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--hasBackground___VV6UY{width:calc(var(--base-size-48) + var(--base-size-8));height:calc(var(--base-size-48) + var(--base-size-8));border-radius:var(--base-size-12);background-color:var(--brand-Testimonial-quoteMarkBackground,var(--base-color-scale-gray-0));font-size:var(--base-size-64);justify-content:center;align-items:center;line-height:1;display:inline-flex}.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c .Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1:not(.Primer_Brand__Testimonial-module__Testimonial__quoteMark--hasBackground___VV6UY){font-size:7.5rem;line-height:1}.Primer_Brand__Testimonial-module__Testimonial__quoteMarkGlyph___skopW{display:block}.Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-family:var(--brand-fontStack-sansSerif);font-size:var(--brand-Testimonial-quote-fontSize-default);font-weight:var(--brand-Testimonial-quote-fontWeight-default);letter-spacing:var(--brand-Testimonial-quote-letterSpacing-default);line-height:1.2;display:block}.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-size:var(--brand-Testimonial-quote-fontSize-large);font-weight:var(--brand-Testimonial-quote-fontWeight-large);letter-spacing:var(--brand-Testimonial-quote-letterSpacing-large)}.Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F em,.Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F b{color:var(--brand-Testimonial-quote-color-emphasis);font-style:normal;font-weight:inherit}.Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{gap:var(--base-size-16);margin-top:var(--base-size-24);align-items:center;display:flex}.Primer_Brand__Testimonial-module__Testimonial-logo-image___KQQfi{display:block}.Primer_Brand__Testimonial-module__Testimonial--size-large___pF70c .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{margin-top:var(--base-size-64)}.Primer_Brand__Testimonial-module__Testimonial-caption___Wvb67{flex-direction:column;display:flex}.Primer_Brand__Testimonial-module__Testimonial-avatar___Kaxqh{flex:none}.Primer_Brand__Testimonial-module__Testimonial-from___Kfj__{font-weight:var(--base-text-weight-normal);text-transform:uppercase}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{gap:var(--base-size-36);width:100%;max-width:1176px;padding-inline:var(--base-size-20);padding-block:var(--base-size-40);flex-direction:column;display:flex}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteWrapper___M9wR7{align-items:flex-start;gap:var(--base-size-36);flex-direction:column;min-width:0;display:flex}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{align-items:flex-start;gap:var(--base-size-28);flex-direction:column;width:100%;margin-block-start:0}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-avatar___Kaxqh{width:var(--base-size-40);height:var(--base-size-40)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-caption___Wvb67{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);gap:var(--base-size-6);width:100%;padding-block-start:var(--base-size-20)}@media screen and (width>=48rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteWrapper___M9wR7{gap:var(--base-size-40)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{width:356px}}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-from___Kfj__{font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-heading-weight-500);line-height:var(--brand-text-lineHeight-100);text-transform:uppercase;letter-spacing:.0107em;align-items:center;display:flex}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-position___j2h0f{font-size:var(--brand-text-size-200);font-weight:var(--base-text-weight-normal);letter-spacing:.01em;line-height:1.6}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1{font-family:var(--brand-fontStack-monospace);font-weight:var(--brand-fontWeight-300)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteMarkGlyph___skopW{transform:translateY(var(--base-size-12))}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteMark___cC2M1:not(.Primer_Brand__Testimonial-module__Testimonial__quoteMark--hasBackground___VV6UY){margin-left:-.18em}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-family:var(--brand-fontStack-monospace);letter-spacing:-.01em;font-size:1.5rem;font-weight:425;line-height:var(--brand-text-lineHeight-100);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (width>=48rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{max-width:618px;padding-inline:var(--base-size-36);padding-block:var(--base-size-44);margin-inline:auto}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{letter-spacing:-.02em;font-size:1.625rem}}@media screen and (width>=63.25rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{grid-column-gap:calc(var(--base-size-96) + var(--base-size-24));-moz-column-gap:calc(var(--base-size-96) + var(--base-size-24));column-gap:calc(var(--base-size-96) + var(--base-size-24));max-width:1176px;padding-inline:var(--base-size-48);padding-block:var(--base-size-88);grid-template-columns:minmax(0,744px) 312px;align-items:end;margin-inline:auto;display:grid}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM.Primer_Brand__Testimonial-module__Testimonial--hasLink___Qr_M5{row-gap:var(--base-size-48)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__quoteWrapper___M9wR7{gap:var(--base-size-48);grid-area:1/1}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{gap:var(--base-size-32);grid-area:1/2;width:312px}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM.Primer_Brand__Testimonial-module__Testimonial--hasLink___Qr_M5 .Primer_Brand__Testimonial-module__Testimonial__media___JbJUQ{grid-row:1/span 2}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-caption___Wvb67{padding-block-start:var(--base-size-24)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-quote___QXF1F{font-size:var(--base-size-32)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-link___gHJ58{grid-area:2/1}}@media screen and (width>=80rem){.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM{padding-inline:0}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-avatar___Kaxqh{width:var(--base-size-48);height:var(--base-size-48)}}.Primer_Brand__Testimonial-module__Testimonial-link___gHJ58{margin-top:var(--base-size-8)}.Primer_Brand__Testimonial-module__Testimonial--variant-expressive___VLMNM .Primer_Brand__Testimonial-module__Testimonial-link___gHJ58{align-self:flex-start;width:fit-content;margin-top:0}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--default___nAhKC{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-default);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-default)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--blue___gf2qX{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-blue);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-blue)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--blue-purple___Ec9P1{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-blue-purple-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-blue-purple-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-blue-purple)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--coral___WzMiA{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-coral);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-coral)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--green___gsL2x{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-green);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-green)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--green-blue___wqq5w{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-green-blue-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-green-blue-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-green-blue)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--gray___WGLgi{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-gray);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-gray)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--indigo___KN9eK{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-indigo);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-indigo)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--lemon___XgAJR{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-lemon);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-lemon)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--lime___DyfRi{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-lime);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-lime)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--orange___wA2te{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-orange);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-orange)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--pink___hrNQC{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-pink);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-pink)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--pink-blue___z73Hz{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-pink-blue-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-pink-blue-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-pink-blue)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--purple___H1_Zx{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-purple);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-purple)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--purple-red___Wb4Yy{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-purple-red-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-purple-red-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-purple-red)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--red___nzAC4{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-red);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-red)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--red-orange___f5Woq{--brand-Testimonial-quoteMarkColor-start:var(--brand-Testimonial-quoteMarkColor-red-orange-start);--brand-Testimonial-quoteMarkColor-end:var(--brand-Testimonial-quoteMarkColor-red-orange-end);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-red-orange)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--teal___EPZ3D{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-teal);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-teal)}.Primer_Brand__Testimonial-module__Testimonial__quoteMark--yellow___gFQED{--brand-Testimonial-quoteMarkColor:var(--brand-Testimonial-quoteMarkColor-yellow);--brand-Testimonial-quoteMarkBackground:var(--brand-Testimonial-quoteMarkBackground-yellow)}:root,[data-color-mode=light]{--brand-ComparisonTable-featured-color-start:var(--base-color-scale-pink-4);--brand-ComparisonTable-featured-color-end:var(--base-color-scale-indigo-5)}[data-color-mode=dark]{--brand-ComparisonTable-featured-color-start:var(--base-color-scale-pink-2);--brand-ComparisonTable-featured-color-end:var(--base-color-scale-indigo-3)}:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-8)}@media (width>=544px){:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-40)}}@media (width>=768px){:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-64)}}@media (width>=1012px){:root{--brand-ComparisonTable-heading-marginBottom:var(--base-size-96)}}.Primer_Brand__ComparisonTable-module__ComparisonTable--heading___CeSsH{text-align:left;max-width:18ch;margin-bottom:var(--brand-ComparisonTable-heading-marginBottom)}@media screen and (width>=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable--heading___CeSsH{text-align:center;margin-left:auto;margin-right:auto}}.Primer_Brand__ComparisonTable-module__ComparisonTable-footnote___rf35Q{text-align:left;margin:var(--base-size-24) 0}@media screen and (width>=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable-footnote___rf35Q{text-align:center}}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX{border-collapse:collapse;border-spacing:0;font-family:var(--brand-body-fontFamily);width:100%}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr{text-align:left;flex-direction:column;width:100%;display:flex}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR{color:var(--brand-color-text-default);font-weight:var(--brand-text-weight-200);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);padding-bottom:var(--base-size-24)}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{font-weight:var(--base-text-weight-medium);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container___AHNr0{padding-top:var(--base-size-8);display:block}@media screen and (width<=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{display:none}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR{margin-bottom:var(--base-size-32);padding-bottom:0}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tbody tr{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-default)}.Primer_Brand__ComparisonTable-module__ComparisonTable-inline-cell-label___hE3hL{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400)}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tbody .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{margin-top:var(--base-size-24);margin-bottom:var(--base-size-16);font-weight:var(--brand-heading-weight-300);font-size:var(--brand-text-size-300);line-height:var(--brand-heading-lineHeight-300)}}@media screen and (width>=34rem){.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr{flex-direction:row}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container___AHNr0{padding-top:var(--base-size-24)}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{text-align:left}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM:first-child{width:25%;margin-right:40px}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr td:first-of-type:not(.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM),.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr:first-of-type .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM:nth-child(2){width:40%}.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr td:nth-of-type(2):not(.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM),.Primer_Brand__ComparisonTable-module__ComparisonTable___N2YLX tr:first-of-type .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM:nth-child(3){width:35%;margin-left:40px}.Primer_Brand__ComparisonTable-module__ComparisonTable--hide-element-on-narrow___GnYyu{display:none}.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container___AHNr0{border-top:var(--brand-borderWidth-thick) solid var(--brand-color-border-default)}}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--first___Ps2aK{color:var(--brand-color-text-muted)}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{padding:var(--base-size-24) 0 var(--base-size-16)}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading-label--featured___c_wMH{z-index:2;position:relative}@media screen and (width<=34rem){.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR:not(.Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM){padding-left:25px;position:relative}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell___kifYR:before{content:"";background:var(--brand-color-border-default);width:5px;position:absolute;top:0;bottom:0;left:0}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk:before{background:linear-gradient(180deg, var(--brand-ComparisonTable-featured-color-start), var(--brand-ComparisonTable-featured-color-end))}}@media screen and (width>=34rem){.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading-label--featured___c_wMH{color:#0000;background:linear-gradient(89.46deg, var(--brand-ComparisonTable-featured-color-start) 0.87%, var(--brand-ComparisonTable-featured-color-end) 75.12%);-webkit-background-clip:text;background-clip:text}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading___QlGCM{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400);align-items:flex-end;display:inline-flex}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--first___Ps2aK{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400)}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk,.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb{padding-left:var(--base-size-24);padding-right:var(--base-size-24);border-right:2px solid var(--brand-ComparisonTable-featured-color-end);border-left:2px solid var(--brand-ComparisonTable-featured-color-start)}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb{background:var(--brand-color-canvas-default);border-top-left-radius:.45rem;border-top-right-radius:.45rem;position:relative}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb:before,.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb:after{z-index:0;content:"";background:linear-gradient(90deg, var(--brand-ComparisonTable-featured-color-start), var(--brand-ComparisonTable-featured-color-end));border-top-left-radius:.45rem;border-top-right-radius:.45rem;position:absolute;inset:-2px -2px 0}.ComparisonTable--default thead .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-heading--featured___tkzzb:after{z-index:1;background:var(--brand-color-canvas-default);border-top-left-radius:.35rem;border-top-right-radius:.35rem;top:0;left:0;right:0}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm{background:var(--brand-color-canvas-default);border-bottom-right-radius:.45rem;border-bottom-left-radius:.45rem;position:relative}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm:after,.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm:before{z-index:0;content:"";background:linear-gradient(90deg, var(--brand-ComparisonTable-featured-color-start), var(--brand-ComparisonTable-featured-color-end));border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem;position:absolute;inset:0 -2px}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell--featured___f0LZk.Primer_Brand__ComparisonTable-module__ComparisonTable-cell--lastrow___zmShm:after{z-index:1;background:var(--brand-color-canvas-default);border-bottom-right-radius:.35rem;border-bottom-left-radius:.35rem;bottom:2px;left:0;right:0}.ComparisonTable--default .Primer_Brand__ComparisonTable-module__ComparisonTable-cell-container--featured___x6tKO{z-index:2;position:relative}}.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{padding:var(--base-size-12) var(--base-size-16);z-index:91;display:flex;position:sticky;top:0;left:0;right:0}.Primer_Brand__AnchorNav-module__AnchorNav--no-bg-scroll___oiJl5{height:100vh;overflow:hidden}.Primer_Brand__AnchorNav-module__AnchorNav--hide-until-sticky___d3Ec2:not(.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO){opacity:0;visibility:hidden;transition:visibility var(--brand-animation-duration-default) var(--brand-animation-easing-default), opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__AnchorNav-module__AnchorNav--hide-until-sticky___d3Ec2.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO{opacity:1;visibility:visible}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO{position:fixed;box-shadow:0 3px 6px #8c959f26,0 1px 1px #0000001a}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk{transform-style:preserve-3d;z-index:91}.Primer_Brand__AnchorNav-module__AnchorNav-link-container___VpHV2{width:100%;display:flex;position:relative}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{z-index:91;width:100%;max-width:1280px;max-height:calc(100vh - var(--base-size-12) * 2);position:relative}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc .Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{background-color:var(--brand-color-canvas-default)}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ:not(.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk) .Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{justify-content:space-between;align-items:center;display:flex}.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container--expanded____aoje{height:auto}.Primer_Brand__AnchorNav-module__AnchorNav-link-container___VpHV2{padding-left:var(--base-size-16);display:none}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link-container___VpHV2{flex-direction:column;display:flex}}@media screen and (width>=40rem) and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq:not(.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer--no-offset___xn5H8){top:var(--base-size-8);position:absolute;right:0}}@media screen and (width>=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{padding:var(--base-size-12) var(--base-size-40);height:75px}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc,.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{align-items:center;margin:0 auto;display:flex}}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{place-items:center flex-start;width:100%;height:48px;-webkit-text-decoration:none;text-decoration:none;display:flex}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{animation:1s Primer_Brand__AnchorNav-module__fade-in___KfA_2;animation-timing-function:var(--brand-animation-easing-glide);margin:0 0 2px}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{padding:0 0 0 var(--base-size-16);position:absolute;left:0}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:before{content:"";background-color:var(--brand-AnchorNav-link-underline-default);width:2px;height:50%;transition:opacity var(--brand-animation-duration-fast), transform var(--brand-animation-duration-fast);opacity:1;transform-origin:0;position:absolute;left:0;transform:scale(0)}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link--is-active___xbYDS:before{transform:scale(1)}}@media screen and (width>=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{margin:0 1px;position:relative}.Primer_Brand__AnchorNav-module__AnchorNav-link--center___aryYq{justify-content:center}.Primer_Brand__AnchorNav-module__AnchorNav-link--start___COZM3{width:auto;margin-right:var(--base-size-48);justify-content:flex-start}}.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{font-weight:var(--brand-text-weight-400);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-200);color:var(--brand-color-text-default);transition:color var(--brand-animation-easing-glide) var(--brand-animation-duration-faster);position:relative}.Primer_Brand__AnchorNav-module__AnchorNav--with-default-background-color___aFdXc .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{background-color:var(--brand-color-canvas-default)}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{background-color:var(--brand-color-canvas-default)}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-link-label--is-active___DyUFY{color:var(--brand-color-focus)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:not(.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=true]){visibility:hidden}.Primer_Brand__AnchorNav-module__AnchorNav--stuck___AtvLO .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=false][data-first=true],.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=false][data-first=true]{visibility:visible}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container--expanded____aoje .Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2{text-align:left;flex-direction:column;justify-content:center;align-items:flex-start;display:flex;position:relative;top:auto;left:auto;right:auto;visibility:visible!important}}@media screen and (width>=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK{white-space:nowrap}.Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{content:"";background-color:var(--brand-AnchorNav-link-underline-default);width:100%;height:2px;transition:opacity var(--brand-animation-duration-fast), transform var(--brand-animation-duration-fast), background-color var(--brand-animation-duration-fast);opacity:1;transform-origin:50%;position:absolute;bottom:-6px;left:0;transform:scale(0)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:hover .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after,.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:focus .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after,.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=true] .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{opacity:1;transform:scaleX(.8)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:active .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{background-color:var(--brand-AnchorNav-link-underline-pressed);transform:scaleX(.9)}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2[data-active=true] .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{background-color:var(--brand-AnchorNav-link-underline-pressed);opacity:1}.Primer_Brand__AnchorNav-module__AnchorNav-link___f5YJ2:focus-visible .Primer_Brand__AnchorNav-module__AnchorNav-link-label___x3JtK:after{opacity:0}}.Primer_Brand__AnchorNav-module__AnchorNav-menu-button___tputP{display:none}@media screen and (width<=63.25rem){.Primer_Brand__AnchorNav-module__AnchorNav-menu-button___tputP{all:unset;cursor:pointer;padding:var(--base-size-8) var(--base-size-16);height:var(--base-size-32);z-index:2;border-radius:var(--brand-borderRadius-small);align-items:center;padding-left:0;display:inline-flex}.Primer_Brand__AnchorNav-module__AnchorNav-menu-button-arrow___v5tcA{padding:0 calc(var(--base-size-12) / 2);width:32px;height:32px;color:var(--brand-color-text-default)}.Primer_Brand__AnchorNav-module__AnchorNav-menu-button___tputP:focus-visible{border-color:var(--brand-color-focus);box-shadow:0 0 0 2px var(--brand-color-focus);outline:none}.Primer_Brand__AnchorNav-module__AnchorNav-overlay--expanded___xXv6O{z-index:-3;width:100%;height:100dvh;animation:.5s Primer_Brand__AnchorNav-module__fade-in___KfA_2;animation-timing-function:var(--brand-animation-easing-glide);cursor:pointer;background:#00000080;position:absolute;top:0;left:0;right:0;transform:translateZ(-1px)}}.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq{gap:var(--base-size-8);display:flex}.Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{z-index:1;white-space:nowrap;padding-inline:var(--base-size-24);margin-left:auto;display:flex}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{align-self:flex-start}@media screen and (width<=40rem){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ{padding:0}.Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{display:none}.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq{flex-direction:column}.Primer_Brand__AnchorNav-module__AnchorNav--expanded___wVGbk .Primer_Brand__AnchorNav-module__AnchorNav-action___DWzcE{width:100%;margin-top:var(--base-size-8);display:flex}.Primer_Brand__AnchorNav-module__AnchorNav-inner-container___lshlZ{padding:var(--base-size-12) var(--base-size-16);overflow-y:auto}}@media screen and (width>=40rem){.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer___jgpnq{gap:var(--base-size-16)}.Primer_Brand__AnchorNav-module__AnchorNav__actionsContainer--multiple___hgA_r{margin-inline-start:var(--base-size-16)}}@keyframes Primer_Brand__AnchorNav-module__fade-in___KfA_2{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ,.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ:before,.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ:after,.Primer_Brand__AnchorNav-module__AnchorNav___bwgAJ *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-AnchorNav-link-underline-default:var(--base-color-scale-gray-4);--brand-AnchorNav-link-underline-pressed:var(--base-color-scale-black-0)}[data-color-mode=dark]{--brand-AnchorNav-link-underline-default:var(--base-color-scale-gray-3);--brand-AnchorNav-link-underline-pressed:var(--base-color-scale-white-0)}:root,[data-color-mode=light]{--brand-CTABanner-shadow-color-start:var(--base-color-scale-green-6);--brand-CTABanner-shadow-color-end:var(--base-color-scale-blue-5);--brand-CTABanner-bgColor:var(--brand-color-canvas-subtle);--brand-CTABanner-color-heading-emphasis:var(--base-color-scale-green-7);--brand-CTABanner-color-logo-muted:var(--brand-color-text-muted);--brand-CTABanner-color-logo-emphasis:var(--brand-color-text-default);--brand-CTABanner-color-logo-filter-muted:brightness(0) saturate(100%) invert(37%) sepia(7%) saturate(778%) hue-rotate(171deg) brightness(96%) contrast(91%);--brand-CTABanner-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(12%) sepia(20%) saturate(450%) hue-rotate(172deg) brightness(100%) contrast(91%)}[data-color-mode=dark]{--brand-CTABanner-shadow-color-start:var(--base-color-scale-green-2);--brand-CTABanner-shadow-color-end:var(--base-color-scale-blue-3);--brand-CTABanner-bgColor:var(--brand-color-canvas-subtle);--brand-CTABanner-color-heading-emphasis:var(--brand-color-text-emphasized);--brand-CTABanner-color-logo-muted:var(--brand-color-text-muted);--brand-CTABanner-color-logo-emphasis:var(--brand-color-text-default);--brand-CTABanner-color-logo-filter-muted:brightness(0) saturate(100%) invert(61%) sepia(8%) saturate(430%) hue-rotate(171deg) brightness(94%) contrast(92%);--brand-CTABanner-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(91%) sepia(2%) saturate(2455%) hue-rotate(193deg) brightness(107%) contrast(98%)}.Primer_Brand__CTABanner-module__CTABanner___m0t8s{max-width:var(--brand-breakpoint-xlarge);width:100%;margin:0 auto;display:flex;position:relative}.Primer_Brand__CTABanner-module__CTABanner--shadow___BA030:before{content:"";inset:var(--base-size-16);filter:blur(var(--base-size-96));background:linear-gradient(to right, var(--brand-CTABanner-shadow-color-start), var(--brand-CTABanner-shadow-color-end));position:absolute;transform:translateZ(0)}.Primer_Brand__CTABanner-module__CTABanner-grid___u3x9a{--brand-Grid-spacing-row:0;row-gap:0;padding-inline:0}.Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt{align-items:center;display:flex}.Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:center;align-items:center;display:flex}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-end}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-start}@media screen and (width>=63.25rem){.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-end}}@media screen and (width<=63.24rem){.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{justify-content:flex-start}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{order:-1;margin-block-start:0}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt,.Primer_Brand__CTABanner-module__CTABanner-grid-column--secondary___JBmPK{margin-block-start:var(--base-size-24)}}.Primer_Brand__CTABanner-module__CTABanner-outer-container--border___PwQrC{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-64) var(--base-size-20);z-index:1;box-sizing:border-box;width:100%}.Primer_Brand__CTABanner-module__CTABanner-container--rounded___JJhRt{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding-inline:var(--base-size-20);padding-block:var(--base-size-32)}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding-inline:var(--base-size-20);padding-block:var(--base-size-40)}.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{--CTABanner-content-gap:var(--base-size-16);gap:var(--CTABanner-content-gap);flex-direction:column;align-items:flex-start;max-width:800px;margin:0 auto;display:flex}.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_ img,.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_ picture{display:block}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{--CTABanner-content-gap:0}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_,.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{max-width:576px;margin:0}.Primer_Brand__CTABanner-module__CTABanner-container--background___v1yTH{background-repeat:no-repeat;background-color:var(--brand-CTABanner-bgColor);background-image:var(--brand-CTABanner-narrow-background-image-src,var(--brand-CTABanner-background-image-src));background-size:var(--brand-CTABanner-narrow-background-image-size,var(--brand-CTABanner-background-image-size));background-position:50%;background-position:var(--brand-CTABanner-narrow-background-image-position,var(--brand-CTABanner-background-image-position,center))}.Primer_Brand__CTABanner-module__CTABanner-container--border___FbAer{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__CTABanner-module__CTABanner-container--border-gridlines___H1FN8{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);max-width:534px;margin-inline:auto}.Primer_Brand__CTABanner-module__CTABanner-content--center___S0ChQ{text-align:center;align-items:center}.Primer_Brand__CTABanner-module__CTABanner-description___I7md6{margin-bottom:var(--base-size-16)}@media screen and (width>=48rem){.Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-80) var(--base-size-36)}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-36);padding-block-end:var(--base-size-48)}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-36);padding-block:var(--base-size-48)}.Primer_Brand__CTABanner-module__CTABanner-container--background___v1yTH{background-color:var(--brand-CTABanner-regular-background-color,var(--brand-CTABanner-background-color));background-image:var(--brand-CTABanner-regular-background-image-src,var(--brand-CTABanner-background-image-src));background-size:var(--brand-CTABanner-regular-background-image-size,var(--brand-CTABanner-background-image-size));background-position:var(--brand-CTABanner-regular-background-image-position,var(--brand-CTABanner-background-image-position))}}@media screen and (width>=63.25rem){.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{--CTABanner-content-gap:var(--base-size-32)}.Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-96) var(--base-size-64);max-width:100%}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1,.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-container___iRzd1{padding:var(--base-size-64)}}@media screen and (width>=80rem){.Primer_Brand__CTABanner-module__CTABanner-container--background___v1yTH{background-color:var(--brand-CTABanner-wide-background-color,var(--brand-CTABanner-background-color));background-image:var(--brand-CTABanner-wide-background-image-src,var(--brand-CTABanner-background-image-src));background-size:var(--brand-CTABanner-wide-background-image-size,var(--brand-CTABanner-background-image-size));background-position:var(--brand-CTABanner-wide-background-image-position,var(--brand-CTABanner-background-image-position))}}.Primer_Brand__CTABanner-module__CTABanner-image___stI4S{width:100%;height:auto}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-image___stI4S{width:100%;max-width:476px;height:auto}@media screen and (width>=63.25rem){.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-image___stI4S{max-width:100%;height:auto}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt:has(.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn){align-items:stretch}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-grid-column--primary___ZtLFt:has(.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn)>.Primer_Brand__CTABanner-module__CTABanner-content___sZo6_{flex:1}.Primer_Brand__CTABanner-module__CTABanner--variant-balanced___eroPr .Primer_Brand__CTABanner-module__CTABanner-content___sZo6_:has(>.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn)>.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn+*{margin-block-start:auto}}.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn{align-items:center;gap:var(--base-size-8);width:100%;border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-end:var(--base-size-32);display:flex}.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn>svg,.Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn>img{height:var(--base-size-40);width:auto;display:block}.Primer_Brand__CTABanner-module__CTABanner--variant-default___eD19a .Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn{border-block-end:none;width:auto;padding-block-end:0}.Primer_Brand__CTABanner-module__CTABanner--variant-minimal___uuWf5 .Primer_Brand__CTABanner-module__CTABanner-logo___QX4nn{margin-block-end:var(--base-size-24)}.Primer_Brand__CTABanner-module__CTABanner-link___XxOjC{align-self:auto}.Primer_Brand__CTABanner-module__CTABanner-heading___JYhUV b{color:var(--brand-CTABanner-color-heading-emphasis);font-weight:inherit}.Primer_Brand__CTABanner-module__CTABanner-heading___JYhUV code,.Primer_Brand__CTABanner-module__CTABanner-description___I7md6 code{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);white-space:normal;word-wrap:anywhere;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:1.6}.Primer_Brand__CTABanner-module__CTABanner-buttonGroup___UMs1W{margin-block-start:0;margin-block-start:calc(-1 * var(--CTABanner-content-gap,0px));padding-block-start:var(--base-size-12)}.Primer_Brand__ListItem-module__ListItem___aFf5u{align-items:flex-start;gap:var(--base-size-12);display:flex}.Primer_Brand__ListItem-module__ListItem--default___pqfZV{color:var(--brand-color-text-default)}.Primer_Brand__ListItem-module__ListItem--muted___EzTWR{color:var(--brand-color-text-muted)}.Primer_Brand__ListItem-module__ListItem__leading-visual___Fu5ba{height:1lh}.Primer_Brand__ListItem-module__ListItem__leading-visual--muted___nJk0R{fill:var(--brand-color-text-muted)}.Primer_Brand__ListItem-module__OrderedList__item___BJsQo:before{content:counter(li) ".";counter-increment:li;min-width:var(--base-size-16);text-align:center;font-weight:var(--brand-text-size-200)}.Primer_Brand__list-shared-module__List___dFefs{gap:var(--base-size-8);font-family:var(--brand-body-fontFamily);color:var(--brand-color-text-default);flex-direction:column;margin:0;padding-inline-start:0;list-style:none;display:flex}.Primer_Brand__OrderedList-module__OrderedList___eCBYV{counter-reset:li}.Primer_Brand__CTAForm-module__CTAForm___oOV3J{grid-gap:var(--base-size-16);gap:var(--base-size-16);grid-template-columns:2fr auto;align-items:flex-end;display:grid}.Primer_Brand__CTAForm-module__CTAForm___oOV3J>*{grid-column:span 2;width:100%}.Primer_Brand__CTAForm-module__CTAForm-input___sR5r3{order:1}.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl{order:2;grid-column:span 2}.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC{order:4}.Primer_Brand__CTAForm-module__CTAForm___oOV3J>:not(.Primer_Brand__CTAForm-module__CTAForm-input___sR5r3):not(.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC):not(.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl){order:3;grid-column:span 2}@media screen and (width>=48rem){.Primer_Brand__CTAForm-module__CTAForm___oOV3J>*{grid-column:span 1}.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl{order:3;grid-column:span 2}.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC{order:2}.Primer_Brand__CTAForm-module__CTAForm___oOV3J>:not(.Primer_Brand__CTAForm-module__CTAForm-input___sR5r3):not(.Primer_Brand__CTAForm-module__CTAForm-button___dWqAC):not(.Primer_Brand__CTAForm-module__CTAForm-confirm___yTThl){order:4}}:root,[data-color-mode=light]{--brand-footer-borderColor:var(--base-color-scale-green-6);--brand-footer-bg-color:var(--brand-color-canvas-subtle);--brand-footer-backToTop-borderColor-rest:var(--base-color-scale-gray-2);--brand-footer-backToTop-borderColor-hover:var(--base-color-scale-gray-2);--brand-footer-backToTop-borderColor-active:var(--base-color-scale-gray-2);--brand-footer-backToTop-bgColor-rest:#00000003;--brand-footer-backToTop-bgColor-hover:#0000001e;--brand-footer-backToTop-bgColor-active:#00000036;--brand-footer-socialIcon-restFilter:sepia(37%) saturate(152%) hue-rotate(77deg) brightness(57%);--brand-footer-socialIcon-hoverFilter:brightness(0)}[data-color-mode=dark]{--brand-footer-borderColor:var(--base-color-scale-green-3);--brand-footer-bg-color:var(--brand-color-canvas-subtle);--brand-footer-backToTop-borderColor-rest:var(--base-color-scale-gray-6);--brand-footer-backToTop-borderColor-hover:#ffffff1f;--brand-footer-backToTop-borderColor-active:#ffffff1f;--brand-footer-backToTop-bgColor-rest:#00000003;--brand-footer-backToTop-bgColor-hover:#ffffff29;--brand-footer-backToTop-bgColor-active:#ffffff3d;--brand-footer-socialIcon-restFilter:saturate(73%) hue-rotate(-89deg) brightness(110%);--brand-footer-socialIcon-hoverFilter:brightness(2)}:root{--brand-footer-backToTop-minTarget:var(--base-size-44)}.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd{border-top:var(--brand-borderWidth-thick) solid var(--brand-footer-borderColor);background-color:var(--brand-footer-bg-color);position:relative}.Primer_Brand__MinimalFooter-module__MinimalFooter--withFootnotes___r5iQL{border-top:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__container___phzVn{max-width:1280px;max-width:var(--brand-footer-max-width,1280px);padding-inline:var(--base-size-20);margin-left:auto;margin-right:auto}@media screen and (width>=48rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__container___phzVn{padding-inline:var(--base-size-32)}}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms___wPthK{padding:var(--base-size-48) 0}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms-item___ex9bL{margin-bottom:var(--base-size-24)}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms-item___ex9bL sup{font-size:var(--base-size-12);vertical-align:super;margin-right:var(--base-size-4);display:inline-block}.Primer_Brand__MinimalFooter-module__MinimalFooter__terms-item___ex9bL:last-child{margin-bottom:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__top___H_7ju{padding-top:var(--base-size-48);padding-bottom:var(--base-size-32);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle)}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-row___ZGvWR{grid-gap:var(--base-size-24);align-items:center;gap:var(--base-size-24);grid-template-columns:auto 1fr;display:grid}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM{display:contents}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM>.Primer_Brand__MinimalFooter-module__MinimalFooter__links___ukZs1{grid-area:2/1/auto/-1;justify-content:flex-start}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM>.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho{grid-area:1/2;justify-self:flex-end}.Primer_Brand__MinimalFooter-module__MinimalFooter__logo___GvtJc{color:var(--brand-color-text-default);display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__logo___GvtJc>svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__MinimalFooter-module__MinimalFooter__bottom___yXxek{padding-top:var(--base-size-32);padding-bottom:var(--base-size-32)}@media screen and (width>=80rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__top___H_7ju{padding-top:var(--base-size-32)}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-row___ZGvWR{justify-content:space-between;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM{justify-content:flex-end;align-items:center;gap:var(--base-size-20);flex-wrap:wrap;flex:1;min-width:0;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__top-actions___QIaDM>.Primer_Brand__MinimalFooter-module__MinimalFooter__links___ukZs1{justify-content:flex-end}.Primer_Brand__MinimalFooter-module__MinimalFooter__logo___GvtJc>svg{width:var(--base-size-32);height:var(--base-size-32)}}.Primer_Brand__MinimalFooter-module__MinimalFooter__section____O9_E{min-width:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__section--footnotes___iIJlL{border-bottom:var(--brand-borderWidth-thick) solid var(--brand-footer-borderColor);background-color:var(--brand-color-canvas-default)}.Primer_Brand__MinimalFooter-module__MinimalFooter__section--center___Tq8St>.Primer_Brand__MinimalFooter-module__MinimalFooter__container___phzVn{padding-top:var(--base-size-32);padding-bottom:var(--base-size-32)}.Primer_Brand__MinimalFooter-module__MinimalFooter__section--center___Tq8St+.Primer_Brand__MinimalFooter-module__MinimalFooter__section--bottom___KBLLb{border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle)}.Primer_Brand__MinimalFooter-module__MinimalFooter__bottom-row___Utlyc{align-items:flex-start;gap:var(--base-size-24);flex-direction:column;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-links___L0cTI{justify-content:flex-start;align-items:center;gap:var(--base-size-16);margin:0;padding:0;list-style:none;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-link___T7oRV{min-width:var(--base-size-24);min-height:var(--base-size-24);justify-content:center;align-items:center;display:flex;position:relative}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-link___T7oRV:hover .Primer_Brand__MinimalFooter-module__MinimalFooter__social-icon___rQIEL,.Primer_Brand__MinimalFooter-module__MinimalFooter__social-link___T7oRV:focus-visible .Primer_Brand__MinimalFooter-module__MinimalFooter__social-icon___rQIEL{filter:var(--brand-footer-socialIcon-hoverFilter)}.Primer_Brand__MinimalFooter-module__MinimalFooter__social-icon___rQIEL{width:auto;height:auto;max-height:var(--base-size-20);filter:var(--brand-footer-socialIcon-restFilter);display:block}.Primer_Brand__MinimalFooter-module__MinimalFooter__copyright___Zz0yX{text-transform:uppercase;margin:0}.Primer_Brand__MinimalFooter-module__MinimalFooter__metaText___NDwZ3{font-size:var(--base-size-12)}.Primer_Brand__MinimalFooter-module__MinimalFooter__links___ukZs1{align-items:center;gap:var(--base-size-20);flex-wrap:wrap;display:flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__link___zi47c{color:var(--brand-color-text-muted);cursor:pointer;text-transform:uppercase;background-color:#0000;border:0;align-self:center;padding:0;-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__MinimalFooter-module__MinimalFooter__link___zi47c:where(button){font:inherit}.Primer_Brand__MinimalFooter-module__MinimalFooter__link___zi47c:hover{-webkit-text-decoration:underline;text-decoration:underline}@media screen and (width>=48rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__social-links___L0cTI{gap:var(--base-size-20)}}@media screen and (width>=80rem){.Primer_Brand__MinimalFooter-module__MinimalFooter__bottom-row___Utlyc{flex-direction:row;justify-content:space-between;align-items:center}}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho{appearance:none;font:inherit;color:var(--brand-color-text-default);cursor:pointer;background:0 0;border:0;padding:0;display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:disabled,.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho[aria-disabled=true]{cursor:not-allowed}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-content___fAoRM{align-items:center;gap:var(--base-size-12);display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-icon___tpnv3{border:var(--brand-borderWidth-thin) solid var(--brand-footer-backToTop-borderColor-rest);border-radius:var(--base-size-6);background-color:var(--brand-footer-backToTop-bgColor-rest);min-width:var(--brand-footer-backToTop-minTarget);min-height:var(--brand-footer-backToTop-minTarget);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), border-color var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:not([disabled]):not([aria-disabled=true]):hover .Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-icon___tpnv3{border-color:var(--brand-footer-backToTop-borderColor-hover);background-color:var(--brand-footer-backToTop-bgColor-hover)}.Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop___uK0Ho:not([disabled]):not([aria-disabled=true]):active .Primer_Brand__MinimalFooter-module__MinimalFooter__backToTop-icon___tpnv3{border-color:var(--brand-footer-backToTop-borderColor-active);background-color:var(--brand-footer-backToTop-bgColor-active)}@media (prefers-reduced-motion:reduce){.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd,.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd:before,.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd:after,.Primer_Brand__MinimalFooter-module__MinimalFooter___QucKd *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Pillar-module__Pillar___dHhm7{color:var(--brand-color-text-default);flex-direction:column;display:flex}.Primer_Brand__Pillar-module__Pillar--has-max-width___Rm68E{max-width:50ch}.Primer_Brand__Pillar-module__Pillar--has-border___PSR1K{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-32)}.Primer_Brand__Pillar-module__Pillar___dHhm7.Primer_Brand__Pillar-module__Pillar--align-center___mWN5F{text-align:center;align-items:center}.Primer_Brand__Pillar-module__Pillar___dHhm7.Primer_Brand__Pillar-module__Pillar--align-start___dfipC{text-align:left;align-items:flex-start}.Primer_Brand__Pillar-module__Pillar__image___I_5uJ{margin-bottom:var(--base-size-28);border-radius:var(--brand-borderRadius-medium);overflow:hidden}.Primer_Brand__Pillar-module__Pillar__image___I_5uJ img,.Primer_Brand__Pillar-module__Pillar__image___I_5uJ span,.Primer_Brand__Pillar-module__Pillar__image___I_5uJ picture{display:block}.Primer_Brand__Pillar-module__Pillar__icon___MyYVk{margin-bottom:var(--base-size-48)}.Primer_Brand__Pillar-module__Pillar__icon--with-background___z0eoV{border-radius:var(--base-size-12)}.Primer_Brand__Pillar-module__Pillar__icon--with-background___z0eoV>svg{width:100%;height:100%}.Primer_Brand__Pillar-module__Pillar__heading___C7yPQ{margin-bottom:var(--base-size-16)}.Primer_Brand__Pillar-module__Pillar__description___BPMTa:not(.Primer_Brand__Pillar-module__Pillar--has-border___PSR1K .Primer_Brand__Pillar-module__Pillar__description___BPMTa:last-child){margin-bottom:var(--base-size-24)}.Primer_Brand__Pillar-module__Pillar__link___yiBNY{margin-top:auto}:root{--brand-Card-animation-easing:cubic-bezier(.01, .73, .08, .93);--brand-Card-animation-duration:.4s;--brand-Card-padding-inline:var(--base-size-20);--brand-Card-padding-block:var(--base-size-32);--brand-Card-maxWidth:26.25rem}:root,[data-color-mode=light]{--brand-Card-background-default:var(--brand-color-canvas-default);--brand-Card-background-overlay:#f2f5f333}[data-color-mode=dark]{--brand-Card-background-default:var(--brand-color-canvas-subtle);--brand-Card-background-overlay:#f2f5f30d}.Primer_Brand__Card-module__Card___ByGEk{--Card-grid-template-rows:auto auto auto auto auto auto 1fr auto;color:var(--brand-color-text-default);padding:var(--brand-Card-padding-block) var(--brand-Card-padding-inline);grid-template:"image image""leadingVisual leadingVisual""icon icon""tokens tokens""label label""heading heading""description description"1fr"action action"/1fr 1fr;grid-template-rows:var(--Card-grid-template-rows);border-radius:var(--brand-borderRadius-medium);flex:auto;height:100%;-webkit-text-decoration:none;text-decoration:none;display:grid;position:relative}@media screen and (width>=64rem){.Primer_Brand__Card-module__Card___ByGEk{--brand-Card-padding-inline:var(--base-size-32)}}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card___ByGEk{--brand-Card-padding-block:var(--base-size-64);--brand-Card-padding-inline:var(--base-size-40);text-align:center}@media screen and (width>=64rem){.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card___ByGEk{--brand-Card-padding-inline:var(--base-size-80)}}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card___ByGEk{grid-template-columns:1fr;grid-template-areas:"image""leadingVisual""icon""tokens""label""heading""description""action";justify-items:center}.Primer_Brand__Card-module__Card--backgroundColor-default___azlLW{background-color:var(--brand-Card-background-default)}.Primer_Brand__Card-module__Card--backgroundColor-subtle___GNf9B{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Card-module__Card--backgroundColor-none___ZURf_{background-color:#0000}.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{--Card-grid-template-rows:auto auto auto auto auto 1fr auto auto;grid-template-areas:"image image""leadingVisual leadingVisual""icon icon""label label""heading heading""description description""tokens tokens""action action"}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{grid-template-areas:"image""leadingVisual""icon""label""heading""description""tokens""action"}.Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f{--Card-grid-template-rows:auto auto auto auto auto 1fr auto auto;grid-template-areas:"leadingVisual leadingVisual""icon icon""tokens tokens""label label""heading heading""description description""action action""image image"}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f{grid-template-areas:"leadingVisual""icon""tokens""label""heading""description""action""image"}.Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{--Card-grid-template-rows:auto auto auto auto 1fr auto auto auto;grid-template-areas:"leadingVisual leadingVisual""icon icon""label label""heading heading""description description""tokens tokens""action action""image image"}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M{grid-template-areas:"leadingVisual""icon""label""heading""description""tokens""action""image"}.Primer_Brand__Card-module__Card--hasLeadingVisual___JnH6q{--brand-Card-padding-block:var(--base-size-64);--brand-Card-padding-inline:var(--base-size-40)}.Primer_Brand__Card-module__Card--imagePos-block-end___I2w2f .Primer_Brand__Card-module__Card__image___zt4oH{margin-bottom:0;margin-top:var(--base-size-28)}.Primer_Brand__Card-module__Card--maxWidth___sqVhD{max-width:var(--brand-Card-maxWidth)}.Primer_Brand__Card-module__Card--fullWidth___j46z5{max-width:none;max-width:initial}.Primer_Brand__Card-module__Card--variant-minimal___lq45H,.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--variant-minimal___lq45H{padding:0}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa{--Card-arrowAction-endInset:var(--base-size-40)}.Primer_Brand__Card-module__Card___ByGEk:hover{-webkit-text-decoration:none;text-decoration:none}.Primer_Brand__Card-module__Card__link___Ye5mq{color:currentColor;-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__Card-module__Card__link___Ye5mq code,.Primer_Brand__Card-module__Card__description___KN9CH code{font-family:var(--brand-fontStack-monospace);font-size:calc(1em - 1px);font-weight:var(--base-text-weight-regular);color:var(--brand-InlineCode-color-fg-default);background-color:var(--brand-InlineCode-bgColor);padding-block:0;padding-inline:var(--base-size-4);border-radius:var(--base-size-2);white-space:normal;word-wrap:anywhere;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:1.6}.Primer_Brand__Card-module__Card--disableAnimation___Zv8eW:hover .Primer_Brand__Card-module__Card__link___Ye5mq{-webkit-text-decoration:underline!important;text-decoration:underline!important}.Primer_Brand__Card-module__Card__link___Ye5mq:focus{outline:none}.Primer_Brand__Card-module__Card__link___Ye5mq:before{content:"";position:absolute;inset:0}.Primer_Brand__Card-module__Card--border___nNZlZ{border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Card-module__Card__outer___QBN0D{height:100%}.Primer_Brand__Card-module__Card__outer___QBN0D:has(.Primer_Brand__Card-module__Card--variant-minimal___lq45H){border-radius:var(--brand-borderRadius-small)}.Primer_Brand__Card-module__Card__outer___QBN0D:focus-within{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Card-module__Card__outer___QBN0D:has(.Primer_Brand__Card-module__Card--variant-minimal___lq45H):focus-within{outline-offset:var(--base-size-12)}.Primer_Brand__Card-module__Card__image___zt4oH{border-radius:var(--brand-borderRadius-medium);grid-area:image;margin-block-end:var(--base-size-28);overflow:hidden}.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-inline:calc(var(--brand-Card-padding-inline) * -1)}.Primer_Brand__Card-module__Card__image--position-block-start___r8NDr.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-start:calc(var(--brand-Card-padding-block) * -1)}.Primer_Brand__Card-module__Card__image--position-block-end___FHlIj.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-end:calc(var(--brand-Card-padding-block) * -1)}.Primer_Brand__Card-module__Card--border___nNZlZ .Primer_Brand__Card-module__Card__image--position-block-start___r8NDr.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{border-end-end-radius:0;border-end-start-radius:0}.Primer_Brand__Card-module__Card--border___nNZlZ .Primer_Brand__Card-module__Card__image--position-block-end___FHlIj.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-start-start-radius:0;border-start-end-radius:0}.Primer_Brand__Card-module__Card--variant-minimal___lq45H .Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-inline:0}.Primer_Brand__Card-module__Card--variant-minimal___lq45H .Primer_Brand__Card-module__Card__image--position-block-start___r8NDr.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-start:0}.Primer_Brand__Card-module__Card--variant-minimal___lq45H .Primer_Brand__Card-module__Card__image--position-block-end___FHlIj.Primer_Brand__Card-module__Card__image--padding-none___k5R8r{margin-block-end:0}.Primer_Brand__Card-module__Card__image___zt4oH img,.Primer_Brand__Card-module__Card__image___zt4oH picture,.Primer_Brand__Card-module__Card__image___zt4oH span{display:block}.Primer_Brand__Card-module__Card__leadingVisual___hyXFF{grid-area:leadingVisual;align-items:center;margin-block-end:var(--base-size-36);display:flex}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card__leadingVisual___hyXFF{justify-content:center}.Primer_Brand__Card-module__Card__leadingVisualItem___T7Ut8{max-width:100%;height:var(--base-size-40);width:auto;display:block}.Primer_Brand__Card-module__Card__icon___H4tc9{margin-bottom:var(--base-size-24);grid-area:icon}.Primer_Brand__Card-module__Card__tokens___eYuJh{gap:var(--base-size-8);margin-bottom:var(--base-size-20);flex-wrap:wrap;grid-area:tokens;display:flex}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card__tokens___eYuJh{justify-content:center}.Primer_Brand__Card-module__Card__tokens--position-block-end___jQn1b{margin-block-start:var(--base-size-20);margin-block-end:0}.Primer_Brand__Card-module__Card__label___EAot7{grid-area:label;inline-size:fit-content;max-inline-size:100%;margin-block-end:var(--base-size-20)}.Primer_Brand__Card-module__Card__heading___INFhp{grid-area:heading;margin-block-end:var(--base-size-12)}.Primer_Brand__Card-module__Card__description___KN9CH{grid-area:description;margin-block-end:var(--base-size-24)}.Primer_Brand__Card-module__Card__action___C6sRY{pointer-events:none;grid-area:action;align-items:center;max-inline-size:100%;margin-block-start:auto;display:inline-flex}.Primer_Brand__Card-module__Card__actionIcon___RkX8K{flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-overflow:clip;white-space:normal;min-inline-size:0;display:block;overflow:visible}.Primer_Brand__Card-module__Card___ByGEk:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__action___C6sRY{inline-size:100%;min-inline-size:0}.Primer_Brand__Card-module__Card___ByGEk:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__action___C6sRY>span:first-child{min-inline-size:0}.Primer_Brand__Card-module__Card___ByGEk:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-overflow:clip;white-space:normal;word-wrap:anywhere;overflow:visible}.Primer_Brand__Card-module__Card--align-center___geXUu:not(.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa) .Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-align:center}.Primer_Brand__Card-module__Card__actionLabelClip___XkCTY{display:contents}.Primer_Brand__Card-module__Card--tokensPosition-block-end___eF64M .Primer_Brand__Card-module__Card__action___C6sRY{margin-block-start:var(--base-size-20)}.Primer_Brand__Card-module__Card__action--arrowOnly____4i56{--actionArrow-duration:.3s;min-height:var(--base-size-40);width:auto;min-inline-size:0;max-inline-size:calc(100% - var(--Card-arrowAction-endInset));-moz-column-gap:var(--base-size-8);justify-content:flex-start;column-gap:var(--base-size-8);padding-block:var(--base-size-4);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-Card-background-overlay);flex-shrink:0;margin-block-start:var(--base-size-20);padding-inline-start:var(--base-size-12);padding-inline-end:var(--base-size-4);overflow:hidden}.Primer_Brand__Card-module__Card__actionIcon--arrowOnly___Vi3cC{width:var(--base-size-32);min-width:var(--base-size-32);height:var(--base-size-32);min-height:var(--base-size-32);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-color-canvas-default)}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card__action___C6sRY{justify-content:center}.Primer_Brand__Card-module__Card__action___C6sRY,.Primer_Brand__Card-module__Card__action___C6sRY span{color:var(--brand-Link-color-accent)}.Primer_Brand__Card-module__Card__action___C6sRY,.Primer_Brand__Card-module__Card__action___C6sRY *{cursor:inherit}.Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{margin-inline-start:var(--base-size-4)}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{--ExpandableArrow-duration:var(--brand-Card-animation-duration);--ExpandableArrow-easing:var(--brand-Card-animation-easing)}.Primer_Brand__Card-module__Card__actionIcon--arrowOnly___Vi3cC .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{margin-inline-start:0}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__description___KN9CH{margin-bottom:var(--base-size-12)}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__action___C6sRY{justify-self:start;min-inline-size:0}@media (hover:hover){.Primer_Brand__Card-module__Card__action--arrowOnly____4i56{-moz-column-gap:0;transition:border-color var(--actionArrow-duration) ease-out, background-color var(--actionArrow-duration) ease-out, column-gap var(--actionArrow-duration) ease-out, padding-inline var(--actionArrow-duration) ease-out;transition:border-color var(--actionArrow-duration) ease-out, background-color var(--actionArrow-duration) ease-out, column-gap var(--actionArrow-duration) ease-out, padding-inline var(--actionArrow-duration) ease-out, -moz-column-gap var(--actionArrow-duration) ease-out;background-color:#0000;border-color:#0000;column-gap:0;padding-inline:0}.Primer_Brand__Card-module__Card__actionLabelClip___XkCTY{--actionLabelClip-duration:.4s;opacity:0;min-inline-size:0;max-inline-size:0;transform:translateX(calc(var(--base-size-12) * -1));transition:max-inline-size .4s var(--brand-Card-animation-easing), opacity .4s ease-out, transform .4s ease-out, margin-inline .4s ease-out, padding-inline .4s ease-out;transition:max-inline-size var(--actionLabelClip-duration) var(--brand-Card-animation-easing), opacity var(--actionLabelClip-duration) ease-out, transform var(--actionLabelClip-duration) ease-out, margin-inline var(--actionLabelClip-duration) ease-out, padding-inline var(--actionLabelClip-duration) ease-out;background-color:#0000;flex:auto;align-self:stretch;align-items:center;margin-inline:0;padding-inline:0;display:inline-flex;overflow:hidden}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__actionLabel___nT5Pl{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}.Primer_Brand__Card-module__Card--align-center___geXUu .Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa .Primer_Brand__Card-module__Card__action___C6sRY{justify-self:center}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:focus-within .Primer_Brand__Card-module__Card__action--arrowOnly____4i56,.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:hover .Primer_Brand__Card-module__Card__action--arrowOnly____4i56{-moz-column-gap:var(--base-size-8);column-gap:var(--base-size-8);border-color:var(--brand-color-border-default);background-color:var(--brand-Card-background-overlay);padding-inline-start:var(--base-size-12);padding-inline-end:var(--base-size-4)}.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:focus-within .Primer_Brand__Card-module__Card__actionLabelClip___XkCTY,.Primer_Brand__Card-module__Card--ctaVariant-arrow___UMWZa:hover .Primer_Brand__Card-module__Card__actionLabelClip___XkCTY{opacity:1;max-inline-size:100%;margin-inline-start:calc(var(--base-size-12) * -1);margin-inline-end:0;padding-inline-start:var(--base-size-12);padding-inline-end:var(--base-size-4);transform:translate(0)}.Primer_Brand__Card-module__Card___ByGEk:focus-within .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ,.Primer_Brand__Card-module__Card___ByGEk:hover .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ{transform:translateX(var(--base-size-2))}.Primer_Brand__Card-module__Card___ByGEk:hover .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ path:nth-of-type(2),.Primer_Brand__Card-module__Card___ByGEk:focus-within .Primer_Brand__Card-module__Card--expandableArrow___ORmuZ path:nth-of-type(2){stroke-dashoffset:20px}.Primer_Brand__Card-module__Card--disableAnimation___Zv8eW,.Primer_Brand__Card-module__Card--disableAnimation___Zv8eW *{transition:none;animation:none}@media (prefers-reduced-motion:reduce){.Primer_Brand__Card-module__Card___ByGEk,.Primer_Brand__Card-module__Card___ByGEk:before,.Primer_Brand__Card-module__Card___ByGEk:after,.Primer_Brand__Card-module__Card___ByGEk *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__SectionIntro-module__SectionIntro___RduRB{gap:var(--base-size-16);padding-block:var(--base-size-24);flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__SectionIntro-module__SectionIntro___RduRB img,.Primer_Brand__SectionIntro-module__SectionIntro___RduRB picture{display:block}.Primer_Brand__SectionIntro-module__SectionIntro-heading--muted___CdGWF{color:var(--brand-color-text-muted)}.Primer_Brand__SectionIntro-module__SectionIntro-heading--muted___CdGWF em,.Primer_Brand__SectionIntro-module__SectionIntro-heading--muted___CdGWF b{color:var(--brand-color-text-default);font-style:normal;font-weight:inherit}.Primer_Brand__SectionIntro-module__SectionIntro--align-start___C59mu{text-align:start}.Primer_Brand__SectionIntro-module__SectionIntro--align-center___qU_a9{text-align:center;padding-inline:var(--base-size-24);align-items:center}.Primer_Brand__SectionIntro-module__SectionIntro-heading___u6_Wl{max-width:24ch}.Primer_Brand__SectionIntro-module__SectionIntro--full-width___HROKL .Primer_Brand__SectionIntro-module__SectionIntro-heading___u6_Wl{max-width:none}.Primer_Brand__SectionIntro-module__SectionIntro-label___ZjciO{margin-block-end:var(--base-size-2)}.Primer_Brand__SectionIntro-module__SectionIntro-description___Sz93l{max-width:50ch;padding-block-start:var(--base-size-2)}.Primer_Brand__SectionIntro-module__SectionIntro-link___dePuF{margin-top:var(--base-size-16)}@keyframes Primer_Brand__TextRevealAnimation-module__wipe___Mztl1{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq{opacity:0;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--visible___KIbWH{opacity:1}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--animated___NuoAA{width:100%;min-height:1lh;position:relative}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--animated___NuoAA:after{content:"";background-color:var(--brand-color-accent-primary);transform-origin:100%;width:100%;height:100%;animation:Primer_Brand__TextRevealAnimation-module__wipe___Mztl1 var(--brand-animation-duration-extended) forwards var(--brand-animation-easing-default);animation-delay:var(--animation-delay);display:inline;position:absolute;top:0;right:0}@media (prefers-reduced-motion:reduce){.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation--animated___NuoAA:after{display:none}.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq:before,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq:after,.Primer_Brand__TextRevealAnimation-module__TextRevealAnimation___dpkSq *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__Prose-module__Prose___X2BXE{font-family:var(--brand-body-fontFamily);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);color:var(--brand-color-text-default)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo{font-size:var(--brand-text-size-300);line-height:1.7}.Primer_Brand__Prose-module__Prose___X2BXE *+*{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:auto;margin-block-start:1em;margin-block-start:var(--spacing,1em)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo *+*{--spacing:var(--base-size-40)}.Primer_Brand__Prose-module__Prose--lineLength___ws7gn{max-width:var(--brand-Prose-lineLength)}.Primer_Brand__Prose-module__Prose___X2BXE h1{font-weight:var(--brand-heading-weight-700);font-size:var(--brand-text-size-700);line-height:var(--brand-text-lineHeight-700);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-text-letterSpacing-700)}.Primer_Brand__Prose-module__Prose___X2BXE h2{font-weight:var(--brand-heading-weight-600);font-size:var(--brand-text-size-600);line-height:var(--brand-text-lineHeight-600);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-text-letterSpacing-600)}.Primer_Brand__Prose-module__Prose--lineLength___ws7gn h2{max-width:26ch}.Primer_Brand__Prose-module__Prose___X2BXE h3{font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-400);line-height:var(--brand-heading-lineHeight-400);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-400)}.Primer_Brand__Prose-module__Prose--lineLength___ws7gn h1{max-width:32ch}.Primer_Brand__Prose-module__Prose___X2BXE h4{--spacing:var(--base-size-48);font-weight:var(--brand-heading-weight-400);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-300)}.Primer_Brand__Prose-module__Prose___X2BXE h5,.Primer_Brand__Prose-module__Prose___X2BXE h6{--spacing:var(--base-size-48);font-weight:var(--brand-text-subhead-weight-medium);font-size:var(--brand-text-subhead-size-medium);line-height:var(--brand-text-subhead-lineHeight-medium);font-family:var(--brand-heading-fontFamily);letter-spacing:var(--brand-heading-letterSpacing-200)}.Primer_Brand__Prose-module__Prose___X2BXE h1,.Primer_Brand__Prose-module__Prose___X2BXE h2,.Primer_Brand__Prose-module__Prose___X2BXE h3{--spacing:var(--base-size-64)}.Primer_Brand__Prose-module__Prose___X2BXE h1+*,.Primer_Brand__Prose-module__Prose___X2BXE h2+*,.Primer_Brand__Prose-module__Prose___X2BXE h3+*,.Primer_Brand__Prose-module__Prose___X2BXE p{--spacing:var(--base-size-24)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo p{--spacing:var(--base-size-40)}.Primer_Brand__Prose-module__Prose___X2BXE ul,.Primer_Brand__Prose-module__Prose___X2BXE ol{--spacing:var(--base-size-16);gap:var(--base-size-8);line-height:var(--brand-text-lineHeight-300);flex-direction:column;margin-inline-start:var(--base-size-24);padding:0;display:flex}.Primer_Brand__Prose-module__Prose--editorial___DtuDo ul,.Primer_Brand__Prose-module__Prose--editorial___DtuDo ol{--spacing:var(--base-size-48);gap:var(--base-size-16);line-height:1.7}.Primer_Brand__Prose-module__Prose___X2BXE ul{list-style-type:image;list-style-image:var(--brand-Prose-unorderedList-imageUrl)}.Primer_Brand__Prose-module__Prose___X2BXE li{--spacing:0}.Primer_Brand__Prose-module__Prose___X2BXE strong,.Primer_Brand__Prose-module__Prose___X2BXE b{font-weight:var(--brand-text-weight-heavy)!important}.Primer_Brand__Prose-module__Prose___X2BXE em{font-variation-settings:"ital" 10;font-synthesis:none}.Primer_Brand__Prose-module__Prose___X2BXE a{color:var(--brand-InlineLink-color-rest);-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__Prose-module__Prose___X2BXE a:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__Prose-module__Prose___X2BXE a:active:after{border-color:var(--brand-InlineLink-color-pressed)}.Primer_Brand__Prose-module__Prose___X2BXE code{font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);white-space:break-spaces;padding:var(--base-size-4) var(--base-size-8);border-radius:var(--brand-borderRadius-small);background-color:var(--brand-Prose-code-bgColor)}.Primer_Brand__Prose-module__Prose___X2BXE pre{padding:var(--base-size-16);border-radius:var(--brand-borderRadius-medium);background-color:var(--brand-Prose-code-bgColor)}.Primer_Brand__Prose-module__Prose___X2BXE pre code{padding:0}.Primer_Brand__Prose-module__Prose___X2BXE img{--spacing:var(--brand-Prose-img-spacing);max-width:100%;height:auto;margin-left:auto;margin-right:auto;margin-block-end:var(--spacing);display:block}.Primer_Brand__Prose-module__Prose--editorial___DtuDo figure img{border-radius:var(--brand-borderRadius-medium);margin-block-end:0;display:block}.Primer_Brand__Prose-module__Prose___X2BXE blockquote{--spacing:var(--brand-Prose-blockquote-spacing);font-size:var(--brand-text-size-400);line-height:var(--brand-text-lineHeight-400);padding-top:var(--base-size-48);padding-bottom:var(--base-size-8);margin-bottom:var(--spacing);position:relative}.Primer_Brand__Prose-module__Prose--default___ZqcxT blockquote{padding-left:var(--base-size-40)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo blockquote{font-size:var(--brand-text-size-500);line-height:var(--brand-text-lineHeight-500);font-weight:var(--brand-text-weight-500);padding-top:var(--base-size-64)}@media screen and (width>=87.5rem){.Primer_Brand__Prose-module__Prose--editorial___DtuDo blockquote{margin-block:var(--base-size-40)}}.Primer_Brand__Prose-module__Prose___X2BXE blockquote:before{content:"“";font-size:var(--base-size-48);line-height:var(--base-size-64);font-weight:var(--base-text-weight-extrabold);position:absolute;top:0}.Primer_Brand__Prose-module__Prose--editorial___DtuDo blockquote:before{color:var(--brand-color-accent-primary);font-size:var(--base-size-64);line-height:var(--base-size-64)}.Primer_Brand__Prose-module__Prose--default___ZqcxT blockquote:after{content:"";width:var(--brand-borderWidth-thick);background-color:var(--base-color-scale-indigo-5);background-image:linear-gradient(180deg, var(--base-color-scale-blue-5), var(--base-color-scale-purple-5));height:100%;display:block;position:absolute;top:0;left:0}.Primer_Brand__Prose-module__Prose___X2BXE figure figcaption{--spacing:var(--base-size-24);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);color:var(--brand-color-text-muted)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo figcaption{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);font-weight:var(--brand-text-weight-100)}.Primer_Brand__Prose-module__Prose--editorial___DtuDo hr{--spacing:var(--base-size-64);border:1px solid var(--brand-color-border-muted);margin-block-start:var(--spacing);margin-block-end:var(--spacing)}.Primer_Brand__Prose-module__Prose___X2BXE video,.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube\.com],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtu\.be],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube-nocookie\.com]{--spacing:var(--brand-Prose-img-spacing);border-radius:var(--brand-borderRadius-medium);height:auto;margin-left:auto;margin-right:auto;margin-block-end:var(--spacing);display:block}.Primer_Brand__Prose-module__Prose___X2BXE video{max-width:100%}.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube\.com],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtu\.be],.Primer_Brand__Prose-module__Prose___X2BXE iframe[src*=youtube-nocookie\.com]{aspect-ratio:16/9;width:100%}@media (prefers-reduced-motion:reduce){.Primer_Brand__Prose-module__Prose___X2BXE a,.Primer_Brand__Prose-module__Prose___X2BXE a:before,.Primer_Brand__Prose-module__Prose___X2BXE a:after,.Primer_Brand__Prose-module__Prose___X2BXE a *{transition:none!important}}.Primer_Brand__Prose-module__Prose___X2BXE table{--spacing:var(--base-size-32);border-collapse:collapse;border-spacing:0;width:100%;font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__Prose-module__Prose___X2BXE table caption{text-align:left;font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-100);line-height:var(--brand-text-lineHeight-100);color:var(--brand-color-text-muted);padding-block-end:var(--base-size-24)}.Primer_Brand__Prose-module__Prose___X2BXE table th,.Primer_Brand__Prose-module__Prose___X2BXE table td{padding-block:var(--base-size-16);padding-inline:var(--base-size-12);text-align:left;vertical-align:top;border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__Prose-module__Prose___X2BXE table th:first-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:first-child,.Primer_Brand__Prose-module__Prose___X2BXE table th:last-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:last-child{padding-inline:0}.Primer_Brand__Prose-module__Prose___X2BXE table th{font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-400);line-height:var(--brand-text-lineHeight-100);color:var(--brand-color-text-muted)}.Primer_Brand__Prose-module__Prose___X2BXE table thead th{border-bottom:var(--brand-borderWidth-thick) solid var(--brand-color-border-default)}.Primer_Brand__Prose-module__Prose___X2BXE table tbody tr:last-child td{border-bottom:none}.Primer_Brand__Prose-module__Prose--editorial___DtuDo table{--spacing:var(--base-size-48)}.Primer_Brand__Prose-module__Prose___X2BXE td>ul:first-child,.Primer_Brand__Prose-module__Prose___X2BXE td>ol:first-child{margin-block-start:0}@media screen and (width>=48rem){.Primer_Brand__Prose-module__Prose___X2BXE table th,.Primer_Brand__Prose-module__Prose___X2BXE table td{padding:var(--base-size-16) var(--base-size-8)}.Primer_Brand__Prose-module__Prose___X2BXE table th:not(:first-child):not(:last-child),.Primer_Brand__Prose-module__Prose___X2BXE table td:not(:first-child):not(:last-child){padding-inline:var(--base-size-16)}.Primer_Brand__Prose-module__Prose___X2BXE table th:first-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:first-child{padding-inline-start:0}.Primer_Brand__Prose-module__Prose___X2BXE table th:last-child,.Primer_Brand__Prose-module__Prose___X2BXE table td:last-child{padding-inline-end:0}.Primer_Brand__Prose-module__Prose___X2BXE table tbody tr:hover{background-color:var(--brand-color-canvas-subtle)}}@media screen and (width<=47.99rem){.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]){border-collapse:separate;border-spacing:0;width:100%;box-shadow:none;font-size:var(--brand-text-size-200);background:0 0}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) thead{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}:is(.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) tbody,.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) tr){width:100%;display:block}:is(.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) th:not(:first-child):not(:last-child),.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) td:not(:first-child):not(:last-child)){padding-inline:0}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) tr{border-block-start:var(--brand-borderWidth-thicker) solid var(--brand-color-border-muted);margin-block-end:var(--spacing);padding-block-start:var(--base-size-20)}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]{width:100%;margin:0 0 16px;margin:0 0 var(--base-size-16,16px) 0;border:none;flex-direction:column;align-items:flex-start;padding:0;display:flex}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]:not(:last-child){border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-end:var(--base-size-20)}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]:before{content:attr(data-label);color:var(--brand-color-text-muted);text-align:left;font-weight:var(--brand-text-weight-400);margin-block-end:var(--base-size-4)}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) td:not([data-label]){width:100%;border:none;margin-block-end:var(--base-size-16);padding:0;display:block}.Primer_Brand__Prose-module__Prose___X2BXE table:has(td[data-label]) td:not([data-label]):not(:last-child){border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block-end:var(--base-size-20)}.Primer_Brand__Prose-module__Prose___X2BXE td[data-label]:last-child{margin-block-end:0}}:root{--brand-Prose-blockquote-spacing:var(--base-size-24);--brand-Prose-img-spacing:var(--base-size-48);--brand-Prose-lineLength:68ch}:root,[data-color-mode=light]{--brand-Prose-unorderedList-imageUrl:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 aria-hidden=%27true%27 focusable=%27false%27 role=%27img%27 viewBox=%270 -3 16 16%27 width=%2716%27 height=%2716%27 fill=%27black%27 style=%27display: inline-block; vertical-align: text-bottom; overflow: visible;%27%3e%3cpath d=%27M2 7.75A.75.75 0 0 1 2.75 7h10a.75.75 0 0 1 0 1.5h-10A.75.75 0 0 1 2 7.75Z%27%3e%3c/path%3e%3c/svg%3e");--brand-Prose-code-bgColor:var(--base-color-scale-indigo-0)}[data-color-mode=dark]{--brand-Prose-unorderedList-imageUrl:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 aria-hidden=%27true%27 focusable=%27false%27 role=%27img%27 viewBox=%270 -3 16 16%27 width=%2716%27 height=%2716%27 fill=%27white%27 style=%27display: inline-block; vertical-align: text-bottom; overflow: visible;%27%3e%3cpath d=%27M2 7.75A.75.75 0 0 1 2.75 7h10a.75.75 0 0 1 0 1.5h-10A.75.75 0 0 1 2 7.75Z%27%3e%3c/path%3e%3c/svg%3e");--brand-Prose-code-bgColor:var(--base-color-scale-indigo-9)}.Primer_Brand__Captions-module__Captions___xrhu1{flex:0 0 var(--base-size-64);width:100%;padding:var(--base-size-8) var(--base-size-16) 0;pointer-events:none;background-color:var(--base-color-scale-black-0);justify-content:center;align-items:center;display:flex}.Primer_Brand__Captions-module__Captions__text___e1cBR{color:var(--brand-VideoPlayer-closedCaption-text-fgColor)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container___WmQho{border-radius:var(--brand-borderRadius-medium);background-color:var(--base-color-scale-black-0);flex-direction:column;width:100%;display:flex;overflow:hidden}.Primer_Brand__VideoPlayer-module__VideoPlayer__overlayContainer___K_dl1{flex:1;height:100%;position:relative}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__container___WmQho{border:var(--brand-borderWidth-thin) solid ButtonBorder}}.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw{--brand-VideoPlayer-controls-min-height:56px;width:100%;max-height:calc(100vh - 56px);max-height:calc(100vh - var(--brand-VideoPlayer-controls-min-height));margin:0 auto;display:block}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--fullscreen___p73I7 .Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw{height:100%;position:absolute}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz{font:inherit;z-index:1;background:#0003;border:none;width:100%;height:100%;position:absolute;top:0;left:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz svg{top:calc(var(--brand-VideoPlayer-controls-min-height) / 2);position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay--transparent___Nc60m{background:0 0}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButtonOverlay___J7kgz:focus-visible{outline:var(--brand-borderWidth-thicker) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__VideoPlayer-module__VideoPlayer__playButton___qff0F{width:25%;height:25%;max-width:var(--brand-VideoPlayer-playButton-width);max-height:var(--brand-VideoPlayer-playButton-height);opacity:.8;color:var(--brand-videoPlayer-playButton-fgColor-rest)}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__playButton___qff0F{color:highlight;opacity:1}}.Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j{transition:var(--brand-VideoPlayer-transition);z-index:2;width:100%;padding:var(--base-size-16);color:var(--brand-videoPlayer-title-fgColor);grid-gap:var(--base-size-12);background:var(--brand-videoPlayer-title-bgColor);transition:all var(--brand-animation-duration-fast) var(--brand-animation-easing-default);grid-template-columns:auto auto;justify-content:flex-start;align-items:center;display:grid;position:absolute;top:0;left:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j.Primer_Brand__VideoPlayer-module__VideoPlayer__title--hidden___gJxj8{opacity:0;visibility:hidden}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j{color:canvastext;background:canvas}}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar___L4653{min-height:var(--brand-VideoPlayer-controls-min-height);grid-gap:var(--base-size-16);justify-content:space-between;align-items:center;gap:var(--base-size-16);border-bottom-right-radius:var(--brand-borderRadius-medium);border-bottom-left-radius:var(--brand-borderRadius-medium);width:100%;padding:var(--base-size-12) var(--base-size-16);pointer-events:all;opacity:1;grid-template-columns:1fr;grid-auto-flow:column;display:grid}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar__row1___SdOxD,.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar__row2___EZoJX{align-items:center;gap:var(--base-size-16);display:flex}@media (width<=34rem){.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar___L4653{gap:var(--base-size-12);grid-template-rows:auto auto;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlsBar__row2___EZoJX{justify-self:space-evenly;justify-content:space-evenly;width:100%}}.Primer_Brand__VideoPlayer-module__VideoPlayer__controls___hNpxI:focus,.Primer_Brand__VideoPlayer-module__VideoPlayer__controls___hNpxI:focus-within{bottom:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4{font:inherit;cursor:pointer;width:auto;height:var(--base-size-24);box-sizing:content-box;background:0 0;border:none;padding:0;position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-6);opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4:not(.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt):focus-visible{border-radius:var(--brand-borderRadius-small)}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4 svg{color:var(--brand-videoPlayer-controls-fgColor)}.Primer_Brand__VideoPlayer-module__VideoPlayer__seek___Z4IA2{align-items:center;gap:var(--base-size-16);flex:1;display:flex}.Primer_Brand__VideoPlayer-module__VideoPlayer__progressTime___GvTKs{color:var(--brand-videoPlayer-controls-fgColor)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__totalTime___nWILS{display:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__progressBar___wYSPx{height:var(--base-size-6);flex:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt{border-radius:var(--brand-borderRadius-medium);padding:.125rem var(--base-size-4);border:.125rem solid var(--brand-videoPlayer-closedCaption-borderColor-enabled);background:var(--brand-videoPlayer-closedCaption-bgColor-enabled);position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL{background-color:#0000}.Primer_Brand__VideoPlayer-module__VideoPlayer__ccText___xIu2v{color:var(--brand-videoPlayer-closedCaption-fgColor-enabled);line-height:25px}.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL .Primer_Brand__VideoPlayer-module__VideoPlayer__ccText___xIu2v{color:var(--brand-videoPlayer-closedCaption-fgColor-disabled)}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4 svg{color:buttontext}.Primer_Brand__VideoPlayer-module__VideoPlayer__iconControl___Tw7A4:focus-visible{outline-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt:focus-visible{outline:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt:not(.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL){background:highlight;border-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__closedCaption___PAvgt:not(.Primer_Brand__VideoPlayer-module__VideoPlayer__ccOff___svmJL) .Primer_Brand__VideoPlayer-module__VideoPlayer__ccText___xIu2v{color:highlighttext;background-color:highlight}}.Primer_Brand__VideoPlayer-module__VideoPlayer__range___Tmjbg{width:100%;min-width:var(--brand-VideoPlayer-range-minWidth);height:var(--brand-VideoPlayer-range-height);background-color:var(--brand-videoPlayer-range-bgColor-default);border-radius:var(--brand-VideoPlayer-range-borderRadius);position:relative}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl{font:inherit;appearance:none;z-index:1;width:100%;height:var(--brand-VideoPlayer-range-height);cursor:pointer;opacity:0;background:0 0;margin:0;display:block;position:absolute;top:0;left:0}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-8);border-radius:var(--brand-borderRadius-small);opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__range___Tmjbg:hover .Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl{opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl::-moz-range-track{background:0 0;border:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeInput____wivl::-webkit-slider-runnable-track{background:0 0;border:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK{appearance:none;border-radius:var(--brand-VideoPlayer-range-borderRadius);width:100%;height:var(--brand-VideoPlayer-range-height);border:0;position:absolute;top:0;left:0;overflow:hidden}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-bar{background-color:var(--brand-videoPlayer-range-bgColor-default)}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-value{background-color:var(--brand-videoPlayer-range-bgColor-progress)}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-moz-progress-bar{background:var(--brand-videoPlayer-range-bgColor-progress)}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-lower{background-color:var(--brand-videoPlayer-range-bgColor-progress);border:none}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-upper{background-color:var(--brand-videoPlayer-range-bgColor-default);border:none}@media (forced-colors:active){.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-bar{background-color:fieldtext}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-webkit-progress-value{background-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-moz-progress-bar{background:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-lower{background-color:highlight}.Primer_Brand__VideoPlayer-module__VideoPlayer__rangeProgress___dDpNK::-ms-fill-upper{background-color:fieldtext}}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltip___mtg_l{z-index:2;width:var(--base-size-8);height:var(--base-size-8);margin-bottom:var(--base-size-16);opacity:0;position:absolute;bottom:100%;left:50%;transform:translate(-50%,50%)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltip___mtg_l:before{bottom:calc(var(--base-size-4) * -1);width:var(--base-size-12);height:var(--base-size-12);content:"";background:var(--base-color-scale-white-0);border-radius:var(--brand-borderRadius-small);position:absolute;left:0;transform:rotate(45deg)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltipContent___BoAqV{z-index:-1;box-shadow:0 var(--base-size-4) var(--base-size-4) #1b1f2433;padding:var(--brand-VideoPlayer-tooltip-padding-block) var(--brand-VideoPlayer-tooltip-padding-inline);border-radius:var(--brand-borderRadius-medium);background:#fff;position:absolute;bottom:0;left:50%;transform:translate(-50%)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltipText____Syz7{color:var(--base-color-scale-gray-9)}.Primer_Brand__VideoPlayer-module__VideoPlayer__tooltip-visible___xOTRZ{opacity:1}.Primer_Brand__VideoPlayer-module__VideoPlayer__controlTextColor___YMFpe{color:var(--base-color-scale-white-0)}.Primer_Brand__VideoPlayer-module__VideoPlayer__seekTime___HLf0h{white-space:nowrap}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j span{font-weight:var(--brand-text-weight-300);font-size:var(--brand-text-size-300);line-height:var(--brand-text-lineHeight-300);letter-spacing:var(--brand-text-letterSpacing-300)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__title___F1E2j svg{width:var(--base-size-24);height:var(--base-size-24)}.Primer_Brand__VideoPlayer-module__VideoPlayer__container--small___TxAd8 .Primer_Brand__VideoPlayer-module__VideoPlayer__controls___hNpxI{position:initial;position:static}@media (prefers-reduced-motion:reduce){.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw,.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw:before,.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw:after,.Primer_Brand__VideoPlayer-module__VideoPlayer___iNxEw *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.Primer_Brand__VolumeControl-module__VolumeControl___rq9Ra{max-width:100px}:root{--brand-VideoPlayer-tooltip-padding-inline:.3125rem;--brand-VideoPlayer-tooltip-padding-block:.3125rem;--brand-VideoPlayer-transition:all var(--brand-animation-duration-fast) var(--brand-animation-easing-default);--brand-VideoPlayer-range-minWidth:4.6875rem;--brand-VideoPlayer-range-borderRadius:.1875rem;--brand-VideoPlayer-range-height:.375rem;--brand-VideoPlayer-playButton-width:var(--base-size-96);--brand-VideoPlayer-playButton-height:var(--base-size-96);--brand-VideoPlayer-closedCaption-text-padding:.625rem;--brand-VideoPlayer-closedCaption-text-bgColor:#000000bf;--brand-VideoPlayer-closedCaption-text-fgColor:var(--base-color-scale-white-0);--brand-VideoPlayer-closedCaption-margin:0 auto 15px auto}:root,[data-color-mode=light],[data-color-mode=dark]{--brand-videoPlayer-playButton-bgColor-rest:var(--base-color-scale-blue-5);--brand-videoPlayer-playButton-fgColor-rest:var(--base-color-scale-gray-0);--brand-videoPlayer-title-bgColor:linear-gradient(180deg, #000000e6, #00000073 66%, transparent);--brand-videoPlayer-title-fgColor:var(--base-color-scale-gray-0);--brand-videoPlayer-controls-bgColor:var(--base-color-scale-black-0);--brand-videoPlayer-controls-fgColor:var(--base-color-scale-gray-0);--brand-videoPlayer-closedCaption-bgColor-enabled:var(--base-color-scale-gray-0);--brand-videoPlayer-closedCaption-fgColor-enabled:var(--base-color-scale-black-0);--brand-videoPlayer-closedCaption-fgColor-disabled:var(--base-color-scale-gray-0);--brand-videoPlayer-closedCaption-borderColor-enabled:var(--base-color-scale-gray-0);--brand-videoPlayer-range-bgColor-default:var(--base-color-scale-gray-0);--brand-videoPlayer-range-bgColor-progress:var(--base-color-scale-blue-4)}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer___vOvcR{width:100%;position:relative}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__video___Zai7A{width:100%;display:block}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6{right:var(--base-size-24);bottom:var(--base-size-24);width:var(--base-size-36);height:var(--base-size-36);color:var(--brand-color-text-muted);cursor:pointer;background-color:var(--brand-color-canvas-muted);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle);border-radius:var(--brand-borderRadius-full);justify-content:center;align-items:center;padding:0;display:flex;position:absolute}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__video___Zai7A[controls]+.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6{display:none}@media (forced-colors:active){.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer___vOvcR{border:var(--brand-borderWidth-thin) solid CanvasText}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6{color:buttontext;background-color:buttonface;border-color:buttontext}.Primer_Brand__MinimalVideoPlayer-module__MinimalVideoPlayer__control___bwjf6:focus-visible{outline-color:highlight}}:root,[data-color-mode=light]{--brand-LogoSuite-color-control-rest:var(--brand-color-canvas-muted);--brand-LogoSuite-color-control-hover:var(--base-color-scale-gray-1);--brand-LogoSuite-color-logo-muted:var(--brand-color-text-muted);--brand-LogoSuite-color-logo-emphasis:var(--brand-color-text-default);--brand-LogoSuite-color-logo-filter-muted:brightness(0) saturate(100%) invert(37%) sepia(7%) saturate(778%) hue-rotate(171deg) brightness(96%) contrast(91%);--brand-LogoSuite-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(12%) sepia(20%) saturate(450%) hue-rotate(172deg) brightness(100%) contrast(91%)}[data-color-mode=dark]{--brand-LogoSuite-color-control-rest:var(--brand-color-canvas-muted);--brand-LogoSuite-color-control-hover:#5a5b7c;--brand-LogoSuite-color-logo-muted:var(--brand-color-text-muted);--brand-LogoSuite-color-logo-emphasis:var(--brand-color-text-default);--brand-LogoSuite-color-logo-filter-muted:brightness(0) saturate(100%) invert(61%) sepia(8%) saturate(430%) hue-rotate(171deg) brightness(94%) contrast(92%);--brand-LogoSuite-color-logo-filter-emphasis:brightness(0) saturate(100%) invert(91%) sepia(2%) saturate(2455%) hue-rotate(193deg) brightness(107%) contrast(98%)}:root{--brand-LogoSuite-logobar-marquee-gap-condensed:var(--base-size-40);--brand-LogoSuite-logobar-marquee-gap-default:var(--base-size-96);--brand-LogoSuite-logobar-marquee-slow:60s;--brand-LogoSuite-logobar-marquee-default:30s;--brand-LogoSuite-logobar-rowGap:var(--base-size-40);--brand-LogoSuite-logobar-columnGap-condensed:var(--base-size-40);--brand-LogoSuite-logobar-columnGap-default:var(--base-size-80)}.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai{padding-block-end:var(--brand-LogoSuite-logobar-rowGap)}.Primer_Brand__LogoSuite-module__LogoSuite--default___EU2sL+.Primer_Brand__LogoSuite-module__LogoSuite--default___EU2sL{padding-block-start:var(--brand-LogoSuite-logobar-rowGap)}.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai:not(:has(.Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM)) .Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw{font-family:var(--brand-fontStack-monospace);font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100);text-transform:uppercase;color:var(--brand-color-text-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw+.Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM{padding-block-start:var(--base-size-16)}.Primer_Brand__LogoSuite-module__LogoSuite--start___Kk6GC{text-align:left}.Primer_Brand__LogoSuite-module__LogoSuite--center___byPyg,.Primer_Brand__LogoSuite-module__LogoSuite--justify___ZFxvW{text-align:center}.Primer_Brand__LogoSuite-module__LogoSuite--default___EU2sL:not(.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai+.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai) .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{padding-block-start:var(--base-size-32)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{row-gap:var(--brand-LogoSuite-logobar-rowGap);flex-wrap:wrap;justify-content:center;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--gap-default___nLZ7M{--marquee-gap:var(--brand-LogoSuite-logobar-marquee-gap-default);-moz-column-gap:var(--brand-LogoSuite-logobar-columnGap-default);column-gap:var(--brand-LogoSuite-logobar-columnGap-default)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--gap-condensed___d2k3z{--marquee-gap:var(--brand-LogoSuite-logobar-marquee-gap-condensed);-moz-column-gap:var(--brand-LogoSuite-logobar-columnGap-condensed);column-gap:var(--brand-LogoSuite-logobar-columnGap-condensed)}.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai:not(.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai+.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai) .Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw:not(.Primer_Brand__LogoSuite-module__LogoSuite__heading--visually-hidden___pTR4r)+.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm,.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai:not(.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai+.Primer_Brand__LogoSuite-module__LogoSuite___W2Pai) .Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM+.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{margin-block-start:var(--base-size-44);padding-block-start:0}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z img,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z a,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb img,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb a{width:auto;height:var(--base-size-32)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm img{display:block}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z path{fill:var(--brand-LogoSuite-color-logo-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-muted___a0P8Z img{filter:var(--brand-LogoSuite-color-logo-filter-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb path{fill:var(--brand-LogoSuite-color-logo-emphasis)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--variant-emphasis___MjgGb img{filter:var(--brand-LogoSuite-color-logo-filter-emphasis)}.Primer_Brand__LogoSuite-module__LogoSuite--start___Kk6GC .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{justify-content:center}@media screen and (width>=48rem){.Primer_Brand__LogoSuite-module__LogoSuite--justify___ZFxvW .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{justify-content:space-between}}.Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm a:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2);border-radius:var(--base-size-4)}.Primer_Brand__LogoSuite-module__LogoSuite--hasDivider___Znsqm{border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-marquee___d5jZP{align-items:center;gap:var(--base-size-24);flex-direction:row;max-width:100vw;margin:auto;display:flex;position:relative}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf{justify-content:space-around;align-items:center;gap:var(--marquee-gap);min-width:100%;animation-name:Primer_Brand__LogoSuite-module__LogobarScrollX___K2Z30;animation-duration:var(--brand-LogoSuite-logobar-marquee-default);flex-shrink:0;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:normal;animation-play-state:running;animation-fill-mode:none;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup--speed-default___ptGOl{animation-duration:var(--brand-LogoSuite-logobar-marquee-default)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup--speed-slow___s1IKV{animation-duration:var(--brand-LogoSuite-logobar-marquee-slow)}@keyframes Primer_Brand__LogoSuite-module__LogobarScrollX___K2Z30{0%{transform:translate(0)}to{transform:translateX(calc(-100% - var(--marquee-gap)))}}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee___Q0YOr:hover .Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf,.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee___Q0YOr:focus-within .Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf{animation-play-state:paused}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee___Q0YOr{padding-block:var(--base-size-4);-webkit-user-select:none;user-select:none;gap:var(--marquee-gap);flex:1;min-width:0;display:flex;overflow:hidden visible;-webkit-mask-image:linear-gradient(90deg,#0000,#000 20% 80%,#0000);mask-image:linear-gradient(90deg,#0000,#000 20% 80%,#0000)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--paused___i6vSY *{animation-play-state:paused!important}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-marquee--focused___AVQlQ .Primer_Brand__LogoSuite-module__LogoSuite__logobar-marqueeGroup___QnvBf{animation-name:none}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi{cursor:pointer;width:var(--base-size-32);height:var(--base-size-32);border-radius:var(--base-size-48);border:none;border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);background-color:var(--brand-LogoSuite-color-control-rest);transition:background-color var(--brand-animation-duration-faster);flex-shrink:0;justify-content:center;align-items:center;margin:0;padding:0;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi:hover{background-color:var(--brand-LogoSuite-color-control-hover)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi svg{width:var(--base-size-16);height:var(--base-size-16);fill:var(--brand-color-text-muted)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-playPauseButton___nkRGi path{fill:var(--brand-color-text-muted)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax{padding:0}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{gap:0;padding-inline:0}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__textContainer___hClnV{padding:var(--base-size-20);flex-direction:column;justify-content:center;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{margin-block-start:auto}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_{padding:var(--base-size-32) var(--base-size-20) var(--base-size-32);flex-direction:column;justify-content:center;display:flex}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm,.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-marquee___d5jZP{width:100%;max-width:none}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__heading___s2Xyw+.Primer_Brand__LogoSuite-module__LogoSuite__description___SRFRM{padding-block-start:var(--base-size-8)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobar___hRzWm{padding-block-start:0}@media screen and (width>=48rem){.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax{padding-inline:91px}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_{padding:var(--base-size-40)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__textContainer___hClnV{border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}@media screen and (width>=64rem){.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax{padding-inline:0}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{max-width:1280px}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__textContainer___hClnV{text-align:left;padding:var(--base-size-64)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_{padding:var(--base-size-64)}}@media screen and (width>=1281px){.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__content___tKr_a{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__LogoSuite-module__LogoSuite--gridline-expressive___Aq8ax .Primer_Brand__LogoSuite-module__LogoSuite__logobarContainer___LzoS_:first-child{border-inline-start:none}}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm{position:relative;overflow:visible}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:before{content:"";inset:calc(-1 * var(--base-size-16)) 0;z-index:1;pointer-events:none;opacity:0;-webkit-backdrop-filter:blur(var(--base-size-6));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default);position:absolute}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover:before,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within:before{opacity:1}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within svg,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover img,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within img{opacity:.7;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar-takeoverButtonContainer___gguiO{opacity:0;visibility:hidden;z-index:2;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:hover .Primer_Brand__LogoSuite-module__LogoSuite__logobar-takeoverButtonContainer___gguiO,.Primer_Brand__LogoSuite-module__LogoSuite__logobar--has-takeover___f22xm:focus-within .Primer_Brand__LogoSuite-module__LogoSuite__logobar-takeoverButtonContainer___gguiO{opacity:1;visibility:visible}.Primer_Brand__Timeline-module__Timeline___keSeT{--bulletY:calc(var(--base-size-8) / 2 - var(--brand-Timeline-bullet-size) / 2 + var(--base-size-8));margin:0;padding:0;list-style:none}.Primer_Brand__Timeline-module__Timeline__item____ME4_{max-width:var(--brand-Timeline-lineLength);color:var(--brand-color-text-default);line-height:var(--brand-Timeline-lineHeight);padding-inline-start:calc(var(--brand-Timeline-bullet-size) + var(--brand-Timeline-spacing));position:relative}.Primer_Brand__Timeline-module__Timeline--full-width___XLdKp .Primer_Brand__Timeline-module__Timeline__item____ME4_{max-width:none}.Primer_Brand__Timeline-module__Timeline__item____ME4_:not(:last-child){padding-bottom:var(--base-size-32)}.Primer_Brand__Timeline-module__Timeline__item____ME4_:before,.Primer_Brand__Timeline-module__Timeline__item____ME4_:after{content:"";position:absolute}.Primer_Brand__Timeline-module__Timeline__item____ME4_:before{width:var(--brand-Timeline-bullet-size);height:var(--brand-Timeline-bullet-size);top:var(--bulletY);border-style:solid;border-width:var(--brand-Timeline-strokeWidth);border-color:var(--brand-Timeline-line-color);border-radius:var(--brand-borderRadius-full);left:0}.Primer_Brand__Timeline-module__Timeline__item____ME4_:not(:last-child):after{top:calc(var(--bulletY) + var(--brand-Timeline-bullet-size) + var(--brand-Timeline-bullet-spacing));left:calc(var(--brand-Timeline-bullet-size) / 2 - var(--brand-Timeline-strokeWidth) / 2);width:var(--brand-Timeline-strokeWidth);height:calc(100% - var(--brand-Timeline-bullet-size) - var(--brand-Timeline-bullet-spacing) * 2);background-color:var(--brand-Timeline-line-color);border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Timeline-module__Timeline__item-text___sbSjp em,.Primer_Brand__Timeline-module__Timeline__item-text___sbSjp b{color:var(--brand-color-text-default);font-style:normal;font-weight:var(--base-text-weight-medium)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a{color:var(--brand-InlineLink-color-rest);-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-color:var(--brand-InlineLink-color-rest);text-decoration-thickness:var(--brand-borderWidth-thin);text-underline-position:under;transition:var(--brand-InlineLink-transition-timing) text-decoration;position:relative}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a:hover{text-decoration-thickness:var(--brand-borderWidth-thick)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a{font-weight:inherit;color:var(--brand-InlineLink-color-rest)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a:active{color:var(--brand-InlineLink-color-pressed)}.Primer_Brand__Timeline-module__Timeline__item____ME4_ a:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}@media (prefers-reduced-motion:reduce){.Primer_Brand__Timeline-module__Timeline__item____ME4_,.Primer_Brand__Timeline-module__Timeline__item____ME4_:before,.Primer_Brand__Timeline-module__Timeline__item____ME4_:after,.Primer_Brand__Timeline-module__Timeline__item____ME4_ *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-Timeline-line-color:var(--brand-color-border-default)}[data-color-mode=dark]{--brand-Timeline-line-color:var(--base-color-scale-gray-4)}:root{--brand-Timeline-bullet-spacing:.125rem;--brand-Timeline-bullet-size:var(--base-size-8);--brand-Timeline-spacing:var(--base-size-16);--brand-Timeline-strokeWidth:.125rem;--brand-Timeline-lineLength:44ch;--brand-Timeline-lineHeight:var(--brand-text-lineHeight-200);--brand-Bento-content-padding-spacious:3.5rem;--brand-Bento-content-padding-normal:var(--base-size-24);--brand-Bento-content-padding-condensed:var(--base-size-16);--brand-Bento-item-borderRadius-large:var(--brand-borderRadius-xlarge);--brand-Bento-item-borderRadius-medium:var(--brand-borderRadius-xlarge);--brand-Bento-item-borderRadius-small:var(--brand-borderRadius-large);--brand-Bento-gap-small:var(--base-size-20);--brand-Bento-gap-medium:var(--base-size-32);--brand-Bento-gap-large:var(--base-size-32)}.Primer_Brand__Bento-module__Bento___mNrII{grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-rows:minmax(var(--base-size-80), max-content);grid-gap:var(--brand-Bento-gap-small);width:100%;display:grid;position:relative}.Primer_Brand__Bento-module__Bento__Item___fM9oe{border-radius:var(--brand-Bento-item-borderRadius-small);grid-gap:var(--brand-Bento-content-padding-spacious);grid-template-rows:auto 1fr;grid-template-columns:1fr;display:grid;overflow:hidden}.Primer_Brand__Bento-module__Bento__Item--bgColor-default___AyFWG{background-color:var(--brand-color-canvas-default)}.Primer_Brand__Bento-module__Bento__Item--bgColor-subtle___rIDKo{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q.Primer_Brand__Bento-module__Bento__Item___fM9oe{grid-gap:0}@media screen and (width>=80rem){.Primer_Brand__Bento-module__Bento___mNrII{gap:var(--brand-Bento-gap-large)}.Primer_Brand__Bento-module__Bento__Item___fM9oe{border-radius:var(--brand-Bento-item-borderRadius-large)}}@media screen and (width>=48rem){.Primer_Brand__Bento-module__Bento___mNrII{gap:var(--brand-Bento-gap-medium)}.Primer_Brand__Bento-module__Bento__Item___fM9oe{border-radius:var(--brand-Bento-item-borderRadius-medium)}}.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q .Primer_Brand__Bento-module__Bento__Content___BhnY8{order:1;grid-area:1/1/span 2/span 2}.Primer_Brand__Bento-module__Bento__Content___BhnY8{height:100%;color:var(--brand-color-text-default);flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__Bento-module__Bento__Content-icon___K3van{margin-bottom:var(--base-size-32)}.Primer_Brand__Bento-module__Bento__heading--no-text___FiQWM{margin-bottom:var(--base-size-24)}.Primer_Brand__Bento-module__Bento__heading--muted___un_Vf{color:var(--brand-color-text-muted)}.Primer_Brand__Bento-module__Bento__heading--muted___un_Vf em,.Primer_Brand__Bento-module__Bento__heading--muted___un_Vf b{color:var(--brand-color-text-default);font-style:normal;font-weight:inherit}.Primer_Brand__Bento-module__Bento__heading--with-max-width___B8vBa{max-width:600px}.Primer_Brand__Bento-module__Bento__Visual___uQCng{width:100%;height:100%;display:flex}.Primer_Brand__Bento-module__Bento__Visual--overflow-hidden___KzPcB{overflow:hidden}.Primer_Brand__Bento-module__Bento__Visual--overflow-initial___TJvWe{overflow:visible;overflow:initial}.Primer_Brand__Bento-module__Bento__Visual--horizontalAlign-center___nyK69{justify-content:center}.Primer_Brand__Bento-module__Bento__Visual--horizontalAlign-end___k1jRS{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Visual--horizontalAlign-start___DzeEf{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Visual--verticalAlign-center___nSnau{align-items:center}.Primer_Brand__Bento-module__Bento__Visual--verticalAlign-end___IVb1w{align-items:flex-end}.Primer_Brand__Bento-module__Bento__Visual--verticalAlign-start___pyNZQ{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q .Primer_Brand__Bento-module__Bento__Visual___uQCng{order:-1;grid-area:1/1/-1/-1}.Primer_Brand__Bento-module__Bento__Visual--fill___B70Uy>img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.Primer_Brand__Bento-module__Bento__Visual--no-fill___JcHtr>img{-o-object-fit:contain;object-fit:contain;border-radius:0}.Primer_Brand__Bento-module__Bento--padding-condensed___qkDcr{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--padding-normal___c85Rj{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--padding-spacious___ydfpH{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento--padding-condensed___qkDcr>img,.Primer_Brand__Bento-module__Bento--padding-normal___c85Rj>img{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Bento-module__Bento--padding-spacious___ydfpH>img{border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Bento-module__Bento__Item--flow-column___Gd6ts{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item--flow-row___DVol6{grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{justify-content:inherit;margin-top:auto}.Primer_Brand__Bento-module__Bento__Content-text___Q4UA5{margin-top:var(--base-size-8);margin-bottom:var(--base-size-24)}.Primer_Brand__Bento-module__Bento__Content-label___SbyAo{margin-block-end:var(--base-size-16)}.Primer_Brand__Bento-module__Bento__Item--column-span-1___wJS_f{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--column-span-2___wJFH9{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--column-span-3___hskYi{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--column-span-4___EWadX{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--column-span-5___ggzyV{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--column-span-6___UuNEL{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--column-span-7___dnYwC{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--column-span-8___bUlVW{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--column-span-9___Veeak{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--column-span-10___NKxdA{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--column-span-11___ZjirT{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--column-span-12___CaIjg{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--row-span-1____HYWz{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--row-span-2___VYZcw{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--row-span-3___PkNE4{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--row-span-4___FygFo{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--row-span-5___wO0Ev{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--row-span-6___QvMUL{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--row-span-7___KfzTy{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--row-span-8___ctYpA{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--row-span-9___NK44C{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--row-span-10___YeL2N{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--row-span-11___OuImI{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--row-span-12___ZRPCc{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--column-start-1___hJ0es{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--column-start-2___RV3eY{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--column-start-3___M960L{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--column-start-4___V5b3w{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--column-start-5___hCu7p{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--column-start-6___WeOjZ{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--column-start-7___azf_1{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--column-start-8___ufTXp{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--column-start-9___m59SZ{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--column-start-10___pNAFk{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--column-start-11___JPuyR{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--column-start-12___nAVWL{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--row-start-1___ocNBk{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--row-start-2___vcLtw{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--row-start-3___w9cDE{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--row-start-4___Rn8P9{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--row-start-5___c5xci{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--row-start-6___fh6uR{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--row-start-7___jVnOo{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--row-start-8___L4G8w{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--row-start-9___Orw5A{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--row-start-10___IQVeg{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--row-start-11___w0uDj{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--row-start-12___o52Zm{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-start___uJAby{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-start___uJAby .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-center___zOTQa{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-center___zOTQa .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-end___fUd68{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--verticalAlign-end___fUd68 .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--horizontalAlign-start___apVss{text-align:start;align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--horizontalAlign-center___DJpgD{text-align:center;align-items:center}@media screen and (width>=0){.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-1___O3dlL{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-2___LLZAj{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-3___SROOQ{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-4___dLcHs{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-5___Zil5S{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-6___pGhxP{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-7___Gmugv{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-8___mNfgZ{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-9___w5AFK{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-10___dEYRU{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-11___cBfF2{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-span-12___fEgOK{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-1___k41Hr{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-2___qHzNc{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-3___t3hyC{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-4___X_F9d{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-5___UuegS{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-6___W2L8o{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-7___lYC_E{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-8___f66F5{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-9___eU0LD{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-10___beFeO{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-11___DgR1X{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-span-12___Gl_9d{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-1___xf8R8{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-2___f5xs_{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-3___bl1q4{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-4___PhKl_{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-5___xYV6c{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-6___PYKbP{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-7___NE6p3{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-8___AeJAI{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-9___ikepW{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-10___nGG9V{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-11___UTeRm{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--xsmall-column-start-12___NhrVC{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-1___ISePA{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-2___jM4bs{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-3___FTZiY{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-4___gfyxX{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-5___jO7WM{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-6___nKfix{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-7___NncQO{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-8___wY_Tb{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-9___p5PaK{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-10___MKWyL{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-11___nxv94{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--xsmall-row-start-12___Vbl6J{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-column___WV1h5{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-column___WV1h5>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-column___WV1h5>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-row___k8j9i{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-row___k8j9i>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xsmall-flow-row___k8j9i>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-start___cWQRy{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-start___cWQRy .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-center___k4IC6{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-center___k4IC6 .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-end___v_7lF{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--xsmall-verticalAlign-end___v_7lF .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xsmall-horizontalAlign-start___dT6ng{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--xsmall-horizontalAlign-center___xcsj2{align-items:center}.Primer_Brand__Bento-module__Bento--xsmall-padding-condensed___Eno9E{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--xsmall-padding-normal___C2rTu{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--xsmall-padding-spacious___kepW0{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--xsmall-gap-condensed___aPIBg{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--xsmall-gap-normal___XrOHt{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--xsmall-gap-spacious___mv1WJ{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=34rem){.Primer_Brand__Bento-module__Bento__Item--small-column-span-1___a6Uk_{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--small-column-span-2___eRR9s{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--small-column-span-3___iBkjl{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--small-column-span-4___iTLL7{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--small-column-span-5___FXZKF{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--small-column-span-6___VEiVP{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--small-column-span-7___RFD8p{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--small-column-span-8___WBTAW{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--small-column-span-9___PDKMV{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--small-column-span-10___ZBSO0{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--small-column-span-11___Or5lx{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--small-column-span-12___xu8z2{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--small-row-span-1___hJcO9{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--small-row-span-2___RdAwK{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--small-row-span-3___CMwq5{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--small-row-span-4___KuACi{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--small-row-span-5___xqZZV{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--small-row-span-6___Q9O51{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--small-row-span-7___MZ6cD{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--small-row-span-8___eIEpG{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--small-row-span-9___HkxM3{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--small-row-span-10___pce_C{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--small-row-span-11___GO_ln{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--small-row-span-12___lUcIB{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--small-column-start-1___blYcd{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--small-column-start-2___z84xb{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--small-column-start-3___jAHiV{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--small-column-start-4___sa5rD{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--small-column-start-5___EjA_Y{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--small-column-start-6___TsMuS{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--small-column-start-7___wzVOe{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--small-column-start-8___Cylzb{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--small-column-start-9___K3kJa{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--small-column-start-10___PwfIO{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--small-column-start-11___HwJrV{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--small-column-start-12___AuD3D{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--small-row-start-1___esfXx{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--small-row-start-2___rMTHJ{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--small-row-start-3___e5nFr{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--small-row-start-4___hWxGW{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--small-row-start-5___kZona{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--small-row-start-6___l17Wp{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--small-row-start-7___nZc8H{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--small-row-start-8___s8jU5{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--small-row-start-9___et36x{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--small-row-start-10___UNRQz{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--small-row-start-11___D0qCf{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--small-row-start-12___Poeju{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--small-flow-column___idFew{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-column___idFew>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-column___idFew>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--small-flow-row___FlDbE{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-row___FlDbE>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--small-flow-row___FlDbE>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-start___QMpW2{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-start___QMpW2 .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-center___eyrsO{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-center___eyrsO .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-end___t8ken{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--small-verticalAlign-end___t8ken .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--small-horizontalAlign-start____az8o{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--small-horizontalAlign-center___hIKKU{align-items:center}.Primer_Brand__Bento-module__Bento--small-padding-condensed___dV4bU{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--small-padding-normal____b5pg{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--small-padding-spacious___skviu{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--small-gap-condensed____69Z4{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--small-gap-normal___R5AS5{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--small-gap-spacious___ysMFz{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=48rem){.Primer_Brand__Bento-module__Bento__Item--medium-column-span-1___qXoCp{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-2___Or0aW{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-3___rfJlA{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-4___jrzrn{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-5___VX5Xb{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-6___PuJLu{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-7___Gf10h{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-8___EPkMS{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-9___simHy{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-10___vCY7I{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-11___woBRo{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--medium-column-span-12___eR9Ow{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-1___vJifa{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-2___rHIIs{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-3___XpZk0{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-4___xPGyT{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-5___XHAdt{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-6___uXSJ0{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-7___V9oop{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-8___bTuWm{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-9___RBjok{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-10___nXL1W{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-11___bp7xe{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--medium-row-span-12___QykVK{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-1___ysXie{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-2___obU8P{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-3___ttZ2X{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-4___yd4pw{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-5___wl6Sl{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-6___rlfWR{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-7___dfJXo{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-8___HLzZU{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-9___Jul8L{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-10___NGybV{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-11___vc1Nv{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--medium-column-start-12___gZcLo{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-1___s1Rgz{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-2___dsf4y{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-3___rWjRq{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-4___Iiuud{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-5___tbnzw{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-6___jPFm7{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-7___ZqLlM{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-8___TIOvf{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-9___oukNX{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-10___ZCbg8{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-11___bSDUT{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--medium-row-start-12___ozUh1{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--medium-flow-column___K27t6{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-column___K27t6>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-column___K27t6>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--medium-flow-row___qACyl{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-row___qACyl>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--medium-flow-row___qACyl>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-start___DOGQs{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-start___DOGQs .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-center___FEwTP{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-center___FEwTP .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-end___b8l2w{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--medium-verticalAlign-end___b8l2w .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--medium-horizontalAlign-start___nzIvg{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--medium-horizontalAlign-center___aHFRW{align-items:center}.Primer_Brand__Bento-module__Bento--medium-padding-condensed___BgWOb{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--medium-padding-normal___xjnwE{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--medium-padding-spacious___I5PEZ{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--medium-gap-condensed___Nk4Uj{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--medium-gap-normal___KXAsF{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--medium-gap-spacious___vFlWU{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=63.25rem){.Primer_Brand__Bento-module__Bento__Item--large-column-span-1___sPCsf{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--large-column-span-2___wpcnQ{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--large-column-span-3___z8T3W{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--large-column-span-4___RNQwy{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--large-column-span-5___t06QC{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--large-column-span-6___eUMZR{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--large-column-span-7___mLdYl{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--large-column-span-8___zhtsq{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--large-column-span-9___IrFuA{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--large-column-span-10___d4zEs{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--large-column-span-11___UKFCJ{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--large-column-span-12___lOmLI{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--large-row-span-1___o_4N_{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--large-row-span-2___yJebq{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--large-row-span-3___MsNH2{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--large-row-span-4___aYG1Q{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--large-row-span-5___qiTGf{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--large-row-span-6___yDxVJ{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--large-row-span-7___gfW02{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--large-row-span-8___qrky4{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--large-row-span-9___wluiD{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--large-row-span-10___IXd3G{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--large-row-span-11___OVPxd{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--large-row-span-12___aAmjb{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--large-column-start-1___ogy5Y{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--large-column-start-2___A8Kex{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--large-column-start-3___nCs4W{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--large-column-start-4___k6wxM{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--large-column-start-5___u9g2t{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--large-column-start-6___wT9tc{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--large-column-start-7___cH1Zn{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--large-column-start-8___UsTw7{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--large-column-start-9___txaE3{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--large-column-start-10___uY9Wm{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--large-column-start-11___kwY5A{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--large-column-start-12___B9iMH{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--large-row-start-1___kYB2F{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--large-row-start-2___o21Td{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--large-row-start-3___htfzI{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--large-row-start-4___P2f1W{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--large-row-start-5___HT3C4{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--large-row-start-6___pcerM{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--large-row-start-7___j2ui8{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--large-row-start-8___V82iT{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--large-row-start-9___EG4R2{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--large-row-start-10___EaLQx{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--large-row-start-11___IQx_d{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--large-row-start-12___hlrVv{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--large-flow-column___uvNUE{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-column___uvNUE>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-column___uvNUE>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--large-flow-row___ple3b{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-row___ple3b>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--large-flow-row___ple3b>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-start___VDcbn{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-start___VDcbn .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-center___mbhdV{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-center___mbhdV .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-end___hj9Dq{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--large-verticalAlign-end___hj9Dq .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--large-horizontalAlign-start___YQT1t{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--large-horizontalAlign-center___YtwaR{align-items:center}.Primer_Brand__Bento-module__Bento-padding--large-condensed___HeO1J{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento-padding--large-normal___LcQOA{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento-padding--large-spacious____8oib{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--large-gap-condensed___Rbi9v{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--large-gap-normal___S9Fjb{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--large-gap-spacious___i_Gyj{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=80rem){.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-1___LC_qv{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-2___PkH2a{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-3___sjEds{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-4___CwpLr{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-5___ATLZK{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-6___wDVtR{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-7___BF_PQ{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-8___Je6tc{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-9___de_EV{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-10___TV_va{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-11___mRbhR{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-span-12___jCuU4{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-1___k8cvi{grid-row:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-2___eQ1hk{grid-row:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-3___FdBn9{grid-row:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-4___Eu9U7{grid-row:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-5___AymfS{grid-row:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-6___ciomo{grid-row:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-7___bDoNI{grid-row:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-8___aCyc1{grid-row:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-9___t6eYp{grid-row:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-10___Q9UMh{grid-row:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-11___Oeb8y{grid-row:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-span-12___iXpKf{grid-row:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-1___eTMGO{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-2___ghZ8B{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-3___zIFiN{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-4___Ye3wL{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-5___Vtfhw{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-6___MiwV4{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-7___n3U82{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-8___S45Zc{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-9___bjxcX{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-10___xiPsu{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-11___h6pke{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--xlarge-column-start-12___lINEt{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-1___XJ8IJ{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-2___Jh4mU{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-3___Qaz7u{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-4___Wdsyy{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-5___SWvQD{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-6___YIWd4{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-7___UWo93{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-8___f8RMO{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-9___O7BXf{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-10___g9Tom{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-11___WATnH{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--xlarge-row-start-12___f2aPN{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-column___xXSFC{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-column___xXSFC>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-column___xXSFC>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-row___y5CpT{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-row___y5CpT>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xlarge-flow-row___y5CpT>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-start___EyXCQ{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-start___EyXCQ .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-center___P_tSO{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-center___P_tSO .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-end___UwemK{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--xlarge-verticalAlign-end___UwemK .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xlarge-horizontalAlign-start___zzvpZ{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--xlarge-horizontalAlign-center___mfany{align-items:center}.Primer_Brand__Bento-module__Bento--xlarge-padding-condensed___mPi3N{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento--xlarge-padding-normal___tb1wm{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--xlarge-padding-spacious___bT4bv{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--xlarge-gap-condensed___Fvi39{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--xlarge-gap-normal___uQQu6{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--xlarge-gap-spacious___QxB62{grid-gap:var(--brand-Bento-content-padding-spacious)}}@media screen and (width>=87.5rem){.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-1___AChhv{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-2___yj5YI{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-3___jy7Fg{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-4___fXoXs{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-5___hZOPX{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-6___WEvG1{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-7___eliQQ{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-8____DaEU{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-9___PACVQ{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-10___iplz_{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-11___sUFyE{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-span-12___UauN_{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-1___la7E2{grid-column:auto/span 1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-2___WXQZy{grid-column:auto/span 2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-3___K295L{grid-column:auto/span 3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-4___dizmC{grid-column:auto/span 4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-5___gxqXP{grid-column:auto/span 5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-6___fCUrs{grid-column:auto/span 6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-7___t_vib{grid-column:auto/span 7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-8___FkHnk{grid-column:auto/span 8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-9___S9z_S{grid-column:auto/span 9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-10___MWhmW{grid-column:auto/span 10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-11___R0fGH{grid-column:auto/span 11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-span-12___mgPOb{grid-column:auto/span 12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-1___IjDaG{grid-column-start:1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-2___yrjzP{grid-column-start:2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-3___revB_{grid-column-start:3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-4___nXjQh{grid-column-start:4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-5___eKzaF{grid-column-start:5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-6___poX4Y{grid-column-start:6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-7___swX7v{grid-column-start:7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-8___jRIvg{grid-column-start:8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-9___B6iPN{grid-column-start:9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-10___U3Q49{grid-column-start:10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-11___arwBj{grid-column-start:11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-column-start-12___AVlIn{grid-column-start:12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-1___uKVBZ{grid-row-start:1}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-2___l1Sk8{grid-row-start:2}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-3___a3epC{grid-row-start:3}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-4___cIZFC{grid-row-start:4}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-5___rDSnG{grid-row-start:5}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-6___iFfkQ{grid-row-start:6}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-7___HQgB2{grid-row-start:7}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-8___Kk8Ll{grid-row-start:8}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-9___JA8it{grid-row-start:9}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-10____Xfo3{grid-row-start:10}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-11___GgPCA{grid-row-start:11}.Primer_Brand__Bento-module__Bento__Item--xxlarge-row-start-12___Tauza{grid-row-start:12}.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-column___EIhFB{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-auto-flow:column}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-column___EIhFB>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-column___EIhFB>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-row___hqL6a{grid-template-rows:1fr 1fr;grid-template-columns:1fr;grid-auto-flow:row}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-row___hqL6a>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento__Item___fM9oe:not(.Primer_Brand__Bento-module__Bento__Item--visual-as-background___z0J2Q)>.Primer_Brand__Bento-module__Bento__Item--xxlarge-flow-row___hqL6a>div:last-of-type{padding-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-start___KQhGN{justify-content:flex-start}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-start___KQhGN .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-center___MfM4H{justify-content:center}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-center___MfM4H .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-end___trbrg{justify-content:flex-end}.Primer_Brand__Bento-module__Bento__Item--xxlarge-verticalAlign-end___trbrg .Primer_Brand__Bento-module__Bento__call-to-action___CF7bA{margin-top:0}.Primer_Brand__Bento-module__Bento__Item--xxlarge-horizontalAlign-start___BPlw7{align-items:flex-start}.Primer_Brand__Bento-module__Bento__Item--xxlarge-horizontalAlign-center___QFMr_{align-items:center}.Primer_Brand__Bento-module__Bento--xxlarge-padding-condensed___L_cr9{padding:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento---xxlarge-padding-normal___TojyH{padding:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento--xxlarge-padding-spacious___C_vI2{padding:var(--brand-Bento-content-padding-spacious)}.Primer_Brand__Bento-module__Bento__Item--xxlarge-gap-condensed___kImZb{grid-gap:var(--brand-Bento-content-padding-condensed)}.Primer_Brand__Bento-module__Bento__Item--xxlarge-gap-normal___bsI4f{grid-gap:var(--brand-Bento-content-padding-normal)}.Primer_Brand__Bento-module__Bento__Item--xxlarge-gap-spacious___tLuXL{grid-gap:var(--brand-Bento-content-padding-spacious)}}.Primer_Brand__Bento-module__Bento-column-padding-override___SxVV5>div:first-of-type{padding-right:0}.Primer_Brand__Bento-module__Bento-column-padding-override___SxVV5>div:last-of-type{padding-left:0}.Primer_Brand__Bento-module__Bento-row-padding-override___r37Kb>div:first-of-type{padding-bottom:0}.Primer_Brand__Bento-module__Bento-row-padding-override___r37Kb>div:last-of-type{padding-top:0}:root{--brand-EyebrowBanner-subHeading-size:var(--brand-text-size-100);--brand-EyebrowBanner-heading-size:var(--brand-text-size-100);--brand-EyebrowBanner-label-size:var(--brand-text-size-100);--brand-EyebrowBanner-spacing-inner-inline:var(--base-size-16);--brand-EyebrowBanner-spacing-inner-block:.875rem;--brand-EyebrowBanner-borderRadius:var(--base-size-16)}@media (width>=768px){:root{--brand-EyebrowBanner-subHeading-size:var(--brand-text-size-200);--brand-EyebrowBanner-heading-size:var(--brand-text-size-200);--brand-EyebrowBanner-label-size:var(--brand-text-size-200);--brand-EyebrowBanner-spacing-inner-inline:var(--base-size-20);--brand-EyebrowBanner-borderRadius:6.25rem}}:root,[data-color-mode=light]{--brand-Eyebrowbanner-bgColor-rest:#fff9;--brand-Eyebrowbanner-borderColor-rest:var(--brand-color-border-default);--brand-Eyebrowbanner-heading-fgColor:var(--brand-color-text-default);--brand-Eyebrowbanner-subHeading-fgColor:var(--brand-color-text-muted);--brand-Eyebrowbanner-icon-background-default:var(--base-color-scale-gray-0);--brand-Eyebrowbanner-icon-background-blue:var(--base-color-scale-blue-0);--brand-Eyebrowbanner-icon-background-coral:var(--base-color-scale-coral-0);--brand-Eyebrowbanner-icon-background-green:var(--base-color-scale-green-0);--brand-Eyebrowbanner-icon-background-gray:var(--base-color-scale-gray-0);--brand-Eyebrowbanner-icon-background-indigo:var(--base-color-scale-indigo-0);--brand-Eyebrowbanner-icon-background-lemon:var(--base-color-scale-lemon-0);--brand-Eyebrowbanner-icon-background-lime:var(--base-color-scale-lime-0);--brand-Eyebrowbanner-icon-background-orange:var(--base-color-scale-orange-0);--brand-Eyebrowbanner-icon-background-pink:var(--base-color-scale-pink-0);--brand-Eyebrowbanner-icon-background-purple:var(--base-color-scale-purple-0);--brand-Eyebrowbanner-icon-background-red:var(--base-color-scale-red-0);--brand-Eyebrowbanner-icon-background-teal:var(--base-color-scale-teal-0);--brand-Eyebrowbanner-icon-background-yellow:var(--base-color-scale-yellow-0);--brand-Eyebrowbanner-fgColor-default-start:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-default-middle:var(--base-color-scale-pink-5);--brand-Eyebrowbanner-fgColor-default-end:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-blue:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-blue-purple-start:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-blue-purple-end:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-coral:var(--base-color-scale-coral-5);--brand-Eyebrowbanner-fgColor-green:var(--base-color-scale-green-6);--brand-Eyebrowbanner-fgColor-green-blue-start:var(--base-color-scale-green-6);--brand-Eyebrowbanner-fgColor-green-blue-end:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-gray:var(--base-color-scale-gray-5);--brand-Eyebrowbanner-fgColor-indigo:var(--base-color-scale-indigo-5);--brand-Eyebrowbanner-fgColor-lemon:var(--base-color-scale-lemon-5);--brand-Eyebrowbanner-fgColor-lime:var(--base-color-scale-lime-5);--brand-Eyebrowbanner-fgColor-orange:var(--base-color-scale-orange-5);--brand-Eyebrowbanner-fgColor-pink:var(--base-color-scale-pink-5);--brand-Eyebrowbanner-fgColor-pink-blue-start:var(--base-color-scale-pink-5);--brand-Eyebrowbanner-fgColor-pink-blue-end:var(--base-color-scale-blue-5);--brand-Eyebrowbanner-fgColor-purple:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-purple-red-start:var(--base-color-scale-purple-5);--brand-Eyebrowbanner-fgColor-purple-red-end:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-red:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-red-orange-start:var(--base-color-scale-red-5);--brand-Eyebrowbanner-fgColor-red-orange-end:var(--base-color-scale-orange-5);--brand-Eyebrowbanner-fgColor-teal:var(--base-color-scale-teal-5);--brand-Eyebrowbanner-fgColor-yellow:var(--base-color-scale-yellow-5)}[data-color-mode=dark]{--brand-Eyebrowbanner-bgColor-rest:#0d111799;--brand-Eyebrowbanner-borderColor-rest:var(--base-color-scale-gray-5);--brand-Eyebrowbanner-heading-fgColor:var(--brand-color-text-default);--brand-Eyebrowbanner-subHeading-fgColor:var(--brand-color-text-muted);--brand-Eyebrowbanner-icon-background-default:var(--base-color-scale-gray-6);--brand-Eyebrowbanner-icon-background-blue:var(--base-color-scale-blue-8);--brand-Eyebrowbanner-icon-background-coral:var(--base-color-scale-coral-8);--brand-Eyebrowbanner-icon-background-green:var(--base-color-scale-green-8);--brand-Eyebrowbanner-icon-background-gray:var(--base-color-scale-gray-6);--brand-Eyebrowbanner-icon-background-indigo:var(--base-color-scale-indigo-8);--brand-Eyebrowbanner-icon-background-lemon:var(--base-color-scale-lemon-8);--brand-Eyebrowbanner-icon-background-lime:var(--base-color-scale-lime-8);--brand-Eyebrowbanner-icon-background-orange:var(--base-color-scale-orange-8);--brand-Eyebrowbanner-icon-background-pink:var(--base-color-scale-pink-8);--brand-Eyebrowbanner-icon-background-purple:var(--base-color-scale-purple-8);--brand-Eyebrowbanner-icon-background-red:var(--base-color-scale-red-8);--brand-Eyebrowbanner-icon-background-teal:var(--base-color-scale-teal-8);--brand-Eyebrowbanner-icon-background-yellow:var(--base-color-scale-yellow-8);--brand-Eyebrowbanner-fgColor-default-start:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-default-middle:var(--base-color-scale-pink-3);--brand-Eyebrowbanner-fgColor-default-end:var(--base-color-scale-red-3);--brand-Eyebrowbanner-fgColor-blue:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-blue-purple-start:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-blue-purple-end:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-coral:var(--base-color-scale-coral-2);--brand-Eyebrowbanner-fgColor-green:var(--base-color-scale-green-2);--brand-Eyebrowbanner-fgColor-green-blue-start:var(--base-color-scale-green-2);--brand-Eyebrowbanner-fgColor-green-blue-end:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-gray:var(--base-color-scale-gray-2);--brand-Eyebrowbanner-fgColor-indigo:var(--base-color-scale-indigo-2);--brand-Eyebrowbanner-fgColor-lemon:var(--base-color-scale-lemon-2);--brand-Eyebrowbanner-fgColor-lime:var(--base-color-scale-lime-2);--brand-Eyebrowbanner-fgColor-orange:var(--base-color-scale-orange-2);--brand-Eyebrowbanner-fgColor-pink:var(--base-color-scale-pink-2);--brand-Eyebrowbanner-fgColor-pink-blue-start:var(--base-color-scale-pink-2);--brand-Eyebrowbanner-fgColor-pink-blue-end:var(--base-color-scale-blue-2);--brand-Eyebrowbanner-fgColor-purple:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-purple-red-start:var(--base-color-scale-purple-2);--brand-Eyebrowbanner-fgColor-purple-red-end:var(--base-color-scale-red-2);--brand-Eyebrowbanner-fgColor-red:var(--base-color-scale-red-2);--brand-Eyebrowbanner-fgColor-red-orange-start:var(--base-color-scale-red-2);--brand-Eyebrowbanner-fgColor-red-orange-end:var(--base-color-scale-orange-2);--brand-Eyebrowbanner-fgColor-teal:var(--base-color-scale-teal-2);--brand-Eyebrowbanner-fgColor-yellow:var(--base-color-scale-yellow-2)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn{background:var(--brand-Eyebrowbanner-bgColor-rest);border:var(--brand-borderWidth-thin) solid var(--brand-Eyebrowbanner-borderColor-rest);padding:var(--brand-EyebrowBanner-spacing-inner-block) var(--brand-EyebrowBanner-spacing-inner-inline);border-radius:var(--brand-EyebrowBanner-borderRadius);align-self:flex-start;-webkit-text-decoration:none;text-decoration:none;display:inline-block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:hover{-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:2px;transition:none}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__inner___LiSah{align-items:center;display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__headings___Tyish{text-align:start;margin-inline-start:var(--brand-EyebrowBanner-spacing-inner-inline)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f{display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f img,.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f picture,.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f svg{height:var(--base-size-44);width:auto;max-width:var(--base-size-44);max-height:var(--base-size-44)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f img,.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingVisual___bPH2f picture{display:block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__trailingVisual___vQJwY{display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__trailingVisual-icon___m2rYL{color:var(--brand-color-text-default);fill:var(--brand-color-text-default);margin-inline-start:var(--base-size-20)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel___JfbO4{font-family:var(--brand-body-fontFamily);font-weight:var(--base-text-weight-medium);font-size:var(--brand-EyebrowBanner-label-size);letter-spacing:var(--brand-text-letterSpacing-200);background:linear-gradient(92deg, var(--brand-EyebrowBanner-leadingLabel-color-start,var(--brand-Eyebrowbanner-fgColor-default-start)) 12.09%, var(--brand-EyebrowBanner-leadingLabel-color-middle,var(--brand-Eyebrowbanner-fgColor-default-middle)) 42.58%, var(--brand-EyebrowBanner-leadingLabel-color-end,var(--brand-Eyebrowbanner-fgColor-default-end)) 84.96%);text-transform:uppercase;-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;line-height:1em;display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-blue___gWZsh{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-blue);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-blue);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-blue)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-blue-purple___jHrJf{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-blue-purple-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-blue-purple-end);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-blue-purple-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-coral___zDffR{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-coral);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-coral);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-coral)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-green___KfjSH{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-green);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-green);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-green)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-green-blue___IT4vV{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-green-blue-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-green-blue-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-green-blue-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-gray___ZXNfp{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-gray);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-gray);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-gray)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-indigo___jRhXl{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-indigo);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-indigo);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-indigo)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-lemon___VfgJy{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-lemon);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-lemon);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-lemon)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-lime___QxCgJ{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-lime);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-lime);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-lime)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-orange___ctXEe{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-orange);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-orange);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-orange)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-pink___DK8mh{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-pink);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-pink);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-pink)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-pink-blue___taquP{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-pink-blue-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-pink-blue-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-pink-blue-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-purple___SjSu3{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-purple);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-purple);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-purple)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-purple-red___mFOTU{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-purple-red-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-purple-red-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-purple-red-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-red___fvZYM{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-red);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-red);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-red)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-red-orange___MoG8u{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-red-orange-start);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-red-orange-start);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-red-orange-end)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-teal___QCvJH{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-teal);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-teal);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-teal)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__leadingLabel--color-yellow___nHfOQ{--brand-EyebrowBanner-leadingLabel-color-start:var(--brand-Eyebrowbanner-fgColor-yellow);--brand-EyebrowBanner-leadingLabel-color-middle:var(--brand-Eyebrowbanner-fgColor-yellow);--brand-EyebrowBanner-leadingLabel-color-end:var(--brand-Eyebrowbanner-fgColor-yellow)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__heading___gGjRD{color:var(--brand-Eyebrowbanner-heading-fgColor);font-size:var(--brand-EyebrowBanner-heading-size);display:block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__subHeading___EHr9v{color:var(--brand-Eyebrowbanner-subHeading-fgColor);font-size:var(--brand-EyebrowBanner-subHeading-size);display:block}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{width:var(--base-size-44);height:var(--base-size-44);border-radius:50%;justify-content:center;align-items:center;display:flex}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon___RlAjy svg{width:var(--base-size-20);height:var(--base-size-20)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-default___zjZm_{color:var(--brand-color-text-default)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-default___zjZm_.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-default)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-blue___JEOeh{color:var(--brand-Eyebrowbanner-fgColor-blue)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-blue___JEOeh.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-blue)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-coral___f1EgJ{color:var(--brand-Eyebrowbanner-fgColor-coral)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-coral___f1EgJ.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-coral)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-green___l3tOa{color:var(--brand-Eyebrowbanner-fgColor-green)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-green___l3tOa.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-green)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-gray___DfR6X{color:var(--brand-Eyebrowbanner-fgColor-gray)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-gray___DfR6X.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-gray)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-indigo___SwE_O{color:var(--brand-Eyebrowbanner-fgColor-indigo)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-indigo___SwE_O.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-indigo)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lemon___uo7HU{color:var(--brand-Eyebrowbanner-fgColor-lemon)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lemon___uo7HU.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-lemon)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lime___UoH_J{color:var(--brand-Eyebrowbanner-fgColor-lime)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-lime___UoH_J.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-lime)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-orange___Oakbb{color:var(--brand-Eyebrowbanner-fgColor-orange)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-orange___Oakbb.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-orange)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-pink___RtapL{color:var(--brand-Eyebrowbanner-fgColor-pink)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-pink___RtapL.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-pink)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-purple___qMl8t{color:var(--brand-Eyebrowbanner-fgColor-purple)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-purple___qMl8t.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-purple)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-red___jbmX3{color:var(--brand-Eyebrowbanner-fgColor-red)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-red___jbmX3.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-red)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-teal___iB9Rw{color:var(--brand-Eyebrowbanner-fgColor-teal)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-teal___iB9Rw.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-teal)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-yellow___Jt5i1{color:var(--brand-Eyebrowbanner-fgColor-yellow)}.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--color-yellow___Jt5i1.Primer_Brand__EyebrowBanner-module__EyebrowBanner__icon--badge___P_sDD{background-color:var(--brand-Eyebrowbanner-icon-background-yellow)}@media (prefers-reduced-motion:reduce){.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn,.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:before,.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn:after,.Primer_Brand__EyebrowBanner-module__EyebrowBanner___pFgEn *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root{--brand-PricingOptions-items4-container-padding-inline:var(--base-size-24);--brand-PricingOptions-items4-gap:var(--base-size-48);--brand-PricingOptions-items3-container-padding-inline:var(--base-size-24);--brand-PricingOptions-items3-gap:var(--base-size-64);--brand-PricingOptions-items2-container-padding-inline:var(--base-size-48);--brand-PricingOptions-items2-gap:var(--base-size-96);--brand-PricingOptions-items1-container-paddingInline:var(--base-size-32);--brand-PricingOptions-items-gap:var(--base-size-24)}:root,[data-color-mode=light]{--brand-PricingOptions-borderMask:linear-gradient(180deg, #0009, #0000004d);--brand-PricingOptions-item-bgColor-solid:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-start:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-end:var(--brand-color-canvas-default);--brand-PricingOptions-featureList-group-heading-color:var(--brand-color-text-default);--brand-PricingOptions-actionsMessage-bgColor:color-mix(in srgb, var(--base-color-scale-blue-4) 10%, transparent);--brand-PricingOptions-actionsMessage-borderColor:color-mix(in srgb, var(--base-color-scale-blue-6) 20%, transparent);--brand-PricingOptions-actionsMessage-accentColor:var(--base-color-scale-blue-5)}[data-color-mode=dark]{--brand-PricingOptions-borderMask:linear-gradient(180deg, #000, #0006);--brand-PricingOptions-item-bgColor-solid:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-start:var(--brand-color-canvas-subtle);--brand-PricingOptions-item-bgColor-gradient-end:var(--brand-color-canvas-default);--brand-PricingOptions-featureList-group-heading-color:var(--brand-color-text-default);--brand-PricingOptions-actionsMessage-bgColor:#0c1c26;--brand-PricingOptions-actionsMessage-borderColor:#0e4678;--brand-PricingOptions-actionsMessage-accentColor:#1095ff}.Primer_Brand__PricingOptions-module__PricingOptions___hjzt8{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items-gap);--brand-pricing-options-container-padding-inline:0;--brand-pricing-options-column-count:1;--brand-pricing-options-template-areas:"labels" "leadingComponent" "header" "description" "price" "actions" "feature-list" "footnote";grid-row-gap:0;grid-row-gap:var(--brand-pricing-options-item-gap,0);row-gap:0;row-gap:var(--brand-pricing-options-item-gap,0);padding-inline:0;padding-inline:var(--brand-pricing-options-container-padding-inline);display:grid}@media screen and (width<=63.24rem){.Primer_Brand__PricingOptions-module__PricingOptions___hjzt8{max-width:488px;margin-inline:auto}}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions___hjzt8{grid-template-areas:var(--brand-pricing-options-template-areas);grid-template-columns:repeat(var(--brand-pricing-options-column-count), minmax(0, 1fr));-moz-column-gap:0;-moz-column-gap:var(--brand-pricing-options-item-gap,0);column-gap:0;column-gap:var(--brand-pricing-options-item-gap,0);row-gap:0}.Primer_Brand__PricingOptions-module__PricingOptions--items1___Do94G{--brand-pricing-options-column-count:1}.Primer_Brand__PricingOptions-module__PricingOptions--items2___Z08y5{--brand-pricing-options-column-count:2}.Primer_Brand__PricingOptions-module__PricingOptions--items3___u4TM8{--brand-pricing-options-column-count:3}.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3{--brand-pricing-options-column-count:4}}.Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw{display:none}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw{--brand-pricing-options-column-count:1;grid-area:labels/1/labels/-1;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-columns:repeat(var(--brand-pricing-options-column-count), minmax(0, 1fr));grid-column-gap:0;grid-column-gap:var(--brand-pricing-options-item-gap,0);-moz-column-gap:0;-moz-column-gap:var(--brand-pricing-options-item-gap,0);column-gap:0;column-gap:var(--brand-pricing-options-item-gap,0);display:grid}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM{min-height:var(--base-size-54);padding-block:var(--base-size-16);background-color:var(--brand-PricingOptions-item-bgColor-solid);align-items:center;display:flex;position:relative}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:after{content:"";inset-block-start:0;inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1);inset-inline-end:0;height:var(--brand-borderWidth-thin);background-color:var(--brand-color-text-emphasized);z-index:1;position:absolute;inset-inline-end:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1)}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:first-child:after{inset-inline-start:0}.Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:last-child:after{inset-inline-end:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:after{inset-inline:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw{position:relative}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw:after{content:"";inset-block-end:0;inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1);inset-inline-end:0;height:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-subtle);position:absolute;inset-inline-end:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM{margin-inline:calc(var(--brand-pricing-options-item-gap) / 2 * -1);padding-inline:calc(var(--brand-pricing-options-item-gap) / 2)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:first-child{margin-inline-start:calc(var(--brand-pricing-options-container-padding-inline) * -1);padding-inline-start:var(--brand-pricing-options-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:last-child{margin-inline-end:calc(var(--brand-pricing-options-container-padding-inline) * -1);padding-inline-end:var(--brand-pricing-options-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--empty___SSWHp{background-color:#0000;border-block-start-color:#0000}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM+.Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:before{content:"";width:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-subtle);position:absolute;inset-block:0;inset-inline-start:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM+.Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM:before{-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__label-cell___K6KaM{padding-inline:var(--base-size-28);border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--empty___SSWHp{opacity:0;pointer-events:none}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__label-cell--has-label___NUFzI:after{inset-inline:0}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8{position:relative}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-solid___S7wHh{border:solid 1px var(--brand-color-border-subtle);background-color:var(--brand-PricingOptions-item-bgColor-solid)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ,.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{background:linear-gradient(180deg, var(--brand-PricingOptions-item-bgColor-gradient-start) 0%, var(--brand-PricingOptions-item-bgColor-gradient-end) 100%)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ:before,.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{content:"";pointer-events:none;border-radius:inherit;-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-subtle);position:absolute;inset:0}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8{padding-inline:var(--brand-pricing-options-container-padding-inline)}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{--brand-pricing-options-item-padding-inline:var(--base-size-24);padding-inline:var(--base-size-24);padding-block:var(--base-size-20);position:relative}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{--brand-pricing-options-item-padding-inline:0;padding-inline:0;padding-block:var(--base-size-40)}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{content:"";background-color:var(--brand-color-border-subtle);height:1px;position:absolute;inset-inline:0}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{width:1px;height:auto;margin-block-start:0;margin-inline-start:calc(var(--brand-pricing-options-item-gap) / 2 * -1);inset-block:0;inset-inline:0}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:before{-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask)}}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{--brand-pricing-options-item-padding-inline:var(--base-size-32);padding-inline:var(--base-size-32);padding-block:var(--base-size-32);position:relative}.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--appearance-solid___S7wHh .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{background-color:var(--brand-PricingOptions-item-bgColor-solid);border:solid var(--brand-borderWidth-thin) var(--brand-color-border-subtle)}@media (width>=48rem){:where(.Primer_Brand__PricingOptions-module__PricingOptions--layout-cards___w4AZc.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3){row-gap:var(--brand-pricing-options-item-gap)}}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--items1___Do94G{width:50%;margin-inline:auto}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items1___Do94G{--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items1-container-paddingInline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items2___Z08y5{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items2-gap);--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items2-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items3___u4TM8{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items3-gap);--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items3-container-padding-inline)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3{--brand-pricing-options-item-gap:var(--brand-PricingOptions-items4-gap);--brand-pricing-options-container-padding-inline:var(--brand-PricingOptions-items4-container-padding-inline)}}.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{grid-template-areas:var(--brand-pricing-options-template-areas);display:grid}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{grid-row:header/footnote;grid-template-rows:subgrid}.Primer_Brand__PricingOptions-module__PricingOptions__item--has-leading-component___Dzv8_{grid-row:leadingComponent/footnote}}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b{justify-items:center}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__price___qxTEV,.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__description___hb2GR{text-align:center;justify-content:center}@supports not (grid-template-rows:subgrid){@media (width>=63.28rem){.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw{grid-template-areas:var(--brand-pricing-options-template-areas);grid-template-rows:auto;grid-template-columns:1fr}}}.Primer_Brand__PricingOptions-module__PricingOptions__header___NCmt2{row-gap:var(--base-size-16);grid-area:header;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:not(.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b) .Primer_Brand__PricingOptions-module__PricingOptions__header___NCmt2{align-items:center;margin-block-end:var(--base-size-16)}.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:not(.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b) .Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{margin-block:var(--base-size-16);flex:0 auto;order:1;align-self:flex-start}@media (width>=63.24rem){.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:not(.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b) .Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{margin-block:0}}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__header___NCmt2{justify-content:center}.Primer_Brand__PricingOptions-module__PricingOptions__item--align-center___X_E4b .Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{text-align:center;margin-block-start:0;margin-block-end:var(--base-size-16)}.Primer_Brand__PricingOptions-module__PricingOptions__leading-component___FPip4{grid-row:leadingComponent}.Primer_Brand__PricingOptions-module__PricingOptions__leading-component___FPip4 img,.Primer_Brand__PricingOptions-module__PricingOptions__leading-component___FPip4 picture{display:block}.Primer_Brand__PricingOptions-module__PricingOptions__label___VwACa{color:var(--brand-color-text-default);font-family:var(--brand-fontStack-monospace);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);letter-spacing:var(--brand-text-letterSpacing-100);line-height:var(--brand-text-lineHeight-200);text-transform:uppercase}.Primer_Brand__PricingOptions-module__PricingOptions__heading___LZFAK{margin-block:var(--base-size-16);flex:0 auto;order:1;align-self:flex-start}.Primer_Brand__PricingOptions-module__PricingOptions__description___hb2GR{grid-row:description}.Primer_Brand__PricingOptions-module__PricingOptions__price___qxTEV{flex-wrap:wrap;grid-row:price;align-items:flex-start;padding-block-start:var(--base-size-20);padding-block-end:var(--base-size-8);display:flex}@media (width<=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions__price-value___XH4vo,.Primer_Brand__PricingOptions-module__PricingOptions__price-currency-symbol___Fv4Ny{font-size:var(--brand-text-size-900)}}.Primer_Brand__PricingOptions-module__PricingOptions__price-amount___tdTS8{align-items:flex-end;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__price-currency-code___kFWAy{color:var(--brand-color-text-muted);margin-block-end:var(--base-size-4);margin-inline-start:var(--base-size-4)}.Primer_Brand__PricingOptions-module__PricingOptions__price-original-price___C9hzM{align-self:center;margin-inline-start:var(--base-size-8);-webkit-text-decoration:none;text-decoration:none;display:inline-flex}.Primer_Brand__PricingOptions-module__PricingOptions__price-original-price-value___Xtjg8{-webkit-text-decoration:line-through;text-decoration:line-through}.Primer_Brand__PricingOptions-module__PricingOptions__price-trailing-text___W2UAb{flex:1 0 100%;display:block}.Primer_Brand__PricingOptions-module__PricingOptions__actions___e2W5P{gap:var(--base-size-8);flex-direction:column;grid-row:actions;align-items:flex-end;padding-block-start:var(--base-size-20);display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message___n7IvJ{gap:var(--base-size-12);inline-size:100%;max-inline-size:100%;padding:var(--base-size-12);border-block:var(--brand-borderWidth-thin) solid var(--brand-PricingOptions-actionsMessage-borderColor);background-color:var(--brand-PricingOptions-actionsMessage-bgColor);border-inline:0;border-radius:0;align-items:flex-start;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-leading-component___Wk0uH{color:var(--brand-PricingOptions-actionsMessage-accentColor);flex:none;margin-block-start:var(--base-size-4);display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-leading-component___Wk0uH :where(svg){inline-size:var(--base-size-16);block-size:var(--base-size-16);display:block}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-content___CKvOG{flex:auto;min-inline-size:0}.Primer_Brand__PricingOptions-module__PricingOptions__actions-message-content___CKvOG :where(p){margin:0}.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF,.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF>*{width:100%}.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF>*>*{width:100%;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__menu-action___e4jvF>*>*>:first-child{flex:1}.Primer_Brand__PricingOptions-module__PricingOptions__footnote___UwqUw{grid-row:footnote;margin-block-start:var(--base-size-8);display:block}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list___BmoFc{--feature-list-font-size:var(--brand-text-size-200);--feature-list-line-height:var(--brand-text-lineHeight-200);gap:var(--base-size-8);flex-direction:column;grid-row:feature-list;width:100%;margin-block-start:var(--base-size-20);padding-block-start:var(--base-size-20);display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ{margin:0;margin-block-start:var(--base-size-20);padding-block-start:var(--base-size-40);padding-inline:0;position:relative}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{content:"";inset-block-start:0;inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-item-padding-inline,0px) * -1);inset-inline-end:0;height:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-subtle);position:absolute;inset-inline-end:calc(var(--brand-pricing-options-item-padding-inline,0px) * -1)}@media (width>=63.25rem){.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1);inset-inline-end:0;inset-inline-end:calc(var(--brand-pricing-options-item-gap,0px) / 2 * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:first-child .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before,.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__labels___rfDyw+.Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{inset-inline-start:0;inset-inline-start:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8 .Primer_Brand__PricingOptions-module__PricingOptions__item___V9iAw:last-child .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{inset-inline-end:0;inset-inline-end:calc(var(--brand-pricing-options-container-padding-inline,0px) * -1)}.Primer_Brand__PricingOptions-module__PricingOptions--layout-default___RU2N8.Primer_Brand__PricingOptions-module__PricingOptions--appearance-gradient___kcYQZ .Primer_Brand__PricingOptions-module__PricingOptions__feature-list--has-divider___GZsaQ:before{-webkit-mask-image:var(--brand-PricingOptions-borderMask);-webkit-mask-image:var(--brand-PricingOptions-borderMask);mask-image:var(--brand-PricingOptions-borderMask)}}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-set___cJt0a:nth-child(n+2){margin-block-start:var(--base-size-20)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-group-heading___u739o{color:var(--brand-PricingOptions-featureList-group-heading-color);margin-block-start:var(--base-size-12);margin-block-end:var(--base-size-8)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item--excluded___iDvOS span{color:var(--brand-color-text-muted)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item--has-info___zXREr{flex-wrap:nowrap}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item--has-info___zXREr>span{flex:1;justify-content:space-between;align-items:baseline;display:inline-flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item-info___glnBV{all:unset;cursor:pointer;color:var(--brand-color-text-muted);background-color:color-mix(in srgb, var(--brand-color-canvas-invert) 12%, transparent);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);vertical-align:middle;padding:var(--base-size-4);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;margin-inline-start:var(--base-size-8);display:inline-flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item-info___glnBV svg{width:var(--base-size-12);height:var(--base-size-12)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item-info___glnBV:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:2px}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list___BmoFc+.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-group-heading___u739o{margin-block-start:var(--base-size-20)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item___M9A0t,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-item___M9A0t span{font-size:var(--feature-list-font-size)!important;line-height:var(--feature-list-line-height)!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-group-heading___u739o{font-size:var(--feature-list-font-size)!important}.Primer_Brand__PricingOptions-module__PricingOptions--items4___FgRN3 .Primer_Brand__PricingOptions-module__PricingOptions__feature-list___BmoFc{--feature-list-font-size:var(--brand-text-size-100);--feature-list-line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF{border:0;padding:0}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF:after{content:none!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW{padding:var(--base-size-8) 0;margin-block-start:calc(var(--base-size-16) * -1);margin-block-end:var(--base-size-8);padding-inline:0!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h1,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h2,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h3,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h4,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h5,.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW h6{font-size:var(--feature-list-font-size);line-height:var(--feature-list-line-height);font-weight:var(--brand-text-subhead-weight-large);gap:var(--base-size-8);justify-content:space-between;align-items:center;width:100%;display:flex}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-heading___QZJNW span{display:none}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-content___hCzO7{padding:0;padding-block-start:var(--base-size-8);padding-inline-start:0!important}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-chevron___XXErd{margin-inline-end:var(--base-size-4)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion___sPJpF[open] .Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-chevron___XXErd{transform:rotate(180deg)}.Primer_Brand__PricingOptions-module__PricingOptions__feature-list-accordion-content___hCzO7{animation:none!important}.Primer_Brand__SubNav-module__SubNav__container___iZQjL{z-index:2;border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);width:100%;position:absolute}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7{display:inline;display:initial;position:relative}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7 .Primer_Brand__SubNav-module__SubNav___dVoQu{border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SubNav-module__SubNav___dVoQu{z-index:1;background-color:var(--brand-SubNav-bgColor);width:100%;display:flex}[data-color-mode=dark] .Primer_Brand__SubNav-module__SubNav___dVoQu{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.Primer_Brand__SubNav-module__SubNav__heading___MAxf6,.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp{font-size:calc(var(--base-size-16) - 1px);line-height:calc(var(--base-size-16) - 1px);font-weight:var(--brand-text-subhead-weight-medium);color:var(--brand-color-text-default);font-family:var(--brand-heading-fontFamily);-webkit-text-decoration:none;text-decoration:none;display:block}.Primer_Brand__SubNav-module__SubNav__heading___MAxf6:hover,.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp:hover,.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:var(--brand-color-text-muted);-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__SubNav-module__SubNav--header-container-outer___tneuD{width:100%}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{z-index:9998;min-height:60px;padding:var(--base-size-16);border-inline-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);align-items:center;display:flex;position:relative}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG+.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline-start:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav--has-shadow___jkyC7{box-shadow:var(--brand-SubNav-shadow);background-color:var(--brand-color-canvas-default)}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq{padding-inline:0}.Primer_Brand__SubNav-module__SubNav__action-container___lgC_T{margin-left:auto}.Primer_Brand__SubNav-module__SubNav__sub-menu-icon___XxnxY{display:none!important}.Primer_Brand__SubNav-module__SubNav__sub-menu-children___t0gfy{display:contents}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND{margin:0;padding:0;list-style:none}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND>span,.Primer_Brand__SubNav-module__SubNav__sub-menu-toggle___FvvL9,.Primer_Brand__SubNav-module__SubNav__overflow-container___GPuX_{display:none}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz{z-index:10;width:max-content;min-width:var(--brand-SubNav-width-overflowMenuMin);max-width:calc(100vw - var(--brand-SubNav-width-overflowMenuInset));max-height:calc(100dvh - var(--brand-SubNav-height-overflowMenuInset));background-color:var(--brand-SubNav-overflowMenu-bgColor-rest);border:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);box-shadow:none;transform:translateY(calc(0px - var(--brand-SubNav-offset-overflowMenu)));animation:Primer_Brand__SubNav-module__fade-in___t8Rrr var(--brand-animation-duration-faster) var(--brand-animation-easing-default);border-start-start-radius:0;border-start-end-radius:0;border-end-end-radius:var(--brand-borderRadius-medium);border-end-start-radius:var(--brand-borderRadius-medium);margin:0;padding:0;position:absolute;inset:auto;overflow:hidden auto}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz::backdrop{background-color:#0000}.Primer_Brand__SubNav-module__SubNav__overflow-menu-list____hd03{grid-gap:var(--brand-borderWidth-thin);gap:var(--brand-borderWidth-thin);padding:var(--base-size-8);width:100%;margin:0;list-style:none;display:grid}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{z-index:91;position:sticky;top:-1px}.Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG{opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), background-color var(--brand-animation-duration-default) var(--brand-animation-easing-default);background-color:#0000}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:focus-within .Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG,.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container--stuck___HlM9i .Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG{opacity:1;background-color:var(--brand-color-canvas-default);transform:translateY(0)}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{height:0;transition:height var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:focus-within,.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container--stuck___HlM9i{height:auto}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), height var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:focus-within .Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG,.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container--stuck___HlM9i .Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{visibility:visible;opacity:1;transform:translateY(0)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-block:var(--base-size-12);border-block:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);display:flex}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__sub-menu-list___aBVGd{gap:var(--base-size-20);margin:0;padding:0;list-style-type:none;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{font-weight:450}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{padding:var(--base-size-6) var(--base-size-12);border-radius:var(--brand-borderRadius-full);transition:background-color var(--brand-animation-duration-default) var(--brand-animation-easing-default), color var(--brand-animation-duration-default) var(--brand-animation-easing-default);background-color:#0000}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link--is-in-view___GqmLc .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{background-color:var(--brand-SubNav-color-link-bgColor)}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after,.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link--is-in-view___GqmLc:focus-visible .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after{opacity:0}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]) *{color:var(--brand-SubNav-color-link-active);-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{transition:color var(--brand-animation-duration-fast) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after{border-color:var(--brand-color-text-default)}@media screen and (width<=63.24rem){.Primer_Brand__SubNav-module__SubNav___dVoQu{position:relative}.Primer_Brand__SubNav-module__SubNav___dVoQu:before{content:"";opacity:0;z-index:9997;position:absolute;inset:0}.Primer_Brand__SubNav-module__SubNav___dVoQu:after{content:"";z-index:-1;background-color:var(--base-color-scale-black-0);opacity:0;visibility:hidden;width:100%;height:100%;position:fixed;inset:0}.Primer_Brand__SubNav-module__SubNav--open___xWq0D:after{opacity:.3;visibility:visible;transition:visibility var(--brand-animation-duration-default) var(--brand-animation-easing-default), opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__SubNav-module__SubNav__heading___MAxf6{font-size:var(--base-size-16);line-height:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav--open___xWq0D{display:block}.Primer_Brand__SubNav-module__SubNav--open___xWq0D .Primer_Brand__SubNav-module__SubNav--header-container-outer___tneuD{max-height:100dvh;max-height:var(--subnav-available-height,100dvh);flex-direction:column;display:flex;overflow:hidden}.Primer_Brand__SubNav-module__SubNav--open___xWq0D .Primer_Brand__SubNav-module__SubNav__header-container___heD5O{flex-shrink:0}.Primer_Brand__SubNav-module__SubNav--open___xWq0D+.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{z-index:-1}.Primer_Brand__SubNav-module__SubNav--open___xWq0D:before{background-color:var(--brand-color-canvas-default);animation:Primer_Brand__SubNav-module__fade-in___t8Rrr .3s var(--brand-animation-easing-glide) forwards}.Primer_Brand__SubNav-module__SubNav__heading-separator--main___sziYb:not(.Primer_Brand__SubNav-module__SubNav__heading-separator--has-adjacent-label___F3S2G),.Primer_Brand__SubNav-module__SubNav__heading-separator--subheading-active___ysuBi,.Primer_Brand__SubNav-module__SubNav__subheading-container-active___EOoAH{display:none}.Primer_Brand__SubNav-module__SubNav__header-container___heD5O{white-space:pre;z-index:9998;width:100%;display:flex;position:relative}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG+.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline-start:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__heading-separator___M5xJp{z-index:9998;margin-inline-end:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND{z-index:9998;padding-inline:var(--base-size-8);flex-direction:column;flex:auto;justify-content:center;display:none;position:relative}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA{gap:var(--base-size-8);padding-block:var(--base-size-16);border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);flex-direction:column;justify-content:flex-start;min-height:0;display:flex;overflow-y:auto}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:var(--brand-color-text-default)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{z-index:9999;width:100%;justify-content:flex-end;padding-inline-end:var(--base-size-16);display:flex;position:relative}.Primer_Brand__SubNav-module__SubNav--has-sub-heading___YxW9a:not(.Primer_Brand__SubNav-module__SubNav--subHeadingActive___AxXKr) .Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{border-block-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding-block:var(--base-size-12);margin-block:0;display:block}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content___GYAh4{width:100%;padding-inline-start:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-label___J0P2K{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);padding:var(--base-size-4) var(--base-size-12);gap:var(--base-size-6);cursor:pointer;font:inherit;border:none;align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq .Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{right:0}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ,.Primer_Brand__SubNav-module__SubNav__action-container___lgC_T{-webkit-text-decoration:none;text-decoration:none;display:none}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{position:relative}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]) *{color:var(--brand-SubNav-color-link-active)}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding:var(--base-size-4) var(--base-size-12);margin-inline-start:var(--base-size-8)}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]),.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);display:inline-flex}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{animation:Primer_Brand__SubNav-module__fade-in___t8Rrr .3s var(--brand-animation-easing-glide) forwards;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__action-container___lgC_T{animation:Primer_Brand__SubNav-module__fade-in___t8Rrr .3s var(--brand-animation-easing-glide) forwards;display:block}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{padding-block:0}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__action-container___lgC_T,.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA .Primer_Brand__SubNav-module__SubNav__action___hRMk9{width:100%}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed{gap:var(--base-size-8);flex-direction:column;margin:0;padding:0;padding-block-start:var(--base-size-8);padding-inline-start:var(--base-size-16);list-style:none;display:flex}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{margin-inline-start:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:var(--brand-color-text-default)!important}.Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG{z-index:99;width:100%;overflow:auto hidden}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf{position:sticky;top:-1px}.Primer_Brand__SubNav-module__SubNav__anchor-menu-outer-container___sfhEf:after{content:"";width:var(--base-size-32);background:linear-gradient(to left, var(--brand-color-canvas-default), transparent);pointer-events:none;z-index:100;position:absolute;top:0;bottom:0;right:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-inline:var(--base-size-16);padding-block-start:var(--base-size-16);padding-block-end:var(--base-size-16)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__sub-menu-list___aBVGd{padding-inline-end:var(--base-size-32)}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{white-space:pre;top:var(--base-size-2);display:block;position:relative}}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-icon___AjCc8{fill:var(--brand-color-text-default)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content___GYAh4{align-items:center;gap:var(--base-size-8);display:flex}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content--end___GySmq{justify-content:flex-end}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible,.Primer_Brand__SubNav-module__SubNav__heading___MAxf6:focus-visible,.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp:focus-visible,.Primer_Brand__SubNav-module__SubNav__sub-menu-toggle___FvvL9:focus-visible,.Primer_Brand__SubNav-module__SubNav__overlay-toggle-label___J0P2K:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp{white-space:nowrap;display:block;position:relative}.Primer_Brand__SubNav-module__SubNav__subHeading___EQNxp[aria-current]:not([aria-current=false]){background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);padding:var(--base-size-6) var(--base-size-12);border:none}@media screen and (width>=48rem){.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav__overlay-toggle-content___GYAh4{padding-inline-start:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA{padding:var(--base-size-24)}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq{padding-inline:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-inline:var(--base-size-24)}}.Primer_Brand__SubNav-module__SubNav__heading-label___gwyQg{white-space:pre}@media screen and (width>=63.25rem){.Primer_Brand__SubNav-module__SubNav___dVoQu{z-index:92;padding-inline:var(--base-size-32);align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav__links-overlay--open___xdhUA{padding:0}.Primer_Brand__SubNav-module__SubNav___dVoQu:has(+.Primer_Brand__SubNav-module__SubNav__anchor-menu-container___TNidG){padding-block-end:0}.Primer_Brand__SubNav-module__SubNav__heading-container___jlouG{padding-inline-start:0}.Primer_Brand__SubNav-module__SubNav--full-width___ZqqXq{padding-inline:0}.Primer_Brand__SubNav-module__SubNav__overlay-toggle___GY93X{display:none}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7 .Primer_Brand__SubNav-module__SubNav__heading___MAxf6{padding-block-end:1px}.Primer_Brand__SubNav-module__SubNav__heading-separator___M5xJp{margin-inline-end:var(--base-size-20);display:inline-flex;top:0}.Primer_Brand__SubNav-module__SubNav__container--with-anchor-nav___y6aE7 .Primer_Brand__SubNav-module__SubNav__heading-separator___M5xJp{top:-1px}.Primer_Brand__SubNav-module__SubNav--header-container-outer___tneuD{align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav__header-container___heD5O{flex-shrink:0;align-items:center;display:flex}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND{align-items:center;gap:var(--base-size-2);z-index:92;min-width:0;flex:1 1 0;align-self:stretch;padding-inline-start:var(--base-size-24);display:flex}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND>li{white-space:nowrap;flex:none}.Primer_Brand__SubNav-module__SubNav__link--in-overlay___osowG{align-items:center;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__link-item--overflowed___x0xat{visibility:hidden;pointer-events:none;width:max-content;position:absolute}.Primer_Brand__SubNav-module__SubNav__overflow-container___GPuX_{visibility:hidden;pointer-events:none;align-self:stretch;align-items:center;display:flex;position:absolute}.Primer_Brand__SubNav-module__SubNav__overflow-container--visible___OLUw7{visibility:visible;pointer-events:auto;position:relative}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18{align-items:center;gap:var(--base-size-4);padding:var(--base-size-4) var(--base-size-12);color:var(--brand-SubNav-color-link-rest);background:var(--brand-SubNav-overflowMenu-toggle-bgColor-rest);border-radius:var(--brand-borderRadius-full);font:inherit;cursor:pointer;border:0;display:inline-flex}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18:hover{background-color:var(--brand-SubNav-overflowMenu-toggle-bgColor-hover)}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18[aria-expanded=true],.Primer_Brand__SubNav-module__SubNav__overflow-toggle--active___BiGMB{background-color:var(--brand-SubNav-overflowMenu-toggle-bgColor-active)}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18 .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:inherit}.Primer_Brand__SubNav-module__SubNav__overflow-toggle___Nof18:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__SubNav-module__SubNav__link___VBkrZ{transition:color .2s var(--brand-animation-easing-glide);padding:var(--base-size-4) var(--base-size-12);border-radius:var(--brand-borderRadius-full);position:relative;-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100)}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{padding:var(--base-size-4) 0}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW:after{content:"";bottom:calc(var(--base-size-12) * -1);width:100%;height:var(--base-size-12);background:0 0;position:absolute;left:0}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN{background-clip:padding-box;background-color:var(--brand-color-canvas-default);border:var(--brand-color-border-muted) solid var(--brand-borderWidth-thin);border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-8);z-index:9998;transition-timing-function:var(--brand-animation-easing-glide);transition-duration:var(--brand-animation-duration-fast);top:90%;left:0;left:var(--base-size-4);visibility:hidden;opacity:0;transform-origin:top;gap:var(--base-size-8);width:var(--brand-SubNav-width-subMenu);flex-direction:column;margin-block-start:var(--base-size-8);list-style:none;transition-property:opacity,transform;display:flex;position:absolute;transform:scale(.99)translateY(-.7em)translate(-8px)}.Primer_Brand__SubNav-module__SubNav__link--expanded___sbpQG .Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN{visibility:visible;opacity:1;transform:scale(1)translateY(0)translate(-8px)}.Primer_Brand__SubNav-module__SubNav__sub-menu-toggle___FvvL9{width:var(--base-size-24);height:var(--base-size-24);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0;margin-inline-end:calc(-1 * var(--base-size-8));padding:0;padding-inline-end:var(--base-size-8);display:inline-flex}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{display:block}.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp:after{opacity:1;transform:scale(0)}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{align-items:center;gap:var(--base-size-4);cursor:pointer;display:inline-flex;position:relative}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW>.Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding-inline-end:0}.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{padding:var(--base-size-4) 0;position:relative}.Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-full);padding:0 var(--base-size-8) 0 0;gap:0}.Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN>.Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding:var(--base-size-4) 0 var(--base-size-4) var(--base-size-12)}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{padding:var(--base-size-12)}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){background-color:var(--brand-SubNav-color-link-bgColor);line-height:1.1em}@supports ((-moz-appearance:none)){.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]) .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{top:0}}.Primer_Brand__SubNav-module__SubNav__links-overlay___CnpND .Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){padding-inline-end:var(--base-size-4)}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){border-radius:var(--brand-borderRadius-medium);padding:var(--base-size-4) var(--base-size-8) var(--base-size-4) var(--base-size-12);top:auto;top:initial;background-color:#0000}.Primer_Brand__SubNav-module__SubNav__sub-menu___UENed.Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover{background-color:var(--brand-SubNav-color-link-bgColor);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__SubNav-module__SubNav__sub-menu-icon___XxnxY{fill:var(--brand-color-text-muted);transition:transform var(--brand-animation-duration-fast);display:inline-block!important}.Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW:not(.Primer_Brand__SubNav-module__SubNav__link--has-active-sub-menu___T8fLN) .Primer_Brand__SubNav-module__SubNav__sub-menu-icon___XxnxY{top:calc(-1 * var(--brand-borderWidth-thin));position:relative}.Primer_Brand__SubNav-module__SubNav__sub-menu--anchor___Q6VDG{padding-inline:var(--base-size-32)}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ{width:100%;min-height:var(--brand-SubNav-height-overflowMenuItemMin);padding:var(--base-size-8) var(--base-size-12);color:var(--brand-SubNav-overflowMenu-fgColor-rest);white-space:normal;word-wrap:anywhere;border-radius:var(--brand-borderRadius-medium);background-color:var(--brand-SubNav-overflowMenu-bgColor-rest);display:block}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ .Primer_Brand__SubNav-module__SubNav__link-label___IoiSp{color:inherit;font-weight:var(--base-text-weight-normal);line-height:var(--brand-text-lineHeight-200)}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:hover,.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus,.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible,.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ[aria-current]:not([aria-current=false]){color:var(--brand-SubNav-overflowMenu-fgColor-hover);background-color:var(--brand-SubNav-overflowMenu-bgColor-hover)}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link___VBkrZ:focus-visible{box-shadow:inset 0 0 0 var(--brand-borderWidth-thick) var(--brand-color-focus);outline:none}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW{background:0 0;padding:0;display:block}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__link--has-sub-menu___IrziW:after{content:none}.Primer_Brand__SubNav-module__SubNav__overflow-menu___yyMyz .Primer_Brand__SubNav-module__SubNav__sub-menu--dropdown___tPNZN{width:auto;background-color:var(--brand-SubNav-overflowMenu-bgColor-rest);visibility:visible;opacity:1;border:0;margin:0;padding:0;padding-inline-start:var(--base-size-16);position:static;transform:none}}@keyframes Primer_Brand__SubNav-module__fade-in___t8Rrr{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.Primer_Brand__SubNav-module__SubNav___dVoQu,.Primer_Brand__SubNav-module__SubNav___dVoQu:before,.Primer_Brand__SubNav-module__SubNav___dVoQu:after,.Primer_Brand__SubNav-module__SubNav___dVoQu *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root{--brand-SubNav-offset-overflowMenu:.25rem;--brand-SubNav-height-overflowMenuItemMin:2.5rem;--brand-SubNav-height-overflowMenuInset:8rem;--brand-SubNav-width-overflowMenuMin:10rem;--brand-SubNav-width-overflowMenuInset:2rem;--brand-SubNav-width-subMenu:18.75rem}:root,[data-color-mode=light]{--brand-SubNav-bgColor:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-rest:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-hover:var(--brand-color-canvas-subtle);--brand-SubNav-overflowMenu-fgColor-rest:var(--brand-color-text-muted);--brand-SubNav-overflowMenu-fgColor-hover:var(--brand-color-text-default);--brand-SubNav-overflowMenu-toggle-bgColor-rest:transparent;--brand-SubNav-overflowMenu-toggle-bgColor-hover:var(--base-color-scale-gray-1);--brand-SubNav-overflowMenu-toggle-bgColor-active:var(--base-color-scale-gray-1);--brand-SubNav-color-link-rest:var(--brand-color-text-default);--brand-SubNav-color-link-active:var(--brand-color-text-default);--brand-SubNav-color-link-bgColor:#e4ebe6;--brand-SubNav-shadow:0px 100px 80px #00000003, 0px 41px 33px #00000005, 0px 22px 17px #00000005, 0px 12px 10px #00000008, 0px 6px 5px #0000000a, 0px 2px 2px #00000012}[data-color-mode=dark]{--brand-SubNav-bgColor:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-rest:var(--brand-color-canvas-default);--brand-SubNav-overflowMenu-bgColor-hover:var(--brand-color-canvas-subtle);--brand-SubNav-overflowMenu-fgColor-rest:var(--brand-color-text-muted);--brand-SubNav-overflowMenu-fgColor-hover:var(--brand-color-text-default);--brand-SubNav-overflowMenu-toggle-bgColor-rest:transparent;--brand-SubNav-overflowMenu-toggle-bgColor-hover:var(--base-color-scale-gray-6);--brand-SubNav-overflowMenu-toggle-bgColor-active:var(--base-color-scale-gray-6);--brand-SubNav-color-link-rest:var(--brand-color-text-default);--brand-SubNav-color-link-active:var(--brand-color-text-default);--brand-SubNav-color-link-bgColor:#323834;--brand-SubNav-shadow:0px 100px 80px #00000003, 0px 41px 33px #00000005, 0px 22px 17px #00000005, 0px 12px 10px #00000008, 0px 6px 5px #0000000a, 0px 2px 2px #00000012}:root,[data-color-mode=light]{--brand-NavList-activeIndicator-color:var(--brand-color-text-emphasized)}[data-color-mode=dark]{--brand-NavList-activeIndicator-color:var(--brand-color-accent-primary)}.Primer_Brand__NavList-module__NavList___U7Jyj{--brand-NavList-label-indent-level-2:0px;--brand-NavList-label-indent-level-3:var(--base-size-16);--brand-NavList-label-indent-level-4:var(--base-size-32);--brand-NavList-label-indent-level-5:var(--base-size-48);--brand-NavList-item-paddingInlineStart-base:var(--base-size-24);--brand-NavList-control-paddingInlineStart:var(--base-size-8);--brand-NavList-label-paddingInlineStart:var(--base-size-6);box-sizing:border-box;font-family:var(--brand-fontStack-sansSerif);color:var(--brand-color-text-default);width:100%;padding-inline-start:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__list___K5lSx,.Primer_Brand__NavList-module__NavList__subNav___DZ2GX,.Primer_Brand__NavList-module__NavList__groupList___ylfjF{margin:0;padding:0;list-style:none}.Primer_Brand__NavList-module__NavList__list___K5lSx{flex-direction:column;gap:0;display:flex}.Primer_Brand__NavList-module__NavList__list--flat___wuoKR,.Primer_Brand__NavList-module__NavList__groupList___ylfjF{--brand-NavList-item-paddingInlineStart-base:var(--base-size-2)}.Primer_Brand__NavList-module__NavList__groupList___ylfjF .Primer_Brand__NavList-module__NavList__subNav___DZ2GX .Primer_Brand__NavList-module__NavList__item--leaf___SN9hT{--brand-NavList-item-paddingInlineStart-base:0px;--brand-NavList-label-paddingInlineStart:var(--base-size-8)}.Primer_Brand__NavList-module__NavList__item___OceIg,.Primer_Brand__NavList-module__NavList__group___LANuQ{position:relative}.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__item___OceIg+.Primer_Brand__NavList-module__NavList__item___OceIg,.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__item___OceIg+.Primer_Brand__NavList-module__NavList__group___LANuQ,.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__group___LANuQ+.Primer_Brand__NavList-module__NavList__item___OceIg,.Primer_Brand__NavList-module__NavList__list___K5lSx:not(.Primer_Brand__NavList-module__NavList__list--flat___wuoKR)>.Primer_Brand__NavList-module__NavList__group___LANuQ+.Primer_Brand__NavList-module__NavList__group___LANuQ{background-image:repeating-linear-gradient(to right, var(--brand-color-border-muted) 0 var(--base-size-2), transparent var(--base-size-2) var(--base-size-4));background-repeat:no-repeat;background-size:100% var(--brand-borderWidth-thin);background-position:0 0}.Primer_Brand__NavList-module__NavList__groupTitle___Ios1h{padding:var(--base-size-24) var(--base-size-16) var(--base-size-16);color:var(--brand-color-text-default);font-size:var(--brand-text-size-200);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200);margin:0}.Primer_Brand__NavList-module__NavList__groupList___ylfjF{flex-direction:column;gap:0;padding-block-end:var(--base-size-16);display:flex}.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{align-items:center;gap:var(--base-size-8);min-width:0;display:flex}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{padding-block:calc(var(--base-size-8) + var(--base-size-2));padding-inline-end:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item--level-2___AEntj{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-2)}.Primer_Brand__NavList-module__NavList__item--level-3___yJC82{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-3)}.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-4)}.Primer_Brand__NavList-module__NavList__item--level-5___euPGq{--brand-NavList-item-label-indent:var(--brand-NavList-label-indent-level-5)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{min-height:var(--base-size-32);padding-block:0;padding-inline-end:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-5___euPGq>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{padding-inline-start:calc(var(--brand-NavList-item-paddingInlineStart-base) + var(--brand-NavList-item-label-indent))}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{padding-inline-start:var(--brand-NavList-control-paddingInlineStart)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{padding-inline-start:var(--brand-NavList-label-paddingInlineStart)}.Primer_Brand__NavList-module__NavList__link___lJiXk{align-items:center;gap:var(--base-size-8);border-radius:var(--brand-borderRadius-medium);min-width:0;color:var(--brand-color-text-muted);font-size:var(--brand-text-size-100);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100);transition:background-color var(--brand-animation-duration-fast) var(--brand-animation-easing-default), color var(--brand-animation-duration-fast) var(--brand-animation-easing-default);flex:auto;padding:0;display:flex;position:relative;-webkit-text-decoration:none!important;text-decoration:none!important}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{box-sizing:border-box;width:100%;color:var(--brand-color-text-muted);cursor:pointer;text-align:start;background:0 0;border:0;font-family:inherit;position:relative}.Primer_Brand__NavList-module__NavList__link___lJiXk:hover{color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:hover{color:var(--brand-color-text-default);background-color:#0000}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{min-height:var(--base-size-32);order:2}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled):hover .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled){color:var(--brand-color-text-default)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:not(:disabled) .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__link___lJiXk:focus-visible,.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:focus-visible{outline:var(--brand-borderWidth-thick) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__NavList-module__NavList__subNav___DZ2GX .Primer_Brand__NavList-module__NavList__link___lJiXk:focus-visible,.Primer_Brand__NavList-module__NavList__subNav___DZ2GX .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:focus-visible{outline-offset:calc(-1 * var(--base-size-2))}.Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]){color:var(--brand-color-text-default);background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts) .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]):before{content:"";inset-block:var(--base-size-8);width:var(--base-size-4);border-radius:var(--base-size-2);background-color:var(--brand-NavList-activeIndicator-color);position:absolute;inset-inline-start:0}.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:not(:disabled):before{content:"";block-size:var(--base-size-16);width:var(--base-size-4);border-radius:var(--base-size-2);background-color:var(--brand-NavList-activeIndicator-color);z-index:1;position:absolute;inset-block-start:50%;transform:translateY(-50%)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:before{inset-inline-start:calc(-1 * var(--base-size-8))}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:before{inset-inline-start:var(--base-size-4)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]{padding-inline-start:var(--base-size-12)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false] .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{padding-inline-start:var(--base-size-2)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]){padding-inline-start:0}.Primer_Brand__NavList-module__NavList__link--disabled___gPpvz{color:var(--brand-color-text-disabled);pointer-events:none}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:disabled{color:var(--brand-color-text-disabled);cursor:not-allowed}.Primer_Brand__NavList-module__NavList__label___cZ4Jt{word-break:break-word;min-width:0}.Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{align-items:center;gap:var(--base-size-8);border-radius:var(--brand-borderRadius-small);flex:auto;min-width:0;display:flex}.Primer_Brand__NavList-module__NavList__leadingVisual___ToOHr,.Primer_Brand__NavList-module__NavList__trailingVisual___q6Uc4{color:inherit;flex:none;display:inline-flex}.Primer_Brand__NavList-module__NavList__trailingVisual___q6Uc4{margin-inline-start:auto;margin-inline-end:var(--base-size-6)}.Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{transform-origin:50%;transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);flex:none}.Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{transform:rotate(-180deg)}.Primer_Brand__NavList-module__NavList__subNav___DZ2GX{opacity:0;max-height:0;transform:translateY(calc(-1 * var(--base-size-8)));visibility:hidden;transition:max-height var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), visibility 0s linear var(--brand-animation-duration-fast);flex-direction:column;gap:0;margin:0;padding:0;display:flex;overflow:hidden}.Primer_Brand__NavList-module__NavList__subNav--expanded___Wu6L6{max-height:none;max-height:var(--brand-NavList-subNav-height,none);opacity:1;visibility:visible;transition:max-height var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-glide), visibility 0s linear 0s;transform:translateY(0)}.Primer_Brand__NavList-module__NavList__subNav___DZ2GX[aria-hidden=true] .Primer_Brand__NavList-module__NavList__subNav___DZ2GX{visibility:hidden}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4{padding:var(--base-size-24) var(--base-size-16) var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts.Primer_Brand__NavList-module__NavList__item--expanded___b3doz{padding-block-end:var(--base-size-16)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{font-size:var(--brand-text-size-200);font-weight:var(--brand-text-weight-500);line-height:var(--brand-text-lineHeight-200);order:1}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{color:var(--brand-color-text-default);min-height:var(--base-size-32);margin-block:calc(-1 * var(--base-size-8));border-radius:var(--brand-borderRadius-small);padding-inline-start:0;padding-inline-end:var(--base-size-6)}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C>*{z-index:1;position:relative}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled):hover:after,.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C:not(:disabled):active:after,.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts.Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false]:not(:disabled):after{content:"";z-index:0;border-radius:var(--brand-borderRadius-small);background-color:var(--brand-color-canvas-subtle);pointer-events:none;position:absolute;inset-block:0;inset-inline:0}.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{order:2;margin-inline-start:auto}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{order:1}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C{min-height:var(--base-size-32);margin-block:calc(-1 * var(--base-size-8));border-radius:var(--brand-borderRadius-small)}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{position:absolute;inset-block-start:50%;inset-inline-start:calc(-1 * var(--brand-NavList-control-paddingInlineStart));transform:translateY(-50%)}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=true] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{transform:translateY(-50%)rotate(-180deg)}.Primer_Brand__NavList-module__NavList__item___OceIg:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts).Primer_Brand__NavList-module__NavList__item--has-current-descendant___xFrMb>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__accordionButton___Jii1C[aria-expanded=false] .Primer_Brand__NavList-module__NavList__toggleIcon___hh94D{inset-inline-start:calc(-1 * var(--base-size-16))}.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-2___AEntj>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-3___yJC82>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-4___w3rA3>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk,.Primer_Brand__NavList-module__NavList__item___OceIg.Primer_Brand__NavList-module__NavList__item--level-5___euPGq>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);order:2}.Primer_Brand__NavList-module__NavList__list--flat___wuoKR>.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk{min-height:var(--base-size-32);border-radius:var(--brand-borderRadius-small)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{min-height:calc(var(--base-size-32) - var(--brand-borderWidth-thin));margin-block-end:var(--brand-borderWidth-thin)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts) .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]){background-color:#0000}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk:hover .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6,.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts) .Primer_Brand__NavList-module__NavList__link___lJiXk[aria-current]:not([aria-current=false]) .Primer_Brand__NavList-module__NavList__labelArea___N5Ya6{background-color:var(--brand-color-canvas-subtle)}.Primer_Brand__NavList-module__NavList__item--leaf___SN9hT:not(.Primer_Brand__NavList-module__NavList__item--level-1___rA6Ts)>.Primer_Brand__NavList-module__NavList__itemContent___TyAP4 .Primer_Brand__NavList-module__NavList__link___lJiXk:hover{background-color:#0000}[data-color-mode=dark] .Primer_Brand__NavList-module__NavList___U7Jyj{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-reduced-motion:reduce){.Primer_Brand__NavList-module__NavList___U7Jyj,.Primer_Brand__NavList-module__NavList___U7Jyj:before,.Primer_Brand__NavList-module__NavList___U7Jyj:after,.Primer_Brand__NavList-module__NavList___U7Jyj *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root{--brand-IDE-height:50rem}:root,[data-color-mode=light]{--brand-IDE-default-bgColor:var(--base-color-scale-gray-1);--brand-IDE-default-editor-bgColor:var(--base-color-scale-white-0);--brand-IDE-default-editor-tabs-bgColor:var(--base-color-scale-gray-0);--brand-IDE-default-editor-tab-bgColor-rest:var(--base-color-scale-gray-0);--brand-IDE-default-editor-tab-bgColor-active:var(--base-color-scale-white-0);--brand-IDE-default-editor-tab-borderColor:var(--base-color-scale-blue-5);--brand-IDE-glass-bgColor-rest:#ffffffd9;--brand-IDE-glass-chat-bgColor:#ffffff0f;--brand-IDE-glass-editor-bgColor:#ffffff0f;--brand-IDE-glass-editor-tabs-bgColor:transparent;--brand-IDE-glass-editor-tab-bgColor-rest:#ffffff1a;--brand-IDE-glass-editor-tab-bgColor-active:#ffffff0f;--brand-IDE-borderColor:var(--brand-color-border-muted);--brand-IDE-autoSuggest-bgColor:#0969da;--brand-IDE-autoSuggest-fgColor:var(--base-color-scale-white-0);--brand-IDE-autoSuggest-borderColor:var(--base-color-scale-blue-5);--brand-IDE-autoSuggestLine-bgColor:var(--base-color-scale-blue-0);--brand-IDE-scrollBar-bgColor:transparent;--brand-IDE-scrollBar-fgColor:var(--base-color-scale-gray-2);--brand-IDE-playPauseControl-rest:var(--base-color-scale-gray-2);--brand-IDE-playPauseControl-hover:var(--base-color-scale-gray-3)}[data-color-mode=dark]{--brand-IDE-default-bgColor:#131337;--brand-IDE-default-editor-bgColor:#242538;--brand-IDE-default-editor-tabs-bgColor:linear-gradient(0deg, #0038ff05 0%, #0038ff05 100%), #17182c;--brand-IDE-default-editor-tab-bgColor-rest:#24253880;--brand-IDE-default-editor-tab-bgColor-active:#242538;--brand-IDE-default-editor-tab-borderColor:var(--base-color-scale-blue-5);--brand-IDE-glass-bgColor-rest:#000000b3;--brand-IDE-glass-chat-bgColor:#0000000f;--brand-IDE-glass-editor-bgColor:#242538c4;--brand-IDE-glass-editor-tabs-bgColor:transparent;--brand-IDE-glass-editor-tab-bgColor-rest:#24253880;--brand-IDE-glass-editor-tab-bgColor-active:#242538c4;--brand-IDE-borderColor:#171d22;--brand-IDE-autoSuggest-bgColor:#0969da;--brand-IDE-autoSuggest-fgColor:var(--base-color-scale-white-0);--brand-IDE-autoSuggest-borderColor:var(--base-color-scale-blue-5);--brand-IDE-autoSuggestLine-bgColor:var(--base-color-scale-blue-9);--brand-IDE-scrollBar-bgColor:transparent;--brand-IDE-scrollBar-fgColor:var(--base-color-scale-gray-5);--brand-IDE-playPauseControl-rest:#4d4e6a;--brand-IDE-playPauseControl-hover:#5a5b7c}.Primer_Brand__IDE-module__IDE__inner___C7yFe{--brand-IDE-lineNumber-width:45px;background:var(--brand-IDE-default-bgColor);border:var(--brand-borderWidth-thin) solid var(--brand-IDE-borderColor)}.Primer_Brand__IDE-module__IDE--glass___uVNlv{-webkit-backdrop-filter:blur(var(--base-size-12));backdrop-filter:blur(var(--base-size-12))}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__inner___C7yFe{background:var(--brand-IDE-glass-bgColor-rest);border-color:#0000!important}.Primer_Brand__IDE-module__IDE__main___UBKnG{width:100%;height:100%;display:flex}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__main___UBKnG{height:var(--brand-IDE-height)}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__main___UBKnG{padding-top:var(--base-size-32)}.Primer_Brand__IDE-module__IDE__inner___C7yFe{width:100%;height:var(--brand-IDE-height);margin:calc(var(--base-size-12) - 2px) auto;border-radius:var(--brand-borderRadius-large);position:relative;overflow:hidden}.Primer_Brand__IDE-module__IDE__Chat___w081c{grid-gap:var(--base-size-16);gap:var(--base-size-16);color:var(--brand-color-text-default);flex-direction:column;grid-area:pane;width:100%;height:100%;display:flex;position:relative;overflow:hidden}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Chat___w081c{background:var(--brand-IDE-glass-chat-bgColor)}.Primer_Brand__IDE-module__IDE--full-exp___QszuK .Primer_Brand__IDE-module__IDE__Chat___w081c{min-width:300px;max-width:450px}@media screen and (width<=63.24rem){.Primer_Brand__IDE-module__IDE--full-exp___QszuK .Primer_Brand__IDE-module__IDE__Chat___w081c{display:none}}.Primer_Brand__IDE-module__IDE__Chat-wrapper___chroS{display:contents}.Primer_Brand__IDE-module__IDE__Chat-message-user___AhfYF{gap:var(--base-size-8);align-items:center;display:inline-flex}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_{scrollbar-width:thin;scrollbar-color:var(--brand-IDE-scrollBar-fgColor) var(--brand-IDE-scrollBar-bgColor);height:calc(100% - 78px);overflow-y:scroll}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_::-webkit-scrollbar{width:var(--base-size-12)}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_::-webkit-scrollbar-track{background:var(--brand-IDE-scrollBar-bgColor)}.Primer_Brand__IDE-module__IDE__Chat-messages___EcZF_::-webkit-scrollbar-thumb{background-color:var(--brand-IDE-scrollBar-fgColor);border-radius:var(--base-size-20);border:var(--brand-borderRadius-small) solid var(--brand-IDE-scrollBar-bgColor)}.Primer_Brand__IDE-module__IDE__Chat-input-area___OJkxC{bottom:var(--base-size-16);width:100%;padding:0 var(--base-size-20);opacity:.5;position:absolute}.Primer_Brand__IDE-module__IDE__Chat-input___XXUIS{border-color:var(--brand-color-border-default);background:var(--brand-IDE-default-bgColor)!important;color:var(--brand-color-text-muted)!important;-webkit-text-fill-color:var(--brand-color-text-muted)!important}.Primer_Brand__IDE-module__IDE__Chat-input-area___OJkxC svg{fill:var(--brand-color-text-muted)}.Primer_Brand__IDE-module__IDE__Chat-message-content___yFYul{margin-top:var(--base-size-16)}.Primer_Brand__IDE-module__IDE__Chat-message-snippet___DAl6x{background-color:var(--brand-IDE-default-editor-bgColor);overflow-x:hidden}.Primer_Brand__IDE-module__IDE__Chat-message___LMwct{font-family:var(--brand-fontStack-sansSerif);font-size:var(--base-size-16);border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);padding:var(--base-size-20);opacity:0;transform:translateY(var(--brand-animation-variant-slideInDown-distance));transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), transform var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__IDE-module__IDE__Chat-message--visible___hq0hB{opacity:1;transform:translateY(0)}.Primer_Brand__IDE-module__IDE__Chat-message--faded___Mj7EF{opacity:.5}.Primer_Brand__IDE-module__IDE__Chat-message___LMwct pre{border:var(--brand-borderWidth-thick) solid var(--brand-color-border-default);padding:var(--base-size-16);border-radius:var(--brand-borderRadius-large);font-family:var(--brand-fontStack-monospace);font-size:calc(var(--base-size-12) + 2px)!important}.Primer_Brand__IDE-module__IDE__Editor___MkJjR{flex-direction:column;grid-area:editor;width:100%;height:100%;display:flex}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor___MkJjR{width:100%;padding-left:var(--base-size-20)}.Primer_Brand__IDE-module__IDE__Editor-tabs___zFwQA{background:var(--brand-IDE-default-editor-tabs-bgColor);display:inline-flex;overflow-x:auto}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-tabs___zFwQA{background:var(--brand-IDE-default-editor-tabs-bgColor)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tabs___zFwQA{background:var(--brand-IDE-glass-editor-tabs-bgColor)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{padding:var(--base-size-8) var(--base-size-12);align-items:center;gap:var(--base-size-4);font:inherit;font-family:var(--brand-fontStack-monospace);font-size:calc(var(--base-size-12) + 2px);color:var(--brand-color-text-muted);cursor:pointer;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default);opacity:1;border:none;flex-shrink:0;display:flex}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{background:var(--brand-IDE-default-editor-tab-bgColor-rest)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{background:var(--brand-IDE-glass-editor-tab-bgColor-rest)}.Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{color:var(--brand-color-text-default);border-top:var(--brand-borderWidth-thin) solid var(--brand-IDE-default-editor-tab-borderColor);z-index:1}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{background:var(--brand-IDE-default-editor-tab-bgColor-active)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ{color:var(--brand-color-text-muted);background:0 0}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{color:var(--brand-color-text-default);background:var(--brand-IDE-glass-editor-tab-bgColor-active)}.Primer_Brand__IDE-module__IDE--full-exp___QszuK.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-tab--active___FuQ4L{background:var(--brand-IDE-default-editor-bgColor)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ:hover{color:var(--brand-color-text-default)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ[disabled]{cursor:not-allowed;opacity:.7;color:var(--brand-color-text-muted)!important}.Primer_Brand__IDE-module__IDE__Editor-tab-close-icon___jxo0b{width:var(--base-size-12);height:var(--base-size-12);fill:var(--brand-color-text-muted);margin-inline-start:var(--base-size-4)}img.Primer_Brand__IDE-module__IDE__Editor-tab-icon___IyrSp{width:var(--base-size-16);height:var(--base-size-16);filter:grayscale(10%)}.Primer_Brand__IDE-module__IDE__Editor-tab___lY6lZ:hover .Primer_Brand__IDE-module__IDE__Editor-tab-close-icon___jxo0b{fill:var(--brand-color-text-default)}.Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{height:100%;padding-top:var(--base-size-16);overflow-x:auto}.Primer_Brand__IDE-module__IDE--default___cSAvc .Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{background:var(--brand-IDE-default-editor-bgColor)}.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{background:var(--brand-IDE-glass-editor-bgColor);border-bottom-left-radius:var(--brand-borderRadius-large)}.Primer_Brand__IDE-module__IDE--full-exp___QszuK.Primer_Brand__IDE-module__IDE--glass___uVNlv .Primer_Brand__IDE-module__IDE__Editor-content___qUzu5{background:var(--brand-IDE-default-editor-bgColor)}.Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs{margin:0}.Primer_Brand__IDE-module__IDE__Editor-content-wrapper___gb9HC{display:flex}.Primer_Brand__IDE-module__IDE__Editor-content-inner___HAje_{flex:1}.Primer_Brand__IDE-module__IDE__Editor--small____cDnd .Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs,.Primer_Brand__IDE-module__IDE__Editor--small____cDnd .Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{font-size:calc(var(--base-size-12) - 1px)!important;line-height:calc(var(--base-size-16) + 2px)!important}.Primer_Brand__IDE-module__IDE__Editor--medium___Nihdg .Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs,.Primer_Brand__IDE-module__IDE__Editor--medium___Nihdg .Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{font-size:.875rem!important;line-height:19.9px!important}.Primer_Brand__IDE-module__IDE__Editor--large___YlfAf .Primer_Brand__IDE-module__IDE__Editor-pane___ZQjcs,.Primer_Brand__IDE-module__IDE__Editor--large___YlfAf .Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{font-size:1.125rem!important;line-height:var(--base-size-24)!important}.Primer_Brand__IDE-module__IDE__Editor-pane--suggested___IXAF0{margin-left:calc(-1 * var(--brand-IDE-lineNumber-width));background-color:var(--brand-IDE-autoSuggestLine-bgColor);border-left:var(--brand-borderWidth-thin) solid var(--brand-IDE-autoSuggest-borderColor);padding-left:calc(var(--base-size-64) - 1px)!important}.Primer_Brand__IDE-module__IDE__Editor-lineNumbers___t0wju{z-index:1;font-family:var(--brand-fontStack-monospace);font-weight:var(--brand-text-weight-200);font-feature-settings:"liga" 0, "calt" 0;font-variation-settings:normal;letter-spacing:0;flex:0 0 var(--brand-IDE-lineNumber-width)}.Primer_Brand__IDE-module__IDE__Editor-lineNumber___vSZSt{padding:0 var(--base-size-8);text-align:right;color:var(--brand-color-text-muted);-webkit-user-select:none;user-select:none;cursor:default;white-space:nowrap;text-overflow:ellipsis;display:block;position:relative;overflow:hidden}.Primer_Brand__IDE-module__IDE__Editor-lineNumber-text___Ws1Hq{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-align:right;vertical-align:middle;box-sizing:border-box;cursor:default;height:100%;display:inline-block;position:absolute}.Primer_Brand__IDE-module__IDE__Editor___MkJjR pre{color:var(--brand-color-text-default);font-family:var(--brand-fontStack-monospace);padding-left:calc(var(--base-size-64) - var(--brand-IDE-lineNumber-width))}pre.Primer_Brand__IDE-module__IDE__Chat-copilot-indicator___FhoZe{background-color:var(--brand-IDE-autoSuggest-bgColor);padding-left:0;padding:var(--base-size-8) var(--base-size-24);border-radius:var(--brand-borderRadius-small);gap:var(--base-size-16);margin:var(--base-size-4) 0 0 var(--base-size-16);display:inline-flex;box-shadow:-9px 10px 39px #00000040}.Primer_Brand__IDE-module__IDE__Chat-copilot-indicator-label___IWynN{color:var(--brand-IDE-autoSuggest-fgColor);fill:var(--brand-IDE-autoSuggest-fgColor)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP{cursor:pointer;bottom:var(--base-size-16);right:var(--base-size-16);width:var(--base-size-48);height:var(--base-size-48);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-IDE-playPauseControl-rest);transition:background-color var(--brand-animation-duration-faster);border:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex;position:absolute}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP:hover{background-color:var(--brand-IDE-playPauseControl-hover)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP svg{width:var(--base-size-16);height:var(--base-size-16)}.Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP path{fill:var(--brand-button-subtle-fgColor-rest)}.Primer_Brand__IDE-module__IDE--chat-only___GsGvX .Primer_Brand__IDE-module__IDE__Chat-input-area___OJkxC{width:calc(100% - var(--base-size-64))}.Primer_Brand__IDE-module__IDE--chat-only___GsGvX .Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP{background-color:var(--brand-IDE-playPauseControl-rest)}.Primer_Brand__IDE-module__IDE--chat-only___GsGvX .Primer_Brand__IDE-module__IDE__play-pause-button___MKdFP:hover{background-color:var(--brand-IDE-playPauseControl-hover)}@media (prefers-reduced-motion:reduce){.Primer_Brand__IDE-module__IDE___QDJIE,.Primer_Brand__IDE-module__IDE___QDJIE:before,.Primer_Brand__IDE-module__IDE___QDJIE:after,.Primer_Brand__IDE-module__IDE___QDJIE *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}:root,[data-color-mode=light]{--brand-breadcrumbs-separator-borderColor:var(--base-color-scale-gray-6)}[data-color-mode=dark]{--brand-breadcrumbs-separator-borderColor:var(--base-color-scale-gray-1)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs___ANvyl{font-family:var(--brand-fontStack-sansSerif);justify-content:space-between;display:flex}@media screen and (width<=63.25rem){.Primer_Brand__Breadcrumbs-module__Breadcrumbs___ANvyl{-webkit-overflow-scrolling:touch;overflow-x:auto}}.Primer_Brand__Breadcrumbs-module__Breadcrumbs--default___q2JxW{--brand-InlineLink-color-rest:var(--brand-color-text-default);--brand-InlineLink-color-pressed:var(--brand-color-text-default)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__list___S1xLw{margin:0;padding-inline-start:0}@media screen and (width<=63.25rem){.Primer_Brand__Breadcrumbs-module__Breadcrumbs__list___S1xLw{display:inline-flex}}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P{white-space:nowrap;list-style:none;display:inline-block}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P:after{content:"";height:.8em;margin:0 var(--base-size-12);border-right:var(--brand-borderWidth-thin) solid var(--brand-breadcrumbs-separator-borderColor);display:inline-block;transform:rotate(15deg)translateY(.0625em)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P:first-child{margin-left:0}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__item___IX25P:last-child:after{content:none}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd{font-size:var(--brand-text-size-100);-webkit-text-decoration:none;text-decoration:none;display:inline-block}@media screen and (width<=63.25rem){.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd{white-space:nowrap}}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd:hover,.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link___B3gbd:focus{-webkit-text-decoration:underline;text-decoration:underline}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link--selected___zP0bj{color:var(--brand-color-text-default);pointer-events:none;font-weight:inherit;letter-spacing:inherit}.Primer_Brand__Breadcrumbs-module__Breadcrumbs--default___q2JxW .Primer_Brand__Breadcrumbs-module__Breadcrumbs__link--selected___zP0bj{color:var(--brand-color-text-muted)}.Primer_Brand__Breadcrumbs-module__Breadcrumbs__link--selected___zP0bj:focus{-webkit-text-decoration:none;text-decoration:none}:root{--brand-Section-variant-gridline-paddingInline:var(--base-size-20);--brand-Section-container-maxWidth:80rem;--brand-Section-padding-spacious:var(--base-size-64);--brand-Section-padding-normal:var(--base-size-48);--brand-Section-padding-condensed:var(--base-size-16)}@media (width>=768px){:root{--brand-Section-variant-gridline-paddingInline:var(--base-size-40);--brand-Section-padding-spacious:var(--base-size-80);--brand-Section-padding-normal:var(--base-size-64);--brand-Section-padding-condensed:var(--base-size-32)}}@media (width>=1024px){:root{--brand-Section-padding-spacious:var(--base-size-128);--brand-Section-padding-normal:var(--base-size-96);--brand-Section-padding-condensed:var(--base-size-48)}}@media (width>=1280px){:root{--brand-Section-variant-gridline-paddingInline:var(--base-size-64)}}.Primer_Brand__Section-module__Section___wNnZR{--rounded-padding-overlap-adjustment:0px;--rounded-radius:var(--brand-borderRadius-xlarge);--padding-block-start:var(--brand-Section-padding-normal);--padding-block-end:var(--brand-Section-padding-normal);--adjusted-padding-block-end:calc(var(--padding-block-end) + var(--rounded-padding-overlap-adjustment));background-repeat:no-repeat;background-color:var(--brand-Section-narrow-background-color,var(--brand-Section-background-color));background-image:var(--brand-Section-narrow-background-image-src,var(--brand-Section-background-image-src));background-size:var(--brand-Section-narrow-background-image-size,var(--brand-Section-background-image-size));background-position:50%;background-position:var(--brand-Section-narrow-background-image-position,var(--brand-Section-background-image-position,center));padding-block-start:var(--padding-block-start);padding-block-end:var(--adjusted-padding-block-end)}.Primer_Brand__Section-module__Section__container___irc5A{width:100%;max-width:var(--brand-Section-container-maxWidth);margin-inline:auto}.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7{max-width:none}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A{padding-inline:var(--brand-Section-variant-gridline-paddingInline)}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container--fullWidth___LwJV7{padding-inline:0}.Primer_Brand__Section-module__Section___wNnZR.Primer_Brand__Section-module__Section--variant-gridline___ULwen:after{bottom:calc(-1 * var(--brand-borderWidth-thin))}.Primer_Brand__Section-module__Section--rounded___y86mS{border-radius:var(--rounded-radius) var(--rounded-radius) 0 0;margin-top:calc(-1 * var(--rounded-radius))}.Primer_Brand__Section-module__Section___wNnZR:has(+.Primer_Brand__Section-module__Section--rounded___y86mS){--rounded-padding-overlap-adjustment:var(--rounded-radius)}.Primer_Brand__Section-module__Section--paddingBlockStart-none___q_KT1,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-none___VKaUr{--padding-block-start:0}.Primer_Brand__Section-module__Section--paddingBlockStart-condensed___jXPMP,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-condensed___MM1ai{--padding-block-start:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section--paddingBlockStart-normal___okSnn,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-normal___EIj1h{--padding-block-start:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section--paddingBlockStart-spacious___Dbzh2,.Primer_Brand__Section-module__Section-narrow--paddingBlockStart-spacious___r_4fG{--padding-block-start:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section--paddingBlockEnd-none___OPMCW,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-none___PaxIA{--padding-block-end:0px}.Primer_Brand__Section-module__Section--paddingBlockEnd-condensed___Iq2bF,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-condensed___Nmq0F{--padding-block-end:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section--paddingBlockEnd-normal___wlGa4,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-normal___aMtgm{--padding-block-end:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section--paddingBlockEnd-spacious___BFFzY,.Primer_Brand__Section-module__Section-narrow--paddingBlockEnd-spacious___LGxf3{--padding-block-end:var(--brand-Section-padding-spacious)}@media screen and (width>=48rem){.Primer_Brand__Section-module__Section___wNnZR{background-color:var(--brand-Section-regular-background-color,var(--brand-Section-background-color));background-image:var(--brand-Section-regular-background-image-src,var(--brand-Section-background-image-src));background-size:var(--brand-Section-regular-background-image-size,var(--brand-Section-background-image-size));background-position:var(--brand-Section-regular-background-image-position,var(--brand-Section-background-image-position))}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-none___HgDah{--padding-block-start:0}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-condensed___JTztM{--padding-block-start:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-normal___JTsVr{--padding-block-start:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-regular--paddingBlockStart-spacious___q_eWC{--padding-block-start:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-none___lPDsS{--padding-block-end:0px}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-condensed___uRtvc{--padding-block-end:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-normal___gtZb4{--padding-block-end:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-regular--paddingBlockEnd-spacious___SalhC{--padding-block-end:var(--brand-Section-padding-spacious)}}@media screen and (width>=80rem){.Primer_Brand__Section-module__Section___wNnZR{background-color:var(--brand-Section-wide-background-color,var(--brand-Section-background-color));background-image:var(--brand-Section-wide-background-image-src,var(--brand-Section-background-image-src));background-size:var(--brand-Section-wide-background-image-size,var(--brand-Section-background-image-size));background-position:var(--brand-Section-wide-background-image-position,var(--brand-Section-background-image-position))}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-none___aIgHE{--padding-block-start:0}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-condensed___daJpd{--padding-block-start:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-normal___J4uxA{--padding-block-start:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-wide--paddingBlockStart-spacious___wje1J{--padding-block-start:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-none___FjpEH{--padding-block-end:0px}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-condensed___Lijsj{--padding-block-end:var(--brand-Section-padding-condensed)}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-normal___u9c2A{--padding-block-end:var(--brand-Section-padding-normal)}.Primer_Brand__Section-module__Section-wide--paddingBlockEnd-spacious___zMr50{--padding-block-end:var(--brand-Section-padding-spacious)}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7){border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);position:relative}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):before,.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):after{content:"";width:var(--brand-borderWidth-thin);background-color:var(--brand-color-border-muted);pointer-events:none;position:absolute;inset-block-start:calc(-1 * var(--padding-block-start));inset-block-end:calc(-1 * var(--adjusted-padding-block-end))}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):before{inset-inline-start:calc(-1 * var(--brand-borderWidth-thin))}.Primer_Brand__Section-module__Section--variant-gridline___ULwen .Primer_Brand__Section-module__Section__container___irc5A:not(.Primer_Brand__Section-module__Section__container--fullWidth___LwJV7):after{inset-inline-end:calc(-1 * var(--brand-borderWidth-thin))}}:root{--brand-Statistic-spacing-spacious:2rem;--brand-Statistic-spacing-normal:1.5rem;--brand-Statistic-spacing-condensed:1rem}.Primer_Brand__Statistic-module__Statistic___sB6bA img,.Primer_Brand__Statistic-module__Statistic___sB6bA picture{display:block}.Primer_Brand__Statistic-module__Statistic--variant-boxed___X9IAB{background-color:var(--brand-color-canvas-subtle);border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Statistic-module__Statistic--variant-boxed___X9IAB,.Primer_Brand__Statistic-module__Statistic--variant-boxed___X9IAB.Primer_Brand__Statistic-module__Statistic--padding-none___mZRAE{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--padding-none___mZRAE{padding:0}.Primer_Brand__Statistic-module__Statistic--padding-condensed___JhuYL{padding:var(--brand-Statistic-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--padding-normal___JcofR{padding:var(--brand-Statistic-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--padding-spacious___njBos{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-condensed___MWqsG{padding:var(--brand-box-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-normal___yCtE0{padding:var(--brand-box-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-spacious___iSeZl{padding:var(--base-size-32)}.Primer_Brand__Statistic-module__Statistic--narrow-padding-none___D1xJU{padding:0}@media screen and (width>=48rem){.Primer_Brand__Statistic-module__Statistic--regular-padding-condensed___kJuH6{padding:var(--brand-Statistic-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--regular-padding-normal___UZq0p{padding:var(--brand-Statistic-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--regular-padding-spacious___MODDU{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--regular-padding-none___fR2Ho{padding:0}}@media screen and (width>=80rem){.Primer_Brand__Statistic-module__Statistic--wide-padding-condensed___KVY9L{padding:var(--brand-Statistic-spacing-condensed)}.Primer_Brand__Statistic-module__Statistic--wide-padding-normal___WJhTd{padding:var(--brand-Statistic-spacing-normal)}.Primer_Brand__Statistic-module__Statistic--wide-padding-spacious___cnjbs{padding:var(--brand-Statistic-spacing-spacious)}.Primer_Brand__Statistic-module__Statistic--wide-padding-none____fUci{padding:0}}.Primer_Brand__Statistic-module__Statistic__heading___xQ8Ki{position:relative}.Primer_Brand__Statistic-module__Statistic__heading___xQ8Ki sup{font-size:var(--brand-text-size-100);line-height:0;font-weight:var(--brand-text-weight-100);vertical-align:top;top:var(--base-size-6);font-stretch:100%;position:relative}.Primer_Brand__Statistic-module__Statistic__heading___xQ8Ki sup a{padding:var(--base-size-4);line-height:1;display:inline-block}.Primer_Brand__Statistic-module__Statistic__description--accent___wZsb5{color:var(--brand-color-accent-primary)}.Primer_Brand__Statistic-module__Statistic__description___I2lpL{margin-block-start:var(--base-size-8);font-stretch:100%;display:block;position:relative}.Primer_Brand__Statistic-module__Statistic__description___I2lpL sup{font-size:var(--brand-text-size-100);vertical-align:top;line-height:0;position:relative;top:0}.Primer_Brand__Statistic-module__Statistic__description___I2lpL sup a{padding:var(--base-size-4);line-height:1;display:inline-block}.Primer_Brand__BreakoutBanner-module__BreakoutBanner___OholM{max-width:var(--brand-breakpoint-xlarge);border-radius:var(--brand-borderRadius-large);background-repeat:no-repeat;background-color:var(--brand-BreakoutBanner-narrow-background-color,var(--brand-BreakoutBanner-background-color));background-image:var(--brand-BreakoutBanner-narrow-background-image-src,var(--brand-BreakoutBanner-background-image-src));background-size:var(--brand-BreakoutBanner-narrow-background-image-size,var(--brand-BreakoutBanner-background-image-size));background-position:50%;background-position:var(--brand-BreakoutBanner-narrow-background-image-position,var(--brand-BreakoutBanner-background-image-position,center));width:100%;margin:0 auto;display:flex;position:relative}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-container___X145s{border-radius:var(--brand-borderRadius-xlarge);padding:var(--base-size-40) var(--base-size-24) var(--base-size-128);z-index:1;box-sizing:border-box;width:100%}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-content___WPxKC{flex-direction:column;align-items:flex-start;display:flex}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-container--background___i0tOy{background:var(--brand-BreakoutBanner-bgColor)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-content--center___mDWpD{text-align:center;align-items:center}.Primer_Brand__BreakoutBanner-module__BreakoutBanner__heading___mnzmT{max-width:20ch}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-description___xrWUJ{max-width:54ch;margin-block-start:var(--base-size-16)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-linkGroup___s8PUk{margin-block-start:var(--base-size-48)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-leadingVisual___lIc6l{margin-block-end:var(--base-size-48)}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-leadingVisual___lIc6l img,.Primer_Brand__BreakoutBanner-module__BreakoutBanner-leadingVisual___lIc6l picture{display:block}@media screen and (width>=48rem){.Primer_Brand__BreakoutBanner-module__BreakoutBanner___OholM{background-color:var(--brand-BreakoutBanner-regular-background-color,var(--brand-BreakoutBanner-background-color));background-image:var(--brand-BreakoutBanner-regular-background-image-src,var(--brand-BreakoutBanner-background-image-src));background-size:var(--brand-BreakoutBanner-regular-background-image-size,var(--brand-BreakoutBanner-background-image-size));background-position:var(--brand-BreakoutBanner-regular-background-image-position,var(--brand-BreakoutBanner-background-image-position))}.Primer_Brand__BreakoutBanner-module__BreakoutBanner-container___X145s{padding:var(--base-size-48)}}@media screen and (width>=80rem){.Primer_Brand__BreakoutBanner-module__BreakoutBanner___OholM{background-color:var(--brand-BreakoutBanner-wide-background-color,var(--brand-BreakoutBanner-background-color));background-image:var(--brand-BreakoutBanner-wide-background-image-src,var(--brand-BreakoutBanner-background-image-src));background-size:var(--brand-BreakoutBanner-wide-background-image-size,var(--brand-BreakoutBanner-background-image-size));background-position:var(--brand-BreakoutBanner-wide-background-image-position,var(--brand-BreakoutBanner-background-image-position))}}.Primer_Brand__Footnotes-module__Footnotes___EvN5V{padding-block:var(--base-size-80);gap:var(--base-size-12);flex-direction:column;display:flex}.Primer_Brand__Footnotes-module__Footnotes--variant-citations___bUHtk{font-family:var(--brand-body-fontFamily);font-weight:var(--brand-text-weight-100);font-size:var(--brand-text-size-100);line-height:var(--brand-text-lineHeight-100);letter-spacing:var(--brand-text-letterSpacing-100);color:var(--brand-color-text-muted);margin:0;padding-inline-start:var(--base-size-16)}.Primer_Brand__Footnotes-module__Footnotes--variant-citations___bUHtk .Primer_Brand__Footnotes-module__FootnotesItem___QQCwY{padding-inline-start:var(--base-size-12)}.Primer_Brand__Footnotes-module__FootnotesItem___QQCwY{scroll-margin-top:80px}.Primer_Brand__Footnotes-module__FootnotesItem__citationIcon___HeITw{margin-inline-start:var(--base-size-4);transform:scaleY(-1)}.Primer_Brand__Footnotes-module__FootnotesItem__citationText___s2efV{gap:var(--base-size-4);display:inline}:root{--brand-FrostedGlassVFX-blurIntensity-high:var(--base-size-80);--brand-FrostedGlassVFX-blurIntensity-medium:var(--base-size-48);--brand-FrostedGlassVFX-blurIntensity-low:var(--base-size-12)}:root,[data-color-mode=light]{--brand-FrostedGlassVFX-bgColor:#ffffffb3;--brand-FrostedGlassVFX-boxShadow:0 4px 10px 0 #00000005;--brand-FrostedGlassVFX-borderMask:linear-gradient(to bottom, #d8dee480, #d8dee45e 100%)}[data-color-mode=dark]{--brand-FrostedGlassVFX-bgColor:#9c9c9c1a;--brand-FrostedGlassVFX-boxShadow:0 4px 10px 0 #00000005;--brand-FrostedGlassVFX-borderMask:linear-gradient(#000 0, #000 0) exclude, linear-gradient(#000 0, #000 0) content-box}@supports (background:linear-gradient(red 0%, red 0% 1%, red 2%)){[data-color-mode=dark]{--brand-FrostedGlassVFX-borderMask:linear-gradient(#000 0 0) exclude, linear-gradient(#000 0 0) content-box}}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ{background-color:var(--brand-FrostedGlassVFX-bgColor);position:relative}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--rounded-corners___V4gcI{border-radius:var(--brand-borderRadius-xlarge)}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--intensity-low___a87yo{-webkit-backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-low));backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-low))}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--intensity-medium___z1VQ1{-webkit-backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-medium));backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-medium))}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--intensity-high___kUSHI{-webkit-backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-high));backdrop-filter:blur(var(--brand-FrostedGlassVFX-blurIntensity-high))}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ:before{content:"";z-index:-1;padding:var(--brand-borderWidth-thin);background:var(--brand-FrostedGlassVFX-borderMask);-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0), linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;-webkit-mask-composite:xor;-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0), linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;-webkit-mask-composite:xor;-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;mask:linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0, var(--base-color-scale-black-0) 0) content-box;-webkit-mask-composite:xor;position:absolute;inset:0}@supports (background:linear-gradient(red 0%, red 0% 1%, red 2%)){.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ:before{-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0 0), linear-gradient(var(--base-color-scale-black-0) 0 0) content-box;-webkit-mask:linear-gradient(var(--base-color-scale-black-0) 0 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0 0) content-box;mask:linear-gradient(var(--base-color-scale-black-0) 0 0) exclude, linear-gradient(var(--base-color-scale-black-0) 0 0) content-box}}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX--rounded-corners___V4gcI:before{border-radius:var(--brand-borderRadius-xlarge)}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ>*{background-color:#0000}.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ>*,.Primer_Brand__FrostedGlassVFX-module__FrostedGlassVFX___DrCGZ>:before{border-color:#0000}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked___ngJ17{--brand-Grid-spacing-row:var(--base-size-64)}@media screen and (width>=48rem) and (width<=63.24rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked___ngJ17{max-width:618px;margin-inline:auto}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked___ngJ17.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{padding-inline:var(--base-size-32);padding-block:calc(var(--base-size-64) - var(--base-size-4));--SectionIntroStacked-item-divider-overflow-start:var(--base-size-32);--SectionIntroStacked-item-divider-overflow-end:var(--base-size-32)}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{padding-inline:var(--base-size-24);padding-block:var(--base-size-32);--SectionIntroStacked-item-divider-overflow-start:var(--base-size-24);--SectionIntroStacked-item-divider-overflow-end:var(--base-size-24);position:relative}@media screen and (width>=63.25rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{padding-inline:var(--base-size-64);padding-block:var(--base-size-64);--SectionIntroStacked-item-divider-overflow-start:0px;--SectionIntroStacked-item-divider-overflow-end:var(--base-size-64)}}@media screen and (width>=80rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI{border-inline:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading--muted___CHRqJ,.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__item-text--muted___iWmQS{color:var(--brand-color-text-muted)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading--muted___CHRqJ em,.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading--muted___CHRqJ b,.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__item-text___5DHtq em,.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__item-text___5DHtq b{color:var(--brand-color-text-default);font-style:normal;font-weight:var(--base-text-weight-normal)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--full-width___kRyw0 .Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading___tolwP{max-width:none}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-description___zSilb{max-width:50ch;margin-block-start:var(--base-size-16)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-link___Y2Sox{margin-block-start:var(--base-size-16)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}@media screen and (width<=63.24rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-heading___tolwP{font-size:var(--brand-text-size-600)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{overflow:hidden}}@media screen and (width>=63.25rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{top:var(--base-size-2);position:relative}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-items___rf3nz{border-inline-start:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);margin-block:calc(-1 * var(--base-size-64));padding-block:calc(var(--base-size-64) - var(--base-size-32));position:static;top:auto}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked-content___ULK2q{padding-inline-end:var(--base-size-80)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD{padding-inline-start:var(--base-size-64)}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD{border-block-end:none;position:relative}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:first-child{padding-block-start:var(--base-size-40)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:last-child{padding-block-end:var(--base-size-40)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStacked--variant-gridline___T6ZrI .Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:not(:last-child):after{content:"";bottom:0;left:calc(-1 * var(--SectionIntroStacked-item-divider-overflow-start));right:calc(-1 * var(--SectionIntroStacked-item-divider-overflow-end));border-bottom:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);position:absolute}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD{padding-block:var(--base-size-40);border-block-end:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted)}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:last-child{border-block-end:none;padding-block-end:0}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item___c3mLD:first-child{padding-block-start:0}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item--with-icon___Ej53Q{align-items:flex-start;gap:var(--base-size-24);flex-direction:column;display:flex}@media screen and (width>=48rem){.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem-item--with-icon___Ej53Q{gap:var(--base-size-48);flex-direction:row}}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__content___TdGFS{gap:var(--base-size-12);flex-direction:column;flex:1;min-width:0;display:flex}.Primer_Brand__SectionIntroStacked-module__SectionIntroStackedItem__icon___TUK4t{border-radius:var(--base-size-12);flex-shrink:0}:root{--brand-Tabs-container-padding:var(--base-size-4)}:root,[data-color-mode=light]{--brand-Tabs-item-accent-bgColor-rest:var(--base-color-scale-green-6);--brand-Tabs-item-accent-fgColor-rest:var(--base-color-scale-white-0);--brand-Tabs-item-default-bgColor-active:linear-gradient(180deg, #ffffff1f 0%, #9999991f 100%);--brand-Tabs-item-default-borderColor-active:var(--brand-color-border-default);--brand-Tabs-item-underline-rest:var(--base-color-scale-black-0);--brand-Tabs-list-borderWidth-active:var(--brand-borderWidth-thin)}[data-color-mode=dark]{--brand-Tabs-item-accent-bgColor-rest:var(--base-color-scale-green-5);--brand-Tabs-item-accent-fgColor-rest:var(--base-color-scale-white-0);--brand-Tabs-item-default-bgColor-active:linear-gradient(180deg, #ffffff1f 0%, #9999991f 100%);--brand-Tabs-item-default-borderColor-active:var(--base-color-scale-white-0);--brand-Tabs-item-underline-rest:var(--base-color-scale-white-0);--brand-Tabs-list-borderWidth-active:var(--brand-borderWidth-thick)}.Primer_Brand__Tabs-module__Tabs___p41NK{gap:var(--base-size-4);background-color:var(--brand-color-canvas-backdrop);border-radius:var(--brand-borderRadius-large);padding:var(--brand-Tabs-container-padding);width:fit-content;min-height:var(--base-size-48);display:flex;position:relative}.Primer_Brand__Tabs-module__Tabs-container___jByf5{display:grid}@media screen and (width<=48rem){.Primer_Brand__Tabs-module__Tabs-container___jByf5{flex-direction:column;align-items:center;width:100%;display:flex;position:relative}.Primer_Brand__Tabs-module__Tabs-container--align-start___X9kN4{align-items:flex-start}.Primer_Brand__Tabs-module__Tabs-container--align-center___MOjwP{align-items:center}.Primer_Brand__Tabs-module__Tablist__wrapper___Bz69R{width:fit-content;max-width:100%;position:relative;overflow:hidden}.Primer_Brand__Tabs-module__Tablist__wrapper___Bz69R:after{content:"";right:var(--brand-Tabs-list-borderWidth-active);top:var(--base-size-2);bottom:var(--base-size-2);background:linear-gradient(to left, var(--brand-color-canvas-default) 30%, transparent);width:var(--base-size-48);z-index:2;pointer-events:none;transition:opacity var(--brand-animation-duration-default) var(--brand-animation-easing-default), visibility var(--brand-animation-duration-default) var(--brand-animation-easing-default);opacity:0;opacity:calc(var(--has-overflow,0) * var(--can-scroll-right,0));border-radius:inherit;position:absolute}.Primer_Brand__Tabs-module__Tablist__wrapper--default___pPP9D:after,.Primer_Brand__Tabs-module__Tablist__wrapper--accent___nG4lJ:after{border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Tabs-module__Tablist__wrapper--underline___xT6ku:after{border-radius:var(--brand-borderRadius-large)}.Primer_Brand__Tabs-module__Tablist__wrapper--lastTabIsActive___DHNPp:after{opacity:0;visibility:hidden}.Primer_Brand__Tabs-module__Tabs___p41NK{scrollbar-width:none;-ms-overflow-style:none;max-width:100%;overflow:auto hidden}.Primer_Brand__Tabs-module__Tabs___p41NK::-webkit-scrollbar{display:none}}.Primer_Brand__Tabs-module__Tabs-container--align-start___X9kN4{justify-items:flex-start}.Primer_Brand__Tabs-module__Tabs-container--align-center___MOjwP{justify-items:center}.Primer_Brand__Tabs-module__Tabs--default___g4Kwt,.Primer_Brand__Tabs-module__Tabs--accent___amEYm{border:var(--brand-Tabs-list-borderWidth-active) solid var(--brand-color-border-default);border-radius:var(--brand-borderRadius-full)}.Primer_Brand__Tabs-module__Tabs--underline___Nm9xx{gap:var(--base-size-24)}.Primer_Brand__Tabs-module__Tabs__item___rPI4n{z-index:1;cursor:pointer;padding:var(--base-size-8) var(--base-size-16);border-radius:var(--brand-borderRadius-full);transition:color var(--brand-animation-duration-fast) ease-in-out;white-space:nowrap;font-family:var(--brand-fontStack-sansSerif);font-weight:var(--brand-text-weight-600);font-size:var(--brand-text-size-200);line-height:var(--brand-text-lineHeight-200);letter-spacing:var(--brand-text-letterSpacing-200);color:var(--brand-color-text-default);background:0 0;border:0;position:relative}.Primer_Brand__Tabs-module__Tabs__slider___hLsBB{top:var(--base-size-4);bottom:var(--base-size-4);transition:all var(--brand-animation-duration-fast) var(--brand-animation-easing-glide);z-index:0;transform:translate(0);transform:translateX(var(--brand-Tabs-slider-x,0px));width:var(--brand-Tabs-slider-width);position:absolute}.Primer_Brand__Tabs-module__Tabs--default___g4Kwt .Primer_Brand__Tabs-module__Tabs__slider___hLsBB{border-radius:var(--brand-borderRadius-full);border:var(--brand-borderWidth-thin) solid var(--brand-Tabs-item-default-borderColor-active);background:var(--brand-Tabs-item-default-bgColor-active)}.Primer_Brand__Tabs-module__Tabs--accent___amEYm .Primer_Brand__Tabs-module__Tabs__slider___hLsBB{border-radius:var(--brand-borderRadius-full);border:var(--brand-borderWidth-thin) solid transparent;background:var(--brand-Tabs-item-accent-bgColor-rest)}.Primer_Brand__Tabs-module__Tabs--underline___Nm9xx .Primer_Brand__Tabs-module__Tabs__slider___hLsBB{border-bottom:var(--brand-borderWidth-thick) solid var(--brand-Tabs-item-underline-rest)}.Primer_Brand__Tabs-module__Tabs__item___rPI4n:focus-visible{outline:var(--base-size-2) solid var(--brand-color-focus);outline-offset:var(--base-size-2)}.Primer_Brand__Tabs-module__Tabs__item--active___ruoXn{color:var(--brand-color-text-default)}.Primer_Brand__Tabs-module__Tabs--underline___Nm9xx .Primer_Brand__Tabs-module__Tabs__item___rPI4n{padding:var(--base-size-8);border-radius:var(--brand-borderRadius-medium)}.Primer_Brand__Tabs-module__Tabs--accent___amEYm .Primer_Brand__Tabs-module__Tabs__item___rPI4n{transition:color var(--brand-animation-duration-faster) ease}.Primer_Brand__Tabs-module__Tabs--accent___amEYm .Primer_Brand__Tabs-module__Tabs__item--active___ruoXn{color:var(--brand-Tabs-item-accent-fgColor-rest)}.Primer_Brand__Tabs-module__Tabs__panelContainer___oZAgR{margin-top:var(--base-size-16)}.Primer_Brand__Tabs-module__Tabs__panel___JjAmC{color:var(--brand-color-text-default)}.Primer_Brand__Tabs-module__Tabs__controls___OrV44{margin-block-end:var(--base-size-12)}.Primer_Brand__Tabs-module__Tabs__indicator___KDvsE{width:var(--base-size-6);border-radius:var(--brand-borderRadius-full);background-color:var(--brand-color-text-muted);height:var(--base-size-6);transition:width var(--brand-animation-duration-default) var(--brand-animation-easing-default)}.Primer_Brand__Tabs-module__Tabs__indicator--active___XFIc8{background-color:var(--brand-color-text-default);width:var(--base-size-24)}.Primer_Brand__Tabs-module__Tabs__control___crCR5{cursor:pointer;height:var(--base-size-24);width:var(--base-size-24);background-color:#0000;border:none;align-content:center;display:flex}.Primer_Brand__Tabs-module__Tabs__control-icon___cgGsh{top:calc(var(--base-size-2) / -2);position:relative;vertical-align:middle!important}@media screen and (width>=48rem){.Primer_Brand__Tabs-module__Tabs__controls___OrV44{display:none}.Primer_Brand__Tabs-module__Tabs__item___rPI4n{padding-inline:var(--base-size-24)}}:root{--brand-Tiles-item-maxSize:11.5rem}:root,[data-color-mode=light]{--brand-tiles-bgColor-rest:#fafafa;--brand-tiles-bgColor-hover:#f2f5f3;--brand-tiles-highlightColor:#08872b}[data-color-mode=dark]{--brand-tiles-bgColor-rest:#090d0a;--brand-tiles-bgColor-hover:#101411;--brand-tiles-highlightColor:#5fed83}.Primer_Brand__Tiles-module__Tiles___z9bH9{width:100%;color:var(--brand-color-text-default)}.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-xsmall);flex-wrap:wrap;justify-content:center;margin:0;margin-inline:auto;padding:0;list-style:none;display:flex}.Primer_Brand__Tiles-module__Tiles--layout-default___UIRQE .Primer_Brand__Tiles-module__Tiles-grid___PVssB,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-grid___PVssB{max-width:min(100%, calc(var(--brand-Tiles-item-maxSize) * var(--tiles-columns)))}@media screen and (width>=34rem) and (width<=47.99rem){.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-small)}}@media screen and (width>=48rem){.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-medium)}}@media screen and (width>=63.25rem){.Primer_Brand__Tiles-module__Tiles-grid___PVssB{--tiles-columns:var(--tiles-columns-large)}}.Primer_Brand__Tiles-module__Tiles--variant-gridlines___XV5ah .Primer_Brand__Tiles-module__Tiles-grid___PVssB{padding-right:var(--brand-borderWidth-thin);padding-bottom:var(--brand-borderWidth-thin)}.Primer_Brand__Tiles-module__Tiles-item___NtPvv{--tiles-inset-shadow:inset 0 0 0 transparent;width:calc(100% / var(--tiles-columns));max-width:var(--brand-Tiles-item-maxSize);max-height:var(--brand-Tiles-item-maxSize);box-sizing:border-box;background-color:var(--brand-tiles-bgColor-rest);border-top:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);border-left:var(--brand-borderWidth-thin) solid var(--brand-color-border-muted);box-shadow:var(--brand-borderWidth-thin) 0 0 0 var(--brand-color-border-muted), 0 var(--brand-borderWidth-thin) 0 0 var(--brand-color-border-muted), inset 0 0 0 transparent;box-shadow:var(--brand-borderWidth-thin) 0 0 0 var(--brand-color-border-muted), 0 var(--brand-borderWidth-thin) 0 0 var(--brand-color-border-muted), var(--tiles-inset-shadow);transition:background-color var(--brand-animation-duration-faster) var(--brand-animation-easing-default), box-shadow var(--brand-animation-duration-faster) var(--brand-animation-easing-default);flex-direction:column;display:flex;position:relative}:is(.Primer_Brand__Tiles-module__Tiles-item___NtPvv:has(.Primer_Brand__Tiles-module__Tiles-item-link___OhYck):hover,.Primer_Brand__Tiles-module__Tiles-item___NtPvv:has(.Primer_Brand__Tiles-module__Tiles-item-link___OhYck):focus-within){--tiles-inset-shadow:inset 0 var(--base-size-2) 0 var(--brand-tiles-highlightColor);background-color:var(--brand-tiles-bgColor-hover)}.Primer_Brand__Tiles-module__Tiles-item-link___OhYck{width:100%;color:inherit;flex:1;-webkit-text-decoration:none;text-decoration:none;display:flex}.Primer_Brand__Tiles-module__Tiles-item-link___OhYck:focus-visible{outline:var(--base-size-4) solid var(--brand-color-focus);outline-offset:calc(-1 * var(--base-size-4));border-radius:var(--brand-borderRadius-small)}.Primer_Brand__Tiles-module__Tiles-item-content___m7HiY{aspect-ratio:1;justify-content:center;align-items:center;width:100%;display:flex;position:relative}.Primer_Brand__Tiles-module__Tiles-item-media___BLrcU{justify-content:center;align-items:center;display:flex}.Primer_Brand__Tiles-module__Tiles-item-media___BLrcU svg,.Primer_Brand__Tiles-module__Tiles-item-media___BLrcU img{width:auto;height:var(--base-size-40);max-width:100%}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU svg,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU img{height:var(--base-size-28)}@media screen and (width>=48rem){.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU svg,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU img{height:var(--base-size-32)}}.Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{justify-content:space-between;align-items:center;gap:var(--base-size-4);padding:var(--base-size-12) var(--base-size-16);display:flex;position:absolute;bottom:0;left:0;right:0}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU{transition:transform var(--brand-animation-duration-fast) var(--brand-animation-easing-default)}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:hover .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:focus-visible .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU{transform:translateY(calc(-1 * var(--base-size-4)))}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{opacity:0;transform:translateY(var(--base-size-4));transition:opacity var(--brand-animation-duration-fast) var(--brand-animation-easing-default), transform var(--brand-animation-duration-fast) var(--brand-animation-easing-default);pointer-events:none}.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:hover .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-link___OhYck:focus-visible .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{opacity:1;transform:translateY(0)}.Primer_Brand__Tiles-module__Tiles-item-name___DHlvN{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.Primer_Brand__Tiles-module__Tiles-item-icon___HpkyN{color:var(--brand-color-text-default);flex-shrink:0}@media (prefers-reduced-motion:reduce){.Primer_Brand__Tiles-module__Tiles-item___NtPvv,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-media___BLrcU,.Primer_Brand__Tiles-module__Tiles--layout-compact___zPp1M .Primer_Brand__Tiles-module__Tiles-item-label___nnmkF{transition:none}}@font-face{font-family:Mona Sans;src:url(/assets/MonaSansVF-wdth-wght-opsz.woff2)format("woff2 supports variations"),url(/assets/MonaSansVF-wdth-wght-opsz.woff2)format("woff2-variations");font-weight:200 900;font-display:swap;font-synthesis:none;font-feature-settings:"liga" 0}@font-face{font-family:MonaSansFallback;size-adjust:104.5%;ascent-override:71%;src:local(Arial)}@font-face{font-family:MonaSansHeaderFallback;size-adjust:103.1%;ascent-override:70%;src:local(Arial Bold)}@font-face{font-family:Hubot Sans;src:url(/assets/Hubot-Sans.woff2)format("woff2 supports variations"),url(/assets/Hubot-Sans.woff2)format("woff2-variations");font-weight:200 900;font-display:swap}@font-face{font-family:Mona Sans Mono;src:url(/assets/MonaSansMonoVF-wght.woff2)format("woff2 supports variations"),url(/assets/MonaSansMonoVF-wght.woff2)format("woff2-variations");font-weight:200 900;font-display:swap;font-synthesis:none}:root,[data-color-mode]{--hub-canvas-default:var(--brand-color-canvas-default);--hub-canvas-white:var(--base-color-scale-white-0);--hub-canvas-muted:var(--brand-color-canvas-muted);--hub-canvas-subtle:var(--brand-color-canvas-subtle);--hub-fg-default:var(--brand-color-text-default);--hub-fg-muted:var(--brand-color-text-muted);--hub-fg-on-emphasis:var(--brand-color-text-onEmphasis);--hub-fg-link:var(--brand-color-text-link-rest);--hub-fg-danger:var(--brand-color-danger-fg);--hub-danger-emphasis:var(--brand-color-danger-emphasis);--hub-fg-on-danger:var(--brand-color-text-onEmphasis);--hub-fg-success:var(--brand-color-success-fg);--hub-success-emphasis:var(--brand-color-success-emphasis);--hub-border-default:var(--brand-color-border-default);--hub-border-muted:var(--brand-color-border-muted);--hub-focus:var(--brand-color-focus);--hub-primary-bg:var(--brand-button-primary-bgColor-rest);--hub-primary-bg-hover:var(--brand-button-primary-bgColor-hover);--hub-primary-bg-active:var(--brand-button-primary-bgColor-active);--hub-primary-fg:var(--brand-button-primary-fgColor-rest);--hub-accent:var(--brand-color-accent-primary);--hub-accent-subtle:color-mix(in srgb, var(--brand-color-accent-primary) 12%, var(--brand-color-canvas-default));--hub-danger-subtle:var(--brand-color-danger-subtle);--hub-success-subtle:var(--brand-color-success-subtle);--hub-attention:var(--brand-color-accent-secondary);--hub-attention-subtle:color-mix(in srgb, var(--brand-color-accent-secondary) 12%, var(--brand-color-canvas-default));--hub-border-width-thick:var(--brand-borderWidth-thick);--hub-text-size-small:var(--base-size-12);--hub-shadow-floating:0 .5rem 1.5rem #00000029;--hub-shadow-control-raised:0 .0625rem .125rem #00000014;--hub-shadow-control-field:0 .0625rem 0 #00000008, 0 .125rem .125rem #00000005;--hub-shadow-selection:0 .0625rem .1875rem #0000001f;--hub-shadow-review-overlay:0 .75rem 2rem #0104094d;--hub-shadow-review-marker:0 0 2px #01040936, 0 3px 5px #01040932;--hub-space-4:var(--base-size-4);--hub-space-8:var(--base-size-8);--hub-space-12:var(--base-size-12);--hub-space-16:var(--base-size-16);--hub-space-24:var(--base-size-24);--hub-space-32:var(--base-size-32);--hub-radius-small:var(--brand-borderRadius-small);--hub-radius-medium:var(--brand-borderRadius-medium);--hub-radius-large:var(--brand-borderRadius-large);--hub-repository-sidebar-width:calc(var(--base-size-128) + var(--base-size-96) + var(--base-size-24) + var(--base-size-2));--hub-repository-sidebar-inset:var(--base-size-16);--hub-repository-sidebar-collapsed-width:calc(var(--base-size-40) + var(--hub-repository-sidebar-inset) + var(--hub-repository-sidebar-inset));--hub-repository-control-width:calc(var(--hub-repository-sidebar-width) - var(--hub-repository-sidebar-inset) - var(--hub-repository-sidebar-inset) - var(--brand-borderWidth-thin));--hub-repository-account-padding-top:var(--base-size-16);--hub-repository-search-width:calc(var(--base-size-128) + var(--base-size-96))}html,body,#app{min-height:100%;margin:0}body{font-family:var(--brand-body-fontFamily);font-feature-settings:"liga" 0;font-variation-settings:"ital" 0, "opsz" 0, "wdth" 100;-webkit-font-smoothing:antialiased}#app{container-type:inline-size}.hub-theme{background:var(--hub-canvas-default);min-height:100vh;color:var(--hub-fg-default);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--brand-body-fontFamily)}:root[data-color-mode=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-color-mode=dark],.hub-theme[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-color-mode=dark]{--hub-shadow-floating:0 .5rem 1.5rem #00000073;--hub-shadow-control-raised:0 .0625rem .125rem #0003;--hub-shadow-control-field:0 .0625rem 0 #00000047, 0 .125rem .125rem #0000000d;--hub-shadow-selection:0 .0625rem .1875rem #00000059;--hub-shadow-review-overlay:0 .75rem 2rem #0000008c;--hub-shadow-review-marker:0 0 2px #00000080, 0 3px 5px #00000073}button,input,textarea,select{font:inherit}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-family:var(--font-sans,-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);color:var(--text-color-default,#1f2328);background:color-mix(in srgb, var(--background-color-default,#fff) 94%, var(--text-color-default,#1f2328))}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}*{box-sizing:border-box}html,body,#root,.canvas-base{width:100%;height:100%;margin:0;overflow:hidden}#root>div{width:100%;height:100%;min-height:0}body,.canvas-base{background:var(--brand-color-canvas-default,#fff)}.canvas-base{--hub-counter-background:color-mix(in srgb, var(--hub-fg-default) 10%, transparent);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--brand-color-text-default,#1f2328);font-family:var(--brand-body-fontFamily,-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);position:relative}.canvas-base[data-color-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--hub-shadow-floating:0 .5rem 1.5rem #00000073}.canvas-base button{-webkit-backdrop-filter:none;transition:none}.canvas-base .canvas-icon-button{width:var(--brand-control-small-size);background:0 0;border:0;gap:0;min-width:0;padding:0}.canvas-base .canvas-icon-button:hover{background:var(--brand-color-canvas-subtle,#f6f8fa)}.canvas-base .canvas-icon-button:focus-visible{outline:2px solid var(--hub-accent);outline-offset:2px}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.renderer-loading{visibility:hidden}.canvas-shell{--canvas-browser-bar-height:2.5rem;--canvas-toolbar-height:2.75rem;--canvas-preview-top:calc(var(--canvas-browser-bar-height) + var(--canvas-toolbar-height));grid-template-rows:var(--canvas-browser-bar-height) auto minmax(0, 1fr);width:100%;height:100%;min-height:0;display:grid;position:relative;overflow:clip}.prototype-frame{background:var(--hub-canvas-default);border:0;width:100%;height:100%;min-height:0;display:block}.canvas-shell--inactive{z-index:0;pointer-events:none}.canvas-base>.canvas-share-page{z-index:1;position:absolute;inset:0}.thread-sample{--hub-sidebar-top:var(--canvas-preview-top,8.5rem)}.thread-sample__content{flex-direction:column;display:flex;overflow:hidden}.thread-sample__toolbar{color:var(--hub-fg-muted);border-bottom:1px solid var(--hub-border-muted);flex:none;margin:0;padding:.75rem 1rem;font-size:.75rem;line-height:1.5}.thread-sample__filters{justify-content:space-between;align-items:center;gap:var(--base-size-8);display:flex}.thread-sample__empty{padding:var(--base-size-8);color:var(--hub-fg-muted)}.thread-sample__fix-label{align-items:center;gap:var(--hub-space-8);display:inline-flex}.thread-sample__error,.thread-sample__target-status{padding:var(--hub-space-8);color:var(--hub-fg-muted);overflow-wrap:anywhere;flex:none;margin:0}.thread-sample__list{flex:1;min-height:0;padding:.5rem;overflow:auto}.thread-sample__card{margin-bottom:.5rem}.thread-sample__card:before{inset-inline:calc(-1 * var(--hub-space-12)) var(--hub-space-4)}.thread-sample__card:not(.thread-sample__card--resolved) .review-comment-row__author,.thread-sample__card:not(.thread-sample__card--resolved) .review-comment-row__body{color:var(--hub-fg-default)}.thread-sample__card:not(.thread-sample__card--resolved) .review-comment-row__author{font-weight:600}.thread-sample__card-button{padding-inline-end:1.75rem}.thread-sample__heading{align-items:center;gap:var(--base-size-4) var(--base-size-8);flex-wrap:wrap;display:flex}.thread-sample__heading .review-comment-row__author{flex:0 auto}.thread-sample__status{max-width:100%;color:var(--hub-fg-muted);font-size:.6875rem}.thread-sample__status--ready{padding:var(--base-size-2) var(--base-size-8);border:var(--brand-borderWidth-thin) solid var(--hub-fg-success);border-radius:var(--brand-borderRadius-full);color:var(--hub-fg-success);background:0 0}.thread-sample__card svg{flex-shrink:0}.thread-sample__metadata{margin:var(--base-size-4) 0 0 1.75rem;color:var(--hub-fg-muted);overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:.375rem;font-size:.6875rem;display:flex}.thread-sample__metadata code{font-size:inherit}.thread-sample__capture{max-width:calc(100% - 1.75rem);max-height:8rem;margin:var(--base-size-8) 0 0 1.75rem;object-fit:contain;display:block}.thread-sample__follow-ups{align-items:center;gap:var(--base-size-4);color:var(--hub-fg-default);margin:.5rem 0 0 1.75rem;font-size:.75rem;display:flex}.thread-sample__menu{position:absolute;top:.25rem;right:.25rem}.thread-sample__menu button[aria-haspopup=menu]+[popover][aria-hidden=true]{visibility:hidden}.thread-sample__menu-item{column-gap:var(--base-size-8)}.thread-sample__menu-item+.thread-sample__menu-item{margin-block-start:var(--base-size-4)}.thread-sample__surface{z-index:40}.thread-sample__markers{z-index:20}.thread-sample__marker{pointer-events:auto;position:absolute}.thread-sample__conversation .review-thread-conversation__header{grid-template-columns:minmax(0,1fr) auto auto;display:grid}.thread-sample__close{grid-area:1/3;justify-self:end}.thread-sample__copilot-avatar{background:var(--hub-fg-success)}[data-color-mode=dark] .thread-sample__copilot-avatar{background:var(--hub-success-emphasis)}.thread-sample__copilot-avatar img{object-fit:contain;padding:.375rem}.thread-sample__resolve{grid-area:1/2;justify-self:end}.thread-sample__conversation h3{flex:1;margin:0;font-size:.875rem}.thread-sample__delete,.thread-sample__delete span{color:var(--hub-fg-danger)}.thread-sample__menu-item.thread-sample__delete:not([aria-disabled=true]):hover{cursor:default}.thread-sample__quote{border-inline-start:3px solid var(--hub-border-default);white-space:pre-wrap;overflow-wrap:anywhere;margin-block-end:var(--hub-space-16);margin-inline:0;padding-inline-start:1rem}.thread-sample__delete-actions{justify-content:flex-end;align-items:center;gap:var(--hub-space-8);display:flex}.thread-sample__delete-confirm{--brand-button-primary-bgColor-rest:var(--hub-danger-emphasis);--brand-button-primary-bgColor-hover:var(--hub-danger-emphasis);--brand-button-primary-bgColor-active:var(--hub-danger-emphasis);--brand-button-primary-fgColor-rest:var(--hub-fg-on-danger)}.improvement-demo{display:contents}.improvement-demo__split{display:flex}.improvement-demo__split button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.improvement-demo__split button:last-child{border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:-1px}.improvement-demo__split button[aria-pressed=true]{background:var(--brand-button-secondary-bgColor-active)}.improvement-demo__split button:focus-visible{z-index:1;position:relative}.improvement-demo__notice{padding:var(--hub-space-8);overflow-wrap:anywhere;flex:none;margin:0}.improvement-demo__composer{width:min(34rem,100vw - 2rem)}.improvement-demo__dialog-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.75rem;margin-top:1rem;display:flex}.improvement-demo button:focus-visible,.improvement-demo [tabindex]:focus-visible{outline:2px solid var(--hub-focus);outline-offset:3px}
/*$vite$:1*/
\ No newline at end of file
diff --git a/.github/extensions/replica-prototype/assets/renderer.js b/.github/extensions/replica-prototype/assets/renderer.js
index e0329f51..62cddc17 100644
--- a/.github/extensions/replica-prototype/assets/renderer.js
+++ b/.github/extensions/replica-prototype/assets/renderer.js
@@ -1,8 +1,8 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["renderer-improvement-notes-prototype.js","renderer-rolldown-runtime.js","renderer-vendor.js","renderer-improvement-notes-vendor.js","renderer-prototype-canvas-improvement-threads.js","renderer-prototype-canvas-thread-sample.js"])))=>i.map(i=>d[i]);
-import{r as e,t}from"./renderer-rolldown-runtime.js";import{A as n,B as r,C as i,D as a,E as o,F as s,G as c,H as l,I as u,J as d,K as f,L as p,N as m,O as h,R as g,S as _,T as v,U as y,V as b,W as x,X as S,Y as C,_ as w,a as T,c as E,d as D,f as O,h as k,i as A,j,k as M,l as N,m as P,n as F,o as I,p as L,q as R,r as z,s as B,t as ee,u as te,v as ne,w as re,x as ie,y as ae,z as oe}from"./renderer-vendor.js";var V=e(S(),1),se=d(),H=f(),U=R();function ce({size:e=`medium`,className:t,label:n}){return(0,U.jsx)(`span`,{role:n?`status`:void 0,"aria-label":n,"aria-hidden":!n||void 0,className:`hub-spinner hub-spinner--${e}${t?` ${t}`:``}`})}function le({className:e,...t}){return(0,U.jsx)(`span`,{...t,className:`hub-visually-hidden${e?` ${e}`:``}`})}function W(e){let t=(0,V.useId)(),{as:n,href:r,ref:i,icon:a,description:o,loading:s=!1,size:c=`medium`,variant:l=`default`,className:u,...d}=e,f=`hub-icon-button${c===`small`?` hub-icon-button--small`:``}${l===`invisible`?` hub-icon-button--invisible`:``}${l===`danger`?` hub-icon-button--danger`:``}${u?` ${u}`:``}`,p=l===`invisible`?`subtle`:`secondary`,m=!(!o||d.title||d[`aria-describedby`]||`disabled`in d&&d.disabled),h=[d[`aria-describedby`],o&&!m?t:void 0].filter(Boolean).join(` `)||void 0,g=d.title??(m?void 0:o??d[`aria-label`]),_=o&&!m?(0,U.jsx)(le,{id:t,children:o}):null,v=s?(0,U.jsx)(ce,{decorative:!0,size:`small`}):(0,U.jsx)(a,{size:16}),y=s?!0:d[`aria-busy`];if(n===`a`){let e=i,t=(0,U.jsx)(H.Button,{...d,ref:e,as:`a`,href:r,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,U.jsx)(H.Tooltip,{ref:i,text:o,type:`description`,children:t}):t}let b=(0,U.jsx)(H.Button,{...d,ref:i,type:d.type??`button`,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,U.jsx)(H.Tooltip,{ref:i,text:o,type:`description`,children:b}):b}function ue({title:e,closeLabel:t,onClose:n,returnFocusRef:r,descriptionId:i,className:a,children:o}){let s=(0,V.useRef)(null),c=(0,V.useId)();return(0,V.useLayoutEffect)(()=>{let e=s.current,t=r?.current??(document.activeElement instanceof HTMLElement?document.activeElement:null);return e?.showModal(),()=>{e?.close(),(r?.current??t)?.focus()}},[r]),(0,U.jsxs)(`dialog`,{ref:s,"aria-labelledby":c,"aria-describedby":i,className:a?`canvas-dialog ${a}`:`canvas-dialog`,onCancel:e=>{e.preventDefault(),n()},onClick:e=>{if(e.target!==e.currentTarget)return;let{left:t,right:r,top:i,bottom:a}=e.currentTarget.getBoundingClientRect();(e.clientXr||e.clientYa)&&n()},children:[(0,U.jsxs)(`header`,{className:`canvas-dialog-header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,id:c,children:e}),(0,U.jsx)(W,{variant:`default`,size:`small`,icon:te,"aria-label":t,onClick:n})]}),o]})}var G={improvementNotesLoading:`Loading improvement notes demo...`,mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsLearnMore:`Learn more`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function de({onClose:e,state:t,titleButtonRef:n}){let[i,a]=(0,V.useState)(null),[o,s]=(0,V.useState)(null),c=t.stats.branchError?void 0:t.stats.branch,l=t.sessionId,u=t.stats.comparison;async function d(e,t){try{await navigator.clipboard.writeText(e),a(t),s(null)}catch{a(null),s(t===`branch`?G.branch:G.sessionId)}}function f(e,t){if(!e)return null;let n=t===`branch`?G.copyBranch:G.copySessionId,a=t===`branch`?G.branchCopied:G.sessionIdCopied;return(0,U.jsx)(H.Button,{type:`button`,className:`canvas-icon-button`,variant:`subtle`,size:`small`,leadingVisual:i===t?(0,U.jsx)(r,{size:16}):(0,U.jsx)(m,{size:16}),"aria-label":i===t?a:n,title:i===t?a:n,onClick:()=>void d(e,t),children:(0,U.jsx)(`span`,{className:`visually-hidden`,children:n})})}return(0,U.jsxs)(ue,{title:G.buildDetails,closeLabel:G.closeBuildDetails,className:`build-details-dialog`,returnFocusRef:n,onClose:e,children:[(0,U.jsxs)(`dl`,{className:`build-details-list`,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:G.branch}),(0,U.jsxs)(`dd`,{children:[(0,U.jsx)(M,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`code`,{children:c||t.stats.branchError||G.unavailable}),f(c,`branch`)]})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:G.sessionId}),(0,U.jsxs)(`dd`,{children:[(0,U.jsx)(`code`,{children:l||G.unavailable}),f(l,`sessionId`)]})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`dt`,{children:u?.branch?`Behind ${u.branch}${u.source===`local`?` (local)`:``}`:G.comparison}),(0,U.jsx)(`dd`,{children:u?.error||(u?.behind===0?G.upToDate:u?.behind==null?G.unavailable:G.commitsBehind(u.behind))})]})]}),(0,U.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:i===`branch`?`${G.branchCopied}.`:i===`sessionId`?`${G.sessionIdCopied}.`:``}),o?(0,U.jsx)(`span`,{role:`alert`,className:`build-details-copy-error`,children:G.buildDetailsCopyFailed(o)}):null]})}function fe({pairing:e}){let[t,n]=(0,V.useState)(`idle`),i=(0,V.useRef)(null);(0,V.useEffect)(()=>{i.current?.querySelector(`a`)?.focus()},[]);async function a(){try{await navigator.clipboard.writeText(e.verificationUrl),n(`copied`)}catch{n(`failed`)}}return(0,U.jsxs)(`section`,{className:`hub-connection-approval`,"aria-label":G.connectionApproval,children:[(0,U.jsxs)(`p`,{role:`status`,children:[G.connectionWaiting,` `,(0,U.jsx)(`strong`,{children:e.userCode}),`.`]}),(0,U.jsxs)(`div`,{ref:i,className:`hub-connection-approval-actions`,role:`group`,"aria-label":G.connectionApproval,children:[(0,U.jsx)(H.Button,{as:`a`,variant:`primary`,size:`medium`,href:e.verificationUrl,target:`_blank`,rel:`noopener noreferrer`,children:G.connectToHub}),(0,U.jsx)(W,{icon:t===`copied`?r:m,size:`medium`,className:`hub-connection-approval-copy`,"aria-label":t===`copied`?G.approvalLinkCopied:G.copyApprovalLink,onClick:()=>void a()})]}),(0,U.jsx)(le,{role:`status`,children:t===`copied`?G.approvalLinkCopied:``}),t===`failed`?(0,U.jsx)(`p`,{role:`alert`,children:G.approvalCopyFailed}):null]})}function pe({status:e,pairing:t,connecting:n,error:r,onConnect:i,onSelectHub:a,onResetHub:o,onClose:s,hubButtonRef:c}){let l=(0,V.useId)(),[u,d]=(0,V.useState)(null),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(!1),[g,_]=(0,V.useState)(!1),[v,y]=(0,V.useState)(!1),[b,x]=(0,V.useState)(``),S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=f||!e?.hubOrigin||u!==null&&!m,T=(0,V.useRef)(w),E=u??e?.hubOrigin??``,D=n||g||v,O=!!t||n;(0,V.useEffect)(()=>{w&&!O?S.current?.focus():T.current&&!O&&C.current?.focus(),T.current=w},[w,O]),(0,V.useEffect)(()=>{if(f||u===null||!m||!e?.hubOrigin)return;let t=window.setTimeout(()=>d(null),0);return()=>window.clearTimeout(t)},[u,f,m,e?.hubOrigin]);async function k(){if(!D){_(!0),x(``);try{await a(E),d(null),p(!1)}catch(e){x(e instanceof Error?e.message:String(e))}finally{_(!1)}}}async function A(){if(!D&&o){y(!0),x(``);try{d(await o()),p(!!e?.hubOrigin)}catch(e){x(e instanceof Error?e.message:String(e))}finally{y(!1)}}}return(0,U.jsxs)(ue,{title:G.connectToHub,closeLabel:G.closeConnectionDialog,onClose:s,returnFocusRef:c,children:[(0,U.jsx)(`p`,{children:G.connectionDescription}),b||r?(0,U.jsx)(`p`,{role:`alert`,children:b||r}):null,(0,U.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),!D&&(!O&&w&&(f||e?.hubOrigin)?k():(x(``),e?.hubOrigin||h(!0),i(e?.hubOrigin?void 0:E)))},children:[!O&&(w?(0,U.jsxs)(`div`,{className:`hub-connection-origin-field`,children:[(0,U.jsx)(`label`,{htmlFor:l,children:G.hubUrl}),(0,U.jsxs)(`div`,{className:`hub-connection-origin-input`,children:[(0,U.jsx)(H.TextInput,{ref:S,id:l,type:`url`,value:E,onChange:e=>{h(!1),d(e.target.value)},required:!0,fullWidth:!0,disabled:D,placeholder:`https://hub.example.com`}),o?(0,U.jsx)(W,{icon:L,variant:`invisible`,size:`small`,"aria-label":G.resetHubUrl,disabled:D,"aria-busy":v,onClick:()=>void A()}):null]}),f||e?.hubOrigin?(0,U.jsx)(H.Button,{type:`submit`,variant:`subtle`,size:`small`,disabled:D,children:G.saveHub}):null]}):(0,U.jsxs)(`div`,{className:`hub-connection-origin`,children:[(0,U.jsx)(`a`,{href:e?.hubOrigin&&new URL(e.hubOrigin).origin,target:`_blank`,rel:`noopener noreferrer`,children:e?.hubOrigin}),(0,U.jsx)(W,{ref:C,icon:ie,variant:`invisible`,size:`small`,"aria-label":G.editHubUrl,disabled:D,onClick:()=>{x(``),p(!0),d(e?.hubOrigin??``)}})]})),t?(0,U.jsx)(fe,{pairing:t},t.verificationUrl):null,t?null:(0,U.jsx)(H.Button,{type:`submit`,variant:`primary`,disabled:D||!e?.repository||!O&&w&&(f||!!e?.hubOrigin),children:n?G.connectionOpeningBrowser:G.connectToHub})]})]})}function me({title:e,description:t,children:n,action:r,variant:i,layout:o,onDismiss:s,dismissLabel:l,className:u,...d}){let f=i===`critical`?k:i===`success`?oe:i===`info`?a:c;return(0,U.jsxs)(`div`,{...d,role:i===`critical`||i===`warning`?`alert`:`status`,className:`hub-alert hub-alert--${i}${o===`compact`?` hub-alert--compact`:``}${u?` ${u}`:``}`,children:[(0,U.jsx)(f,{className:`hub-alert__icon`,size:20,"aria-hidden":`true`}),(0,U.jsxs)(`div`,{className:`hub-alert__content`,children:[(0,U.jsxs)(H.Text,{as:`p`,size:`100`,className:`hub-alert__message`,children:[(0,U.jsx)(`strong`,{className:`hub-alert__title`,children:e}),t?(0,U.jsx)(`span`,{className:`hub-alert__description`,children:t}):null]}),n]}),r||s?(0,U.jsxs)(`div`,{className:`hub-alert__action`,children:[r,s&&l?(0,U.jsx)(W,{icon:te,"aria-label":l,title:l,variant:`invisible`,size:`small`,onClick:s}):null]}):null]})}var K={title:`Publish uncommitted changes?`,description:`Do you want to commit changes before publishing? Publishing the committed version only excludes your local uncommitted edits.`,checkFailedTitle:`Could not check local changes`,checkFailed:`Git could not check local changes.`,retryCheck:`Retry check`,commit:`Commit changes & publish`,committed:`Publish committed version only`,close:`Close publishing dialog`,changedFiles:`Uncommitted changes`,moreChanges:e=>`${e} more`,localSkills:e=>`${e} local agent skill ${e===1?`file stays`:`files stay`} uncommitted.`,selection:`Copilot commits only changes related to this prototype task and asks if it cannot tell which changes belong.`,remember:`Always commit changes before publishing for this prototype`,settings:`Settings`,alwaysCommit:`Always commit changes before publishing`,retrySettings:`Retry settings`,preferenceTargetChanged:`The checkout changed. Refresh Settings and try again.`,invalidPreference:`Publishing settings returned an invalid response. Retry settings.`};function he({busy:e,error:t,changes:n,checkError:r,remembered:i,returnFocusRef:a,onClose:o,onChoose:s,onRetry:c}){let[l,u]=(0,V.useState)(i),d=(0,V.useId)(),f=(0,V.useId)();return(0,U.jsx)(ue,{title:r?K.checkFailedTitle:K.title,closeLabel:K.close,descriptionId:r?void 0:d,returnFocusRef:a,onClose:()=>{e||o()},className:`publish-changes-dialog`,children:(0,U.jsxs)(H.Stack,{gap:`normal`,padding:`none`,children:[r?null:(0,U.jsx)(`p`,{id:d,children:K.description}),r?(0,U.jsx)(me,{title:r,variant:`critical`,layout:`compact`}):null,n?.files.total?(0,U.jsx)(`section`,{"aria-label":K.changedFiles,children:(0,U.jsxs)(`ul`,{className:`publish-changes-dialog__files`,children:[n.files.paths.map(e=>(0,U.jsx)(`li`,{children:(0,U.jsx)(`code`,{children:e})},e)),n.files.total>n.files.paths.length?(0,U.jsx)(`li`,{children:K.moreChanges(n.files.total-n.files.paths.length)}):null]})}):null,r?null:(0,U.jsxs)(`p`,{children:[n?.localSkills.total?`${K.localSkills(n.localSkills.total)} `:null,K.selection]}),r?null:(0,U.jsxs)(H.FormControl,{id:f,fullWidth:!0,children:[(0,U.jsx)(H.Checkbox,{checked:l,disabled:e,onChange:e=>u(e.target.checked)}),(0,U.jsx)(H.FormControl.Label,{children:K.remember})]}),t?(0,U.jsx)(me,{title:t,variant:`critical`,layout:`compact`}):null,(0,U.jsxs)(`footer`,{className:`publish-changes-dialog__actions`,children:[r?(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:c,children:K.retryCheck}):null,r?null:(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:()=>s(`commit-changes`,l),children:K.commit}),(0,U.jsx)(H.Button,{size:`small`,disabled:e,onClick:()=>s(`committed-only`,!1),children:K.committed})]})]})})}function ge({value:e,label:t,copyLabel:n,copiedLabel:r,copyErrorLabel:i,compact:a=!1}){let[o,s]=(0,V.useState)(null),c=o?.value===e?o.status:null,l=c===`copied`?r:n;async function u(){try{await navigator.clipboard.writeText(e),s({value:e,status:`copied`})}catch{s({value:e,status:`failed`})}}return(0,U.jsxs)(`div`,{className:`copyable-text-input${a?` copyable-text-input--compact`:``}`,children:[(0,U.jsxs)(`div`,{className:`copyable-text-input__control`,children:[a?(0,U.jsx)(`input`,{type:`text`,value:e,"aria-label":t,readOnly:!0,className:`copyable-text-input__input`}):(0,U.jsx)(H.TextInput,{value:e,"aria-label":t,readOnly:!0,fullWidth:!0,className:`copyable-text-input__input`}),(0,U.jsx)(W,{icon:m,"aria-label":l,description:a?l:void 0,title:a?void 0:l,variant:`invisible`,size:`small`,className:`copyable-text-input__button`,onClick:()=>void u()})]}),(0,U.jsx)(le,{"aria-live":`polite`,"aria-atomic":`true`,children:c===`copied`?r:``}),c===`failed`?(0,U.jsx)(`span`,{role:`alert`,className:`copyable-text-input__error`,children:i}):null]})}function _e({children:e}){return(0,U.jsx)(`div`,{className:`prototype-workspace__body`,children:e})}function ve({title:e,description:t,trailing:n,headingAs:r=`h2`,headingRef:i}){return(0,U.jsxs)(`header`,{className:`hub-content-page-header`,children:[(0,U.jsxs)(`div`,{className:`hub-content-page-header__top`,children:[(0,U.jsx)(H.Heading,{as:r,size:`4`,ref:i,tabIndex:i?-1:void 0,children:e}),n]}),t?(0,U.jsx)(H.Text,{as:`p`,className:`hub-content-page-header__description`,children:t}):null]})}function ye({labels:e,headingRef:t,headingTrailing:n,feedback:r,form:i,formUnavailable:a,links:o,hasLinks:s,showEmpty:c=!0,listRef:l,listBusy:u,beforeLinks:d,afterLinks:f}){return(0,U.jsxs)(H.Stack,{gap:`normal`,children:[(0,U.jsx)(ve,{title:e.heading,description:e.description,headingRef:t,trailing:n}),r,i||(a===void 0?(0,U.jsxs)(`section`,{className:`share-links__empty`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.noBuildHeading}),(0,U.jsx)(H.Text,{as:`p`,className:`share-links__empty-description`,children:e.noBuildLabel})]}):a),d,s?(0,U.jsx)(`ul`,{className:`share-links__list`,ref:l,"aria-busy":u,children:o}):c?(0,U.jsxs)(`section`,{className:`share-links__empty`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.emptyHeading}),(0,U.jsx)(H.Text,{as:`p`,className:`share-links__empty-description`,children:e.emptyLabel})]}):null,f]})}function be({shareLink:e,className:t,copiedLabel:n,copyErrorLabel:r,copyLabel:i,urlLabel:a,unavailableLabel:o,highlighted:s,children:c}){return(0,U.jsx)(`li`,{"data-share-id":e.id,className:`share-link-item${s?` share-link-item--created`:``}${t?` ${t}`:``}`,children:(0,U.jsxs)(`div`,{className:`share-link-item__layout`,children:[(0,U.jsxs)(`div`,{className:`share-link-item__details`,children:[(0,U.jsx)(`h3`,{children:e.label}),(0,U.jsxs)(`span`,{className:`share-link-item__metadata`,children:[e.buildLabel,e.createdLabel?(0,U.jsxs)(U.Fragment,{children:[` · `,(0,U.jsx)(`time`,{dateTime:e.createdAt,children:e.createdLabel})]}):null,` · `,e.expiresAt?(0,U.jsx)(`time`,{dateTime:e.expiresAt,children:e.expiresLabel}):e.expiresLabel]})]}),(0,U.jsxs)(`div`,{className:`share-link-item__actions`,children:[o?(0,U.jsx)(`p`,{children:o}):(0,U.jsx)(ge,{value:e.url,label:a||e.label,copyLabel:i,copiedLabel:n,copyErrorLabel:r}),c]})]})})}function xe({data:e,action:t,hiddenFields:n,details:r,afterFields:i,onSubmit:a,label:o,onLabelChange:s,expiration:c,onExpirationChange:l,disabled:u,fieldsDisabled:d,busy:f,error:p}){let m=(0,V.useId)(),h=(0,V.useId)();return(0,U.jsxs)(`div`,{className:`share-links-form`,children:[e.buildLabel?(0,U.jsx)(H.Heading,{as:`h2`,size:`5`,children:e.buildLabel}):null,r,(0,U.jsxs)(`form`,{action:t,method:`post`,onSubmit:a,"aria-busy":f,className:`share-links__form`,children:[n,(0,U.jsxs)(`div`,{className:`share-links__form-row`,children:[(0,U.jsxs)(H.FormControl,{id:m,required:!0,fullWidth:!0,className:`share-links__field`,children:[(0,U.jsx)(H.FormControl.Label,{children:e.labelLabel}),(0,U.jsx)(H.TextInput,{"aria-label":e.labelLabel,"aria-invalid":!!p,name:`share_link[label]`,placeholder:e.labelPlaceholder,maxLength:e.labelMaximumBytes,value:o,onChange:s,disabled:d,fullWidth:!0}),p?(0,U.jsx)(H.FormControl.Validation,{validationStatus:`error`,className:`share-links__validation`,children:p}):null]}),p?(0,U.jsx)(le,{role:`alert`,children:p}):null,(0,U.jsxs)(H.FormControl,{id:h,fullWidth:!0,className:`share-links__field`,children:[(0,U.jsx)(H.FormControl.Label,{children:e.expirationLabel}),(0,U.jsx)(H.Select,{"aria-label":e.expirationLabel,name:`share_link[expiration]`,defaultValue:c===void 0?e.expirationOptions.find(e=>e.value===`seven_days`)?.value??e.expirationOptions[0]?.value:void 0,value:c,onChange:l,disabled:d,fullWidth:!0,children:e.expirationOptions.map(e=>(0,U.jsx)(H.Select.Option,{value:e.value,children:e.label},e.value))})]}),(0,U.jsx)(`div`,{className:`share-links__form-actions`,children:(0,U.jsx)(H.Button,{type:`submit`,variant:`primary`,leadingVisual:v,disabled:u,children:e.submitLabel})})]}),i?(0,U.jsx)(`div`,{className:`share-links__form-options`,children:i}):null]})]})}var q={title:`Share prototype`,internal:`Internal prototype link`,internalDescription:`Requires GitHub sign-in and repository access.`,internalUnavailable:`Internal prototype link unavailable.`,internalCopy:`Copy internal prototype link`,internalOpen:`Open internal prototype link`,public:`Public share links`,permissionUnknown:`Hub has not confirmed permission to manage public share links.`,group:`Publish and share`,back:`Back to preview`,warning:`Anyone with a link can view its Build without signing in. The prototype may expose sensitive or customer information. Check its content before sharing. Local and uncommitted changes are not included.`,target:`New links share this published Build:`,oldBuild:`This is the last published Build, not the current local preview.`,includeControlSettings:`Include current control settings`,controlSettingsDescription:`Adds settings for all configured pages to the links you copy or open. Saved share links stay unchanged.`,controlSettingsWarning:`Settings for controls that have not been published will not take effect for shared links.`,controlSettingsWarningTitle:`Local changes are not in the shared Build`,label:`Label`,labelPlaceholder:`Usability review`,labelInvalid:`Enter a label containing no more than 100 UTF-8 bytes.`,expiry:`Expires after`,expirations:[{value:`one_day`,label:`1 day`},{value:`seven_days`,label:`7 days`},{value:`thirty_days`,label:`30 days`},{value:`never`,label:`Never`}],create:`Create share link`,creating:`Working...`,active:`Active share links`,empty:`Create a link when someone needs signed-out access.`,emptyHeading:`No active share links`,loading:`Loading share links...`,refresh:`Refresh links`,authorize:`Verify with GitHub`,authorizationRetry:`Complete authorization in your browser, then refresh links and submit the action again. No action is replayed automatically.`,paginationFailed:`Hub returned a repeated share-link page. Refresh links to try again.`,noBuild:`A successful published Build is required before creating a share link.`,noBuildHeading:`No successful Build`,build:e=>`Build ${e}`,buildDetails:(e,t,n)=>`Commit: ${e}\nAuthor: @${t}\nPublished: ${n}`,denied:`Managing public share links requires repository admin access or authorship of any successful Build for this Prototype, with current read access. Write access alone is not sufficient.`,disabled:`Public sharing is disabled for this Hub. A Hub administrator must explicitly enable it. Previously revoked links never return.`,disconnected:`Connect to Hub before managing share links.`,connect:`Connect to Hub`,unavailable:`Hub is unavailable. Restore the connection and reopen Share prototype.`,branch:`Open a named prototype branch discovered by Hub before sharing.`,stale:`Hub or checkout changed. Return to preview and reopen Share prototype.`,deleted:`Share link deleted. Its public URL no longer works.`,never:`Never expires`,expires:e=>`Expires ${e}`,createdBy:(e,t)=>`Created by @${e} ${t}`,copy:(e,t)=>`Copy ${e}, Build #${t}`,copied:`Link copied`,copyError:`Could not copy the link. Select the URL and copy it manually.`,open:(e,t)=>`Open ${e}, Build #${t}`,delete:(e,t)=>`Delete ${e}, Build #${t}`,deletePrompt:e=>`Delete "${e}"? Anyone with this link will lose access to its Build.`,deletedError:`Could not delete the link.`,failed:`The sharing request failed.`,unknown:`The sharing request may have completed. Refresh active links before trying again. A matching label does not prove which request created a link.`,expired:`This link has expired. Refresh links.`};function Se({included:e,onChange:t,publishedVersionDiffers:n,disabled:r=!1,error:i,copy:a}){let o=(0,V.useId)(),s=e&&n;return(0,U.jsxs)(`div`,{className:`share-control-settings`,children:[(0,U.jsxs)(H.FormControl,{id:o,fullWidth:!0,children:[(0,U.jsx)(H.Checkbox,{checked:e,onChange:e=>t(e.target.checked),disabled:r}),(0,U.jsx)(H.FormControl.Label,{children:a?.label??q.includeControlSettings}),(0,U.jsx)(H.FormControl.Hint,{className:`share-control-settings__hint`,children:(0,U.jsx)(`span`,{className:`share-control-settings__description`,children:a?.description??q.controlSettingsDescription})})]}),i?(0,U.jsx)(me,{title:i,variant:`critical`,layout:`compact`}):null,s?(0,U.jsx)(me,{title:q.controlSettingsWarningTitle,description:q.controlSettingsWarning,variant:`warning`,layout:`compact`,className:`share-control-settings__warning`}):null]})}function Ce(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var we=`replica:controls:url`,Te=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function Ee(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!Ce(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!Te.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function De(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=Te.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!Ce({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{Ee(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function Oe(e,t){let n=new URL(e,window.location.href),r=De(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(Ee(r.scopes)))n.searchParams.set(e,t);return n.toString()}function ke({state:e,buildDetails:t,currentCommit:n,hasLocalChanges:r=!1,shareButtonRef:i,onClose:a,onConnect:o,onRefresh:s,onCreate:c,onDelete:l,onOpen:u,controlSettings:d,onAuthorize:f}){let[p,m]=(0,V.useState)(``),[h,g]=(0,V.useState)(`seven_days`),[_,v]=(0,V.useState)(``),[y,b]=(0,V.useState)(Date.now),x=(0,V.useRef)(null),S=(0,V.useRef)(null),C=(0,V.useRef)(null),w=e.context?.prototype,T=q.expirations.filter(e=>!w?.shareLinkExpirationOptions||w.shareLinkExpirationOptions.includes(e.value)),E=T.some(e=>e.value===h)?h:T.find(e=>e.value===`seven_days`)?.value??T[0]?.value??``,D=w?.published?w.build:null,k=D?.url,A=k&&URL.canParse(k)?new URL(k):null,j=A&&A.origin===e.context?.hubOrigin&&[`http:`,`https:`].includes(A.protocol)&&!A.username&&!A.password?k:null,M=!!(D&&n&&n!==D.commitSha)||r,N=w?.canManageShareLinks===!0,P=!e.sharingDisabled&&w?.publicSharingEnabled!==!1,F=e.busy||e.loading||e.stale||!N||!P,I=d?.included?d.query??``:``,L=!!d?.blocked;function R(e){return Oe(e,I)}let z=P&&e.stale&&!e.loading&&e.created&&!e.links.some(t=>t.id===e.created?.id)?e.created:null;(0,V.useEffect)(()=>{let e=i.current;S.current?.focus();let t=window.setInterval(()=>b(Date.now()),1e4);return()=>{window.clearInterval(t),e?.focus()}},[i]),(0,V.useEffect)(()=>{if(e.busy||!C.current)return;let t=C.current;C.current=null,(t.map(e=>x.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||S.current)?.focus()},[e.busy,e.links]);async function B(t,n){if(!window.confirm(q.deletePrompt(n)))return;let r=e.links.findIndex(e=>e.id===t),i=[...e.links.slice(r+1),...e.links.slice(0,r).reverse()].map(e=>e.id);await l(t)&&(C.current=i,(i.map(e=>x.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||S.current)?.focus())}function ee(e){return new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}return(0,U.jsx)(`main`,{className:`canvas-share-page`,"aria-label":q.title,children:(0,U.jsx)(_e,{children:(0,U.jsx)(ye,{labels:{heading:q.title,noBuildHeading:q.noBuildHeading,noBuildLabel:q.noBuild,emptyHeading:q.emptyHeading,emptyLabel:q.empty},headingRef:S,headingTrailing:(0,U.jsx)(`div`,{className:`canvas-share-close`,children:(0,U.jsx)(W,{icon:te,variant:`invisible`,"aria-label":q.back,description:q.back,onClick:a})}),feedback:(0,U.jsxs)(U.Fragment,{children:[d?(0,U.jsx)(Se,{included:d.included,onChange:d.onChange,publishedVersionDiffers:M,disabled:e.busy||d.pending,error:d.error}):null,(0,U.jsxs)(`section`,{className:`canvas-share-internal`,"aria-label":q.internal,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:q.internal}),(0,U.jsx)(`p`,{children:q.internalDescription}),j&&!L?(0,U.jsxs)(`div`,{className:`share-link-item__actions canvas-share-internal-actions`,children:[(0,U.jsx)(ge,{value:R(j),label:q.internal,copyLabel:q.internalCopy,copiedLabel:q.copied,copyErrorLabel:q.copyError}),(0,U.jsx)(W,{as:`a`,href:R(j),target:`_blank`,rel:`noopener`,icon:re,"aria-label":q.internalOpen,description:q.internalOpen})]}):j?null:(0,U.jsx)(`p`,{role:`status`,children:q.internalUnavailable})]}),(0,U.jsxs)(`div`,{className:`canvas-share-public-header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:q.public}),(0,U.jsx)(`p`,{children:q.warning})]}),w&&!N?(0,U.jsx)(`p`,{role:`status`,children:w.canManageShareLinks===!1?q.denied:q.permissionUnknown}):null,P?null:(0,U.jsx)(`p`,{role:`status`,children:q.disabled}),e.error?(0,U.jsx)(me,{title:e.error,variant:`critical`,layout:`compact`}):null,e.authorization&&f?(0,U.jsx)(H.Button,{variant:`secondary`,size:`small`,onClick:f,disabled:e.busy,children:q.authorize}):null,o&&!e.context?(0,U.jsx)(H.Button,{variant:`secondary`,size:`small`,onClick:o,children:q.connect}):null]}),form:D&&N&&P?(0,U.jsx)(xe,{data:{buildLabel:null,labelLabel:q.label,labelPlaceholder:q.labelPlaceholder,labelMaximumBytes:100,expirationLabel:q.expiry,expirationOptions:T,submitLabel:e.busy?q.creating:q.create},label:p,onLabelChange:e=>{m(e.target.value),v(``)},expiration:E,onExpirationChange:e=>g(e.target.value),onSubmit:e=>{e.preventDefault(),!p.trim()||new TextEncoder().encode(p.trim()).length>100?v(q.labelInvalid):(v(``),c(p,E))},disabled:F,fieldsDisabled:e.busy,busy:e.busy,error:_,details:(0,U.jsxs)(`div`,{className:`canvas-share-build-details`,children:[(0,U.jsxs)(`p`,{children:[q.target,` `,(0,U.jsx)(`strong`,{children:q.build(D.number)}),` - `,(0,U.jsx)(`code`,{children:D.commitSha.slice(0,7)}),` - `,(0,U.jsx)(`time`,{dateTime:D.publishedAt,children:ee(D.publishedAt)})]}),M?(0,U.jsx)(`p`,{children:q.oldBuild}):null]})}):null,formUnavailable:N&&P&&!D?void 0:null,beforeLinks:(0,U.jsxs)(U.Fragment,{children:[e.notice?(0,U.jsx)(`p`,{role:`status`,children:e.notice}):null,z&&!L?(0,U.jsx)(ge,{value:R(z.url),label:z.label,copyLabel:q.copy(z.label,z.buildNumber),copiedLabel:q.copied,copyErrorLabel:q.copyError}):null,e.loading?(0,U.jsx)(`p`,{role:`status`,children:q.loading}):null]}),hasLinks:N&&P&&!L&&e.links.length>0,showEmpty:N&&P&&!L&&!e.loading&&!e.stale,listRef:x,listBusy:e.loading,links:(!N||!P||L?[]:e.links).map(e=>{let n=e.expiresAt!==null&&Date.parse(e.expiresAt)<=y,r=t?.[e.buildNumber];return(0,U.jsxs)(be,{className:D&&e.buildNumberI?u(e.id,I):u(e.id)}),(0,U.jsx)(W,{icon:O,variant:`danger`,"aria-label":q.delete(e.label,e.buildNumber),description:q.delete(e.label,e.buildNumber),disabled:F||n,onClick:()=>void B(e.id,e.label)})]},e.id)}),afterLinks:(0,U.jsx)(`div`,{className:`canvas-share-list-actions`,children:N||!e.context&&!o?(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:s,disabled:e.busy||e.loading,children:q.refresh}):null})})})})}var J={checking:`Checking sharing readiness`,checkingDetail:`Checking Hub for a successful published Build and repository access.`,connect:`Connect before sharing`,connectDetail:`Connect to Hub before sharing this prototype.`,connectAction:`Connect to Hub`,publish:`Publish before sharing`,publishDetail:`To create a share link, publish this prototype to Hub first. Your local preview stays private.`,publishPermissionUnverified:`This Hub has not confirmed publishing permission. Copilot will check access when publishing and report any permission errors.`,preparing:`Preparing your prototype`,ready:`Ready to share`,readyDetail:`Your prototype is ready to share.`,manage:`Share prototype`,unavailable:`Sharing status unavailable`,unavailableDetail:`Hub could not verify sharing readiness. Retry before continuing.`,permissionUnknown:`This Hub cannot verify sharing or publishing permission. Update Hub and retry.`,restricted:`Sharing unavailable`,publishDenied:`Publishing requires repository write access. Ask a prototype author to publish a Build.`,local:`Local development prototypes cannot create public share links.`,changed:`Sharing target changed`,changedDetail:`The repository, branch, or Hub changed. Close this dialog and reopen Share for the intended prototype.`,boundary:`Internal review requires repository access. Public share links let anyone view a published Build, not your local preview.`,close:`Close sharing readiness`},Ae=`Branch not eligible for Hub registration`,Y={heading:`Branch publication`,checking:`Checking...`,retry:`Retry status`,retryPublish:`Retry publish`,requested:`Requested`,awaitingCopilot:`Waiting for Copilot`,publishBranch:`Publish`,publishChanges:`Publish changes`,registration:`Publishing`,registrationFailed:`Publication delayed`,published:`Published`,alreadyPublished:`Latest changes already published`,queued:`Build queued`,building:`Building`,awaitingHub:`Awaiting Hub`,awaitingBuild:`Awaiting build`,connect:`Connect to the hub`,workflowLink:`View workflow run`,initial:`Checking branch publication.`,checkingRemote:`Checking the exact branch on the origin repository.`,detached:`Open a named branch before publishing.`,changed:`The checkout changed. Refresh publication status.`,unknown:e=>`Remote branch status is unknown. ${e||`Check GitHub access and retry.`}`,pending:`Copilot received the publish request in chat and has not pushed this branch yet. Follow its progress in chat.`,checkingHub:`Checking the Hub connection.`,disconnected:`Connect to the hub before publishing this prototype.`,hubUnavailable:`Hub verification is unavailable. Restore access and retry.`,hubUnavailableTitle:`Hub verification unavailable`,staleHub:`The Hub status belongs to a different checkout. Refresh to continue.`,workflowMissing:`This checkout has no .github/workflows/replica.yml. Set up the repository's Replica build workflow before publishing.`,dispatchFailed:`Copilot could not receive the publish request.`,absent:`This branch won't appear in the hub until you publish.`,needsPush:`The remote branch points to a different commit. Publish pushes this branch without force.`,localChanges:`Local changes are not in the published prototype. Choose how to publish them.`,needsRegistration:`Hub imported this commit. The canvas is publishing it automatically.`,registrationDenied:`Hub could not register this branch. Check repository access and branch eligibility.`,registrationErrorTitle:`Hub registration failed`,registrationReasons:new Map([[`write_access_required`,{title:Ae,description:`You lack write access to this repository.`}],[`branch_not_reviewable`,{title:Ae,description:`Default, reserved, and internal branches cannot be registered in Hub.`}],[`remote_branch_missing`,{title:Ae,description:`The branch no longer exists on the remote repository.`}],[`branch_authorship_required`,{title:Ae,description:`You have not authored a commit unique to this branch.`}],[`repository_mismatch`,{title:Ae,description:`The branch belongs to a different repository.`}],[`already_registered`,{title:`Branch already registered in Hub`,description:`This branch is already registered in Hub. Refresh its status.`}],[`successful_build_required`,{title:`Hub registration delayed`,description:`Hub has not imported this checkout's successful Build yet.`}]]),ready:`Hub imported this commit and the prototype is registered.`,importFailed:`Hub could not import or build this commit. Pushing this unchanged commit does not rerun the failed work. Inspect the Build failure in Hub and repair the cause before publishing again.`,workflowUnavailable:`Workflow status is unavailable. Check GitHub access and retry.`,staleWorkflow:`Workflow status belongs to a different branch or commit.`,workflowQueued:`The Replica workflow for this commit is queued or waiting.`,workflowBuilding:`The Replica workflow is building this commit.`,workflowFailed:e=>`The Replica workflow finished with ${e||`an unsuccessful result`}. Pushing this unchanged commit does not rerun the failed work. Inspect the run and repair the cause before publishing again.`,importing:`The workflow succeeded. Waiting for Hub discovery and artifact import; this is not published yet.`,noBuild:`The exact branch and commit are on GitHub, but no matching Replica workflow run has appeared yet.`};function je({publication:e,busy:t,onPublish:n,onRetry:r}){if(e.kind===`ready`)return null;let i=e.kind===`requested`,a=t||i;return(0,U.jsxs)(`section`,{className:`canvas-branch-publication`,"aria-label":Y.heading,children:[e.error?(0,U.jsx)(me,{variant:`critical`,layout:`compact`,title:e.error.title,description:e.error.description}):(0,U.jsx)(`p`,{role:`status`,children:e.detail}),e.runUrl?(0,U.jsx)(`p`,{children:(0,U.jsx)(H.InlineLink,{className:`canvas-branch-publication__workflow-link`,href:e.runUrl,target:`_blank`,rel:`noopener noreferrer`,children:Y.workflowLink})}):null,(e.action!==`none`||i)&&e.kind!==`disconnected`?(0,U.jsx)(`div`,{className:`canvas-branch-publication__actions`,children:(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:a,"aria-busy":a,leadingVisual:a?(0,U.jsx)(L,{size:16}):void 0,onClick:e.action===`retry`?r:n,children:e.label})}):null]})}function X({readiness:e,busy:t,shareButtonRef:n,onClose:r,onConnect:i,onPublish:a,onRetry:o,onManage:s}){let c=(0,V.useId)();return(0,U.jsxs)(ue,{title:e.title,closeLabel:J.close,onClose:r,returnFocusRef:n,descriptionId:c,children:[(0,U.jsx)(`p`,{id:c,role:`status`,children:e.detail}),[`connect`,`publish`,`ready`].includes(e.kind)?(0,U.jsx)(`p`,{children:J.boundary}):null,e.publication?(0,U.jsx)(je,{publication:e.publication,dirty:!1,busy:t,onPublish:a,onRetry:o}):null,[`connect`,`ready`,`retry`].includes(e.kind)?(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:t,"aria-busy":t,onClick:e.kind===`connect`?i:e.kind===`ready`?s:o,children:e.kind===`connect`?J.connectAction:e.kind===`ready`?J.manage:Y.retry}):null]})}function Me({hub:e,connection:t,publication:n,sharing:r,shareIntent:i,controlSettings:a,readiness:o,state:s,hubOpen:c,buildDetailsOpen:l,onCloseBuildDetails:u,shareButtonRef:d,hubButtonRef:f,connectionButtonRef:p,publishButtonRef:m,titleButtonRef:h}){let{intent:g,targetChanged:_}=i,v=n.presentedState;return(0,U.jsxs)(U.Fragment,{children:[t.open&&(!g||g.connecting&&!_)?(0,U.jsx)(pe,{status:e.status,pairing:t.pairing,connecting:t.connecting,error:t.error,onConnect:t.connect,onSelectHub:e.select,onResetHub:e.reset,onClose:()=>{t.close(),i.setConnecting(!1)},hubButtonRef:g?d:c?p:f}):null,g&&!n.publishDialog&&(_||!g.connecting||!t.open)?(0,U.jsx)(X,{readiness:_?{kind:`restricted`,title:J.changed,detail:J.changedDetail}:o,busy:n.busy,shareButtonRef:d,onClose:()=>{i.close(),t.close()},onConnect:()=>{_||o.kind!==`connect`||(i.setConnecting(!0),t.showAndConnect())},onPublish:()=>{!_&&o.kind===`publish`&&n.publish()},onRetry:()=>void n.retry(),onManage:()=>{_||o.kind!==`ready`||(i.close(),r.open())}}):null,n.publishDialog?(0,U.jsx)(he,{busy:n.busy,error:n.publishDialogError,changes:n.publishDialog.preparation.changes,checkError:n.publishDialog.preparation.workingTree===`unavailable`?n.publishDialog.preparation.workingTreeError||K.checkFailed:void 0,remembered:n.publishDialog.preparation.remember,returnFocusRef:g?d:m,onClose:n.closePublishDialog,onChoose:(e,t)=>void n.choosePublish(e,t),onRetry:()=>void n.retryPublishCheck()},n.publishDialog.preparation.workingTree===`unavailable`?`unchecked`:`checked`):null,r.state.open?(0,U.jsx)(ke,{state:r.state,currentCommit:s?.stats.commitSha,hasLocalChanges:s?.stats.workingTree===`changed`,shareButtonRef:d,onClose:r.close,onConnect:!e.status||[`disconnected`,`pairing`,`unconfigured`].includes(e.status.state)?()=>{r.close(),t.show()}:void 0,onRefresh:()=>void r.refresh(),onCreate:r.create,onDelete:r.remove,onOpen:(e,t)=>void r.openLink(e,t),controlSettings:a,onAuthorize:()=>void r.authorize()}):null,l&&v?(0,U.jsx)(de,{state:v,titleButtonRef:h,onClose:u}):null]})}function Ne({address:e,addressRef:t,canGoBack:n,canGoForward:r,appearance:a,onAppearanceChange:o,onBack:s,onForward:c,onNavigate:l,onOpenTab:u,onReload:d}){let[f,p]=(0,V.useState)(null),m=f?.address===e?f.value:e,h=f?.address===e?f.error:``;function g(t){t.preventDefault();try{let t=new URL(m.trim(),e);if(![`http:`,`https:`].includes(t.protocol)||t.origin!==new URL(e).origin||t.username||t.password){p({address:e,value:m,error:G.browserAddressOrigin});return}p(null),l(t.href)}catch{p({address:e,value:m,error:G.browserAddressInvalid})}}return(0,U.jsx)(H.ThemeProvider,{colorMode:`auto`,className:`canvas-browser-theme`,children:(0,U.jsxs)(`nav`,{className:`canvas-browser-bar`,"aria-label":G.browserNavigation,children:[(0,U.jsxs)(`div`,{className:`canvas-browser-bar__navigation`,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserBack,disabled:!n,onClick:s,children:(0,U.jsx)(x,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserForward,disabled:!r,onClick:c,children:(0,U.jsx)(y,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserReload,onClick:d,children:(0,U.jsx)(L,{size:16})})]}),(0,U.jsxs)(`form`,{className:`canvas-browser-bar__address`,onSubmit:g,children:[(0,U.jsx)(`input`,{ref:t,"aria-label":G.browserAddress,"aria-invalid":!!h,"aria-describedby":h?`canvas-browser-address-error`:void 0,spellCheck:!1,value:m,onChange:t=>{p({address:e,value:t.target.value,error:``})},onFocus:e=>e.currentTarget.select(),onKeyDown:e=>{e.key===`Escape`&&(p(null),e.currentTarget.blur())}}),h?(0,U.jsx)(`span`,{id:`canvas-browser-address-error`,className:`canvas-browser-bar__error`,role:`alert`,children:h}):null]}),(0,U.jsxs)(`div`,{className:`canvas-browser-bar__tools`,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserOpenTab,title:G.browserOpenTab,onClick:()=>{u().catch(t=>{p({address:e,value:m,error:t instanceof Error?t.message:String(t)})})},children:(0,U.jsx)(re,{size:16})}),(0,U.jsxs)(`div`,{className:`canvas-browser-bar__appearance`,role:`group`,"aria-label":G.browserAppearance,children:[(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserLight,"aria-pressed":a===`light`,onClick:()=>o(`light`),children:(0,U.jsx)(P,{size:16})}),(0,U.jsx)(`button`,{type:`button`,"aria-label":G.browserDark,"aria-pressed":a===`dark`,onClick:()=>o(`dark`),children:(0,U.jsx)(i,{size:16})})]})]})]})})}var Pe=e(t((e=>{var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),n=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),i=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=r();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t}));e.validateShape=P;var a={type:`object`,additionalProperties:!1,required:[`version`,`scope`,`controls`],properties:{$schema:{type:`string`},version:{const:1},scope:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},role:{enum:[`shared`,`page`]},container:{$ref:`#/$defs/selector`},panel:{type:`object`,additionalProperties:!1,required:[`width`],properties:{width:{type:`integer`,minimum:160,maximum:4096}}},groups:{type:`array`,maxItems:100,items:{type:`object`,additionalProperties:!1,required:[`id`,`label`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},when:{$ref:`#/$defs/condition`}}}},controls:{type:`array`,maxItems:500,items:{oneOf:[{$ref:`#/$defs/boolean`},{$ref:`#/$defs/number`},{$ref:`#/$defs/slider`},{$ref:`#/$defs/choice`},{$ref:`#/$defs/checkboxGroup`},{$ref:`#/$defs/text`},{$ref:`#/$defs/color`},{$ref:`#/$defs/button`}]}}}},o=Object.prototype.hasOwnProperty,s=n().default,c=RegExp(`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`,`u`),l={type:[`string`,`number`,`boolean`]},u=i().default,d={validate:f};function f(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0,s=o,p=!1,m=null,h=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.equals===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`equals`},message:`must have required property 'equals'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`equals`){let e={instancePath:t,schemaPath:`#/oneOf/0/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.equals!==void 0){let n=e.equals;if(typeof n!=`string`&&!(typeof n==`number`&&isFinite(n))&&typeof n!=`boolean`){let e={instancePath:t+`/equals`,schemaPath:`#/$defs/scalar/type`,keyword:`type`,params:{type:l.type},message:`must be string,number,boolean`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=h===o;g&&(p=!0,m=0);let _=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.in===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`in`},message:`must have required property 'in'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`in`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.in!==void 0){let n=e.in;if(Array.isArray(n)){if(n.length>20){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/maxItems`,keyword:`maxItems`,params:{limit:20},message:`must NOT have more than 20 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r1){outer0:for(;r--;)for(i=r;i--;)if(u(n[r],n[i])){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[e]:a.push(e),o++;break outer0}}}else{let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=_===o;if(g&&p)p=!1,m=[m,1];else{g&&(p=!0,m=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.includes===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`includes`},message:`must have required property 'includes'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`includes`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.includes!==void 0&&typeof e.includes!=`string`){let e={instancePath:t+`/includes`,schemaPath:`#/oneOf/2/properties/includes/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=n===o;if(g&&p)p=!1,m=[m,2];else{g&&(p=!0,m=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.all===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`all`},message:`must have required property 'all'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`all`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.all!==void 0){let n=e.all;if(Array.isArray(n)){if(n.length>10){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r10){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=d===o;f&&(l=!0,u=0);let v=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.selector===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`selector`},message:`must have required property 'selector'`};a===null?a=[e]:a.push(e),o++}if(e.property===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`property`},message:`must have required property 'property'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`selector`&&n!==`property`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`style`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/1/properties/type/const`,keyword:`const`,params:{allowedValue:`style`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.selector!==void 0){let n=e.selector;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.property!==void 0){let n=e.property;if(typeof n==`string`){if(s(n)>100){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/maxLength`,keyword:`maxLength`,params:{limit:100},message:`must NOT have more than 100 characters`};a===null?a=[e]:a.push(e),o++}if(!m.test(n)){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/pattern`,keyword:`pattern`,params:{pattern:`^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$`},message:`must match pattern "^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=v===o;if(f&&l)l=!1,u=[u,1];else{f&&(l=!0,u=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.key===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`key`},message:`must have required property 'key'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`key`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`query`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/2/properties/type/const`,keyword:`const`,params:{allowedValue:`query`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.key!==void 0){let n=e.key;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/2/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[2].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,2];else{f&&(l=!0,u=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`hash`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/3/properties/type/const`,keyword:`const`,params:{allowedValue:`hash`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/3/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[3].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/3/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,3];else{f&&(l=!0,u=3);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.object===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`object`},message:`must have required property 'object'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`object`&&n!==`read`&&n!==`write`&&n!==`action`&&n!==`subscribe`&&n!==`pollMs`){let e={instancePath:t,schemaPath:`#/oneOf/4/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`api`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/4/properties/type/const`,keyword:`const`,params:{allowedValue:`api`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.object!==void 0){let n=e.object;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(!h.test(n)){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$`},message:`must match pattern "^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.read!==void 0){let n=e.read;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.write!==void 0){let n=e.write;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.action!==void 0){let n=e.action;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.subscribe!==void 0){let n=e.subscribe;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.pollMs!==void 0){let n=e.pollMs;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),o++}if(typeof n==`number`&&isFinite(n)){if(n>6e4||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:6e4},message:`must be <= 60000`};a===null?a=[e]:a.push(e),o++}if(n<100||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:100},message:`must be >= 100`};a===null?a=[e]:a.push(e),o++}}}}else{let e={instancePath:t,schemaPath:`#/oneOf/4/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;f&&l?(l=!1,u=[u,4]):f&&(l=!0,u=4)}}}if(l)o=c,a!==null&&(c?a.length=c:a=null);else{let e={instancePath:t,schemaPath:`#/oneOf`,keyword:`oneOf`,params:{passingSchemas:u},message:`must match exactly one schema in oneOf`};a===null?a=[e]:a.push(e),o++}return _.errors=a,o===0}function v(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return v.errors=a,o===0}var y={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`number`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function b(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return b.errors=a,l===0}var x={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`slider`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function S(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return S.errors=a,l===0}var C={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`options`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`select`,`radio`,`segmented`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},options:{$ref:`#/$defs/options`},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function w(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return w.errors=a,o===0}function T(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return T.errors=a,o===0}var E={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`text`,`textarea`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},minLength:{type:`integer`,minimum:0},maxLength:{type:`integer`,minimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function D(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return D.errors=a,l===0}var O=RegExp(`^#[0-9a-fA-F]{6}$`,`u`);function k(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return k.errors=a,o===0}function A(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return A.errors=a,o===0}function j(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let l=null,u=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.version===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`version`},message:`must have required property 'version'`};l===null?l=[e]:l.push(e),u++}if(e.scope===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`scope`},message:`must have required property 'scope'`};l===null?l=[e]:l.push(e),u++}if(e.controls===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`controls`},message:`must have required property 'controls'`};l===null?l=[e]:l.push(e),u++}for(let n in e)if(!o.call(a.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};l===null?l=[e]:l.push(e),u++}if(e.$schema!==void 0&&typeof e.$schema!=`string`){let e={instancePath:t+`/$schema`,schemaPath:`#/properties/%24schema/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}if(e.version!==void 0&&e.version!==1){let e={instancePath:t+`/version`,schemaPath:`#/properties/version/const`,keyword:`const`,params:{allowedValue:1},message:`must be equal to constant`};l===null?l=[e]:l.push(e),u++}if(e.scope!==void 0){let n=e.scope;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return L.errors=a,o===0}e.number=R;function R(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return R.errors=a,l===0}e.slider=z;function z(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return z.errors=a,l===0}e.choice=B;function B(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return B.errors=a,o===0}e.checkboxGroup=ee;function ee(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ee.errors=a,o===0}e.text=te;function te(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return te.errors=a,l===0}e.color=ne;function ne(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ne.errors=a,o===0}e.button=re;function re(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return re.errors=a,o===0}}))(),1),{validateDocumentShape:Fe,validateDeclaration:Ie}=Pe.default,Le={boolean:`boolean`,number:`number`,slider:`slider`,select:`choice`,radio:`choice`,segmented:`choice`,checkboxGroup:`checkboxGroup`,text:`text`,textarea:`text`,color:`color`,button:`button`};function Re(e){let t=[...Ie.errors].filter(e=>!/^\/controls\/\d+(?:\/|$)/.test(e.instancePath)).map(e=>({...e}));return Array.isArray(e?.controls)&&e.controls.forEach((e,n)=>{let r=Object.hasOwn(Le,e?.type)?Le[e.type]:void 0,i=r&&Pe.default[r];i?i(e)||t.push(...i.errors.map(e=>({...e,instancePath:`/controls/${n}${e.instancePath}`}))):t.push({instancePath:`/controls/${n}/type`,message:`must name a supported control type`})}),t.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params}))}var ze=class extends Error{constructor(e){super(`Invalid controls.replica.json:\n${e.map(e=>` ${e.path||`/`}: ${e.message}`).join(`
-`)}`),this.name=`ControlsValidationError`,this.issues=e}};function Be(e,t){switch(e.type){case`boolean`:return typeof t==`boolean`?null:`must be a boolean`;case`number`:case`slider`:{if(typeof t!=`number`||!Number.isFinite(t))return`must be a finite number`;if(e.min!==void 0&&t= min`;if(e.max!==void 0&&t>e.max)return`must be <= max`;let n=(t-e.min)/(e.step??1);return!Number.isFinite(n)||Math.abs(n-Math.round(n))>1e-8?`must align with step (anchored at min)`:null}case`select`:case`radio`:case`segmented`:return e.options.includes(t)?null:`must be a declared option`;case`checkboxGroup`:return Array.isArray(t)&&new Set(t).size===t.length&&t.every(t=>e.options.includes(t))?null:`must be unique declared options`;case`text`:case`textarea`:return typeof t==`string`?e.minLength!==void 0&&[...t].lengthe.maxLength?`longer than maxLength`:null:`must be a string`;case`color`:return typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?null:`must be a six-digit hex color`;default:return`button controls have no value`}}function Ve(e){return e?e.control?[e.control]:(e.all??e.any).flatMap(Ve):[]}function He(e){let t=new Map((e.groups??[]).map(e=>[e.id,e])),n=new Map(e.controls.map(e=>[e.id,e])),r=new Set,i=new Set,a=[];function o(e){if(r.has(e))return;if(i.has(e))throw new ze([{path:`/controls/${e}/when`,message:`conditional dependency cycle (including groups)`}]);i.add(e);let s=n.get(e);for(let e of[...Ve(s.when),...Ve(t.get(s.group)?.when)])o(e);i.delete(e),r.add(e),a.push(e)}for(let e of n.keys())o(e);return a}function Ue(e){let t=new Set;function n(e,r=0){if(r>24)throw new ze([{path:`/`,message:`document nesting exceeds 24`}]);if(typeof e==`number`&&!Number.isFinite(e))throw new ze([{path:`/`,message:`numbers must be finite`}]);if(![`string`,`number`,`boolean`,`object`].includes(typeof e))throw new ze([{path:`/`,message:`must contain only JSON values`}]);if(e&&typeof e==`object`){if(!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new ze([{path:`/`,message:`must contain only JSON objects`}]);if(t.has(e))throw new ze([{path:`/`,message:`must be an acyclic JSON document`}]);t.add(e);for(let t of Object.values(e))n(t,r+1);t.delete(e)}}n(e)}function We(e){if(Ue(e),!Ie(e))throw new ze(Re(e));let t=[];function n(e,n){t.push({path:e,message:n})}let r=new Set,i=new Map((e.groups??[]).map(e=>[e.id,e])),a=new Map(e.controls.map(e=>[e.id,e]));for(let[t,i]of[[`groups`,e.groups??[]],[`controls`,e.controls]])i.forEach((e,i)=>{r.has(e.id)&&n(`/${t}/${i}/id`,`duplicate ID ${e.id}`),r.add(e.id)});function o(e,t,r=0){if(!e)return;if(r>4){n(t,`conditions support at most five levels`);return}if(e.all||e.any){let n=e.all?`all`:`any`;e[n].forEach((e,i)=>o(e,`${t}/${n}/${i}`,r+1));return}let i=a.get(e.control);if(!i||i.type===`button`)n(t,`condition must reference a value control`);else if(`includes`in e)(i.type!==`checkboxGroup`||!i.options.includes(e.includes))&&n(t,`includes requires a declared checkboxGroup option`);else if(i.type===`checkboxGroup`)n(t,`checkboxGroup conditions must use includes`);else for(let r of`in`in e?e.in:[e.equals]){let e=Be(i,r);e&&n(t,`invalid condition for ${i.id}: ${e}`)}}if(e.controls.forEach((e,t)=>{let r=`/controls/${t}`;if(e.group&&!i.has(e.group)&&n(`${r}/group`,`unknown group`),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&n(r,`min must not exceed max`),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&n(r,`minLength must not exceed maxLength`),e.type===`segmented`&&e.options.length>3&&n(`${r}/options`,`segmented supports at most three options`),e.type!==`button`){let t=Be(e,e.default);t&&n(`${r}/default`,t)}o(e.when,`${r}/when`)}),(e.groups??[]).forEach((e,t)=>o(e.when,`/groups/${t}/when`)),t.length)throw new ze(t);return He(e),e}function Ge(e,t){let[n,r]=(0,V.useState)(e),[i,a]=(0,V.useState)(null),o=(0,V.useRef)(e),s=(0,V.useRef)(e),c=(0,V.useRef)(0),l=(0,V.useRef)(!1);(0,V.useLayoutEffect)(()=>{s.current=e,l.current||(o.current=e,r(e))},[e]),(0,V.useLayoutEffect)(()=>()=>{c.current++},[]);function u(e){c.current++,l.current=!0,o.current=e,r(e),a(null)}function d(){c.current++,l.current=!1,o.current=s.current,r(s.current),a(null)}function f(e,n=e){u(e);let i=c.current;Promise.resolve().then(()=>t(n)).then(e=>{c.current===i&&(l.current=!1,o.current=e&&`value`in e?e.value:s.current,r(o.current))}).catch(()=>{c.current===i&&(d(),a(G.controlsValueNotApplied))})}return{draft:n,error:i,current:()=>o.current,stage:u,commit:f,reset:d}}function Ke(e){let t=e.step??1,n=Math.max(...[e.min,e.max,t].map(e=>{let[t=``,n=`0`]=String(e).split(`e`);return Math.max(0,(t.split(`.`)[1]?.length??0)-Number(n))})),r=Math.max(...[e.min,e.max].map(e=>n<=100?e.toFixed(n).length:String(e).length),String(e.default).length,String(t).length);return e.type===`slider`?`calc(${r}ch + var(--hub-space-8) * 2)`:`calc(${r}ch + var(--hub-space-8) * 2 + 1.25rem)`}function qe({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=Ge(n,a),[s,c]=(0,V.useState)(null);function l(e){let n=e.target.value,r=t.type===`number`||t.type===`slider`?n===``?NaN:Number(n):n,i=Be(t,r);c(i),i?o.stage(n):o.commit(n,r)}let u=s||o.error,d=t.type===`number`||t.type===`slider`,f=t.type===`slider`?{"--controls-slider-progress":`${t.min===t.max?100:(Number(n)-t.min)/(t.max-t.min)*100}%`}:void 0,p=[i?`${e}-hint`:void 0,u?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0,m={id:e,disabled:r,value:String(o.draft),onChange:l,"aria-invalid":u?!0:void 0,"aria-describedby":p,onBlur:()=>{s&&(o.reset(),c(null))}},h;return h=t.type===`textarea`?(0,U.jsx)(H.Textarea,{...m,rows:2,resize:`vertical`}):d?(0,U.jsx)(H.TextInput,{...m,className:t.type===`slider`?`controls-number-input controls-number-input--slider`:`controls-number-input`,type:`number`,min:t.min,max:t.max,step:t.step??1,validationStatus:u?`error`:void 0,"aria-labelledby":`${e}-label`,style:{width:Ke(t)}}):t.type===`color`?(0,U.jsx)(`input`,{...m,className:`controls-native-color`,type:`color`}):(0,U.jsx)(H.TextInput,{...m,type:`text`}),(0,U.jsxs)(H.FormControl,{id:e,className:d?`controls-field controls-field--${t.type}`:`controls-field`,fullWidth:!d||t.type===`slider`,validationStatus:u?`error`:void 0,children:[d?(0,U.jsxs)(`div`,{className:`controls-field-heading`,children:[(0,U.jsx)(H.FormControl.Label,{id:`${e}-label`,htmlFor:e,className:`controls-field-label`,children:t.label}),t.type===`slider`?(0,U.jsxs)(`div`,{className:`controls-slider-row`,children:[(0,U.jsx)(`input`,{...m,id:`${e}-slider`,value:String(n),className:`controls-native-slider`,type:`range`,style:f,min:t.min,max:t.max,step:t.step??1,"aria-labelledby":`${e}-label`}),h]}):h]}):(0,U.jsx)(H.FormControl.Label,{className:`controls-field-label`,children:t.label}),d?null:h,i?(0,U.jsx)(H.FormControl.Hint,{children:(0,U.jsx)(`span`,{role:`status`,children:i})}):null,u?(0,U.jsx)(H.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:u}):null]})}function Je({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=Ge(n,a),s=[i?`${e}-unavailable`:void 0,o.error?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0;if(t.type===`boolean`||t.type===`select`)return(0,U.jsxs)(H.FormControl,{id:e,className:t.type===`boolean`?`controls-field controls-choice-row`:`controls-field controls-field--select`,fullWidth:t.type===`boolean`,validationStatus:o.error?`error`:void 0,children:[t.type===`select`?(0,U.jsx)(H.FormControl.Label,{className:`controls-field-label`,children:t.label}):null,t.type===`boolean`?(0,U.jsx)(H.Checkbox,{className:`controls-choice-mark`,disabled:r,"aria-describedby":s,checked:o.draft===!0,onChange:e=>o.commit(e.target.checked)}):(0,U.jsx)(H.Select,{className:`controls-select-input`,disabled:r,"aria-describedby":s,value:o.draft,onChange:e=>o.commit(e.target.value),children:t.options.map(e=>(0,U.jsx)(H.Select.Option,{value:e,children:e},e))}),t.type===`boolean`?(0,U.jsx)(H.FormControl.Label,{className:`controls-choice-label`,children:t.label}):null,i?(0,U.jsx)(H.FormControl.Hint,{children:(0,U.jsx)(`span`,{role:`status`,children:i})}):null,o.error?(0,U.jsx)(H.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:o.error}):null]});let c=t.type===`checkboxGroup`,l=t.type===`segmented`,u=c?H.CheckboxGroup:H.RadioGroup,d=c?H.Checkbox:H.Radio;return(0,U.jsxs)(u,{id:e,className:`controls-field`,"aria-disabled":r||void 0,"aria-describedby":s,children:[(0,U.jsx)(u.Label,{className:`controls-choice-group-label`,children:t.label}),(0,U.jsx)(`div`,{className:l?`controls-segments`:`controls-options`,children:t.options.map((t,n)=>{let i=`${e}-${n}`,a=c?o.draft.includes(t):o.draft===t,u=(0,U.jsx)(d,{className:c?`controls-choice-mark`:`controls-choice-mark controls-choice-mark--radio`,id:i,name:e,value:t,checked:a,disabled:r,"aria-describedby":s,onChange:e=>{let n=o.current();o.commit(c?e.target.checked?[...n,t]:n.filter(e=>e!==t):t)}});return l?(0,U.jsxs)(`label`,{htmlFor:i,className:`controls-segment`,title:t,children:[(0,U.jsx)(le,{children:u}),(0,U.jsx)(H.Text,{as:`span`,size:`100`,weight:`medium`,children:t})]},t):(0,U.jsxs)(H.FormControl,{id:i,className:`controls-field controls-choice-row`,children:[u,(0,U.jsx)(H.FormControl.Label,{className:`controls-choice-label`,children:t})]},t)})}),i?(0,U.jsx)(H.Text,{as:`span`,id:`${e}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:i}):null,o.error?(0,U.jsx)(u.Validation,{variant:`error`,role:`status`,children:o.error}):null]})}function Ye(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?G.controlsActionUnavailable:``)}}function Xe({scopes:e,disabled:t=!1,onCommand:n,collapsedGroups:r,onGroupCollapse:i}){let a=(0,V.useId)(),o=(0,V.useRef)(null),s=(0,V.useRef)(null),[c,l]=(0,V.useState)({});(0,V.useLayoutEffect)(()=>{s.current&&!s.current.isConnected&&(document.activeElement===document.body&&o.current?.focus(),s.current=null)},[e]);function u(e,r){if(!e.snapshot.visible[r.id])return null;let i=`${a}-${e.declaration.scope}-${r.id}`,o=e.snapshot.values[r.id];function s(t){return n(`update`,e.declaration.scope,r.id,t)}let c=e.snapshot.bindings?.[r.id],l=Ye(e,r),u={id:i,message:l.error?l.available?G.controlsNotApplied(r.label):G.controlsUnavailable(r.label):void 0,disabled:t||!!c?.error&&c?.available!==!0||c?.busy===!0};switch(r.type){case`button`:{let t=e.snapshot.actions[r.id];return(0,U.jsx)(`div`,{className:`controls-field controls-action-field`,children:(0,U.jsxs)(H.Button,{type:`button`,size:`small`,variant:`secondary`,className:`controls-action-button`,disabled:u.disabled||!t?.available||t.busy,"aria-describedby":u.message?`${i}-unavailable`:void 0,"aria-busy":t?.busy,onClick:()=>{n(`action`,e.declaration.scope,r.id)},children:[r.label,t?.busy?G.controlsActionBusy:``]})},r.id)}case`boolean`:case`select`:case`radio`:case`segmented`:case`checkboxGroup`:return(0,U.jsx)(Je,{...u,control:r,value:o,onCommit:s},r.id);case`number`:case`slider`:case`text`:case`textarea`:case`color`:return(0,U.jsx)(qe,{...u,control:r,value:o,onCommit:s},r.id)}}function d(e,t){if(!e.snapshot.visible[t.id])return null;let n=Ye(e,t);return(0,U.jsxs)(V.Fragment,{children:[u(e,t),t.type===`button`&&n.error?(0,U.jsx)(H.Text,{as:`p`,id:`${a}-${e.declaration.scope}-${t.id}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:n.available?G.controlsNotApplied(t.label):G.controlsUnavailable(t.label)}):null]},t.id)}let f=[...e.filter(e=>e.declaration.role===`shared`),...e.filter(e=>e.declaration.role!==`shared`)].filter(e=>e.declaration.controls.some(t=>t.group?e.snapshot.groups[t.group]:e.snapshot.visible[t.id]));return(0,U.jsx)(`div`,{ref:o,tabIndex:-1,role:`region`,"aria-label":G.controlsRegion,className:`controls-fields`,onFocusCapture:e=>{s.current=e.target},children:f.map((e,t)=>{let n=new Set;return(0,U.jsxs)(`section`,{className:`controls-scope`,"aria-label":e.declaration.label??e.declaration.scope,children:[t>0?(0,U.jsx)(`hr`,{className:`controls-scope-divider`}):null,e.declaration.controls.map(t=>{if(!t.group)return d(e,t);if(n.has(t.group))return null;n.add(t.group);let o=e.declaration.groups?.find(e=>e.id===t.group);if(!o||!e.snapshot.groups[o.id])return null;let s=`${e.declaration.scope}/${o.id}`,u=(r??c)[s]===!0,f=`${a}-${e.declaration.scope}-${o.id}-group`;return(0,U.jsxs)(`fieldset`,{className:`controls-group`,"aria-label":o.label,children:[(0,U.jsx)(`legend`,{children:(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,type:`button`,block:!0,className:`controls-group-toggle controls-ghost-button`,"aria-label":u?G.controlsExpandGroup(o.label):G.controlsCollapseGroup(o.label),"aria-controls":f,"aria-expanded":!u,trailingVisual:u?(0,U.jsx)(p,{size:16}):(0,U.jsx)(g,{size:16}),onClick:t=>{t.currentTarget.focus(),i?i(e.declaration.scope,o.id,!u):l(e=>({...e,[s]:!u}))},children:(0,U.jsx)(H.Text,{as:`span`,size:`100`,weight:`bold`,variant:`muted`,className:`controls-group-label`,children:o.label})})}),(0,U.jsx)(`div`,{id:f,className:`controls-group-body`,hidden:u,children:e.declaration.controls.filter(e=>e.group===o.id).map(t=>d(e,t))})]},o.id)})]},e.declaration.scope)})})}function Ze(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}function Qe(e,t){let n=(0,V.useRef)(null),r=(0,V.useRef)(null),i=(0,V.useRef)(null),a=(0,V.useRef)({position:e,onChange:t}),o=(0,V.useRef)(null),[s,c]=(0,V.useState)(!1);(0,V.useLayoutEffect)(()=>{a.current={position:e,onChange:t}});let l=(0,V.useCallback)(e=>{let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i||!t.width||!t.height)return;let o={x:Math.max(0,Math.min(e.x,Math.max(0,t.width-i.width))),y:Math.max(0,Math.min(e.y,Math.max(0,t.height-i.height)))};(a.current.position?.x!==o.x||a.current.position?.y!==o.y)&&a.current.onChange(o)},[]);(0,V.useLayoutEffect)(()=>{let e=n.current,t=r.current;if(!e||!t)return;function i(){let n=e?.getBoundingClientRect(),r=t?.getBoundingClientRect();if(!n||!r||!n.width||!n.height)return;let i=r.left-n.left,a=r.top-n.top;(i<0||a<0||i>Math.max(0,n.width-r.width)||a>Math.max(0,n.height-r.height))&&l({x:i,y:a})}let a=new ResizeObserver(i);return a.observe(e),a.observe(t),window.addEventListener(`resize`,i),i(),()=>{a.disconnect(),window.removeEventListener(`resize`,i)}},[l]);function u(e=!1){let t=o.current;o.current=null,c(!1),t&&(e&&l(t.origin),i.current?.hasPointerCapture(t.pointerId)&&i.current.releasePointerCapture(t.pointerId))}return{boundsRef:n,panelRef:r,handleRef:i,dragging:s,onPointerDown:e=>{if(e.button!==0||o.current)return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();t&&i&&(o.current={pointerId:e.pointerId,x:e.clientX,y:e.clientY,origin:{x:i.left-t.left,y:i.top-t.top}},e.currentTarget.setPointerCapture(e.pointerId),e.currentTarget.focus(),e.preventDefault(),c(!0))},onPointerMove:e=>{let t=o.current;t&&t.pointerId===e.pointerId&&l({x:t.origin.x+e.clientX-t.x,y:t.origin.y+e.clientY-t.y})},onPointerUp:e=>{o.current?.pointerId===e.pointerId&&u()},onPointerCancel:e=>{o.current?.pointerId===e.pointerId&&u(!0)},onLostPointerCapture:()=>{o.current&&u()},onKeyDown:e=>{if(e.key===`Escape`&&o.current){e.preventDefault(),u(!0);return}if(![`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`].includes(e.key))return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i)return;e.preventDefault();let a=e.shiftKey?1:10;l({x:i.left-t.left+(e.key===`ArrowLeft`?-a:e.key===`ArrowRight`?a:0),y:i.top-t.top+(e.key===`ArrowUp`?-a:e.key===`ArrowDown`?a:0)})}}}function $e(e){let t=e.filter(e=>e.declaration.role!==`shared`),n=t.length?t:e;return n.length?Math.max(...n.map(e=>e.declaration.panel?.width??288)):288}function et({state:e,connection:t,layout:n,onLayoutChange:r,onDiagnose:i,diagnosisTarget:a=``}){let o=e.loading?[]:e.scopes.flatMap(e=>e.declaration.controls.flatMap(t=>{let n=Ye(e,t);return n.visible&&n.error?[{...n,label:t.label}]:[]})),s=!!(i&&!e.loading&&(!e.runtimeAvailable&&e.error||e.storageError||o.length||e.reconnectRequired||e.status===`missing-runtime`||e.status===`unsupported-runtime`||e.status===`invalid-config`)),c=s?JSON.stringify([a,e.status,e.runtimeAvailable,e.reconnectRequired,e.error,e.storageError,o.map(({scope:e,id:t,error:n})=>[e,t,n])]):``,[l,d]=(0,V.useState)(()=>({episode:c,identity:{},busy:!1,requested:!1,error:``}));l.episode!==c&&d({episode:c,identity:{},busy:!1,requested:!1,error:``});async function f(){if(!i||!s||l.busy||l.requested)return;let e=l.identity;d(t=>t.identity===e?{...t,busy:!0,error:``}:t);try{await i(),d(t=>t.identity===e?{...t,requested:!0}:t)}catch(t){d(n=>n.identity===e?{...n,error:t instanceof Error?t.message:G.controlsDiagnosisFailed}:n)}finally{d(t=>t.identity===e?{...t,busy:!1}:t)}}let p=(0,V.useId)(),m=(0,V.useId)(),_=(0,V.useRef)(null),{boundsRef:v,panelRef:y,handleRef:b,dragging:x,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}=Qe(n.position,e=>r(t=>({...t,position:e})));(0,V.useEffect)(()=>{b.current?.focus()},[b]),(0,V.useLayoutEffect)(()=>{_.current&&!_.current.isConnected&&(document.activeElement===document.body&&b.current?.focus(),_.current=null)},[e,b]);let O=e.loading?G.controlsConnecting:e.status===`no-controls`?G.controlsEmpty:e.status===`missing-runtime`?i?G.controlsLocalMissingRuntime:G.controlsMissingRuntime:e.status===`unsupported-runtime`?G.controlsUnsupportedRuntime:e.status===`invalid-config`?G.controlsInvalid:``,k=!e.loading&&(e.storageError||e.reconnectRequired||!e.runtimeAvailable&&e.error),A=!e.loading&&e.status===`no-controls`&&!e.error&&!e.storageError&&!e.reconnectRequired&&!e.scopeErrors?.length&&!e.scopes.length;return(0,U.jsx)(`div`,{ref:v,className:`canvas-controls-layer`,children:(0,U.jsxs)(`aside`,{ref:y,className:`canvas-controls-panel`,"aria-label":G.controls,onFocusCapture:e=>{e.target instanceof HTMLElement&&(_.current=e.target)},"data-collapsed":n.collapsed,"data-dragging":x||void 0,style:{left:n.position?.x,top:n.position?.y,width:`min(${$e(e.scopes)}px, calc(100% - var(--hub-space-16) * 2))`},children:[(0,U.jsxs)(`header`,{className:`canvas-controls-header`,children:[(0,U.jsx)(W,{icon:h,ref:b,size:`small`,variant:`invisible`,className:`canvas-controls-grab controls-ghost-button`,"aria-label":G.controlsMove,"aria-describedby":m,title:``,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}),(0,U.jsx)(le,{id:m,children:G.controlsMoveHint}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,block:!0,className:`canvas-controls-title controls-ghost-button`,"aria-label":n.collapsed?G.controlsExpand:G.controlsCollapse,"aria-expanded":!n.collapsed,"aria-controls":p,trailingVisual:n.collapsed?(0,U.jsx)(g,{size:16}):(0,U.jsx)(u,{size:16}),onClick:()=>r(e=>({...e,collapsed:!e.collapsed})),children:G.controls}),(0,U.jsx)(W,{icon:L,size:`small`,variant:`invisible`,className:`controls-ghost-button`,"aria-label":G.controlsResetAll,disabled:!e.runtimeAvailable||e.reconnectRequired||e.loading||e.resetting||!e.storageError&&!e.hasResettableValues&&!e.scopes.some(e=>Object.keys(Ze(e)).length>0)||e.scopes.some(e=>Object.values(e.snapshot.actions).some(e=>e.busy))||e.status!==`ready`&&e.status!==`no-controls`&&!e.storageError,onClick:()=>{t.resetAll()}})]}),(0,U.jsxs)(`div`,{id:p,className:`canvas-controls-body`,hidden:n.collapsed,children:[(0,U.jsxs)(`div`,{className:`canvas-controls-content`,children:[O||e.notice?(0,U.jsx)(`div`,{role:`status`,"aria-live":`polite`,children:(0,U.jsx)(H.Text,{as:`p`,size:`100`,variant:`muted`,children:[O,e.notice].filter(Boolean).join(` `)})}):null,!e.loading&&e.error?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:e.error}):null,!e.loading&&e.scopeErrors?.map(e=>(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:G.controlsScopeError(e.scope,e.error)},e.scope)),!e.loading&&e.storageError?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:e.storageError}):null,l.error?(0,U.jsx)(H.Text,{as:`p`,size:`100`,role:`alert`,children:l.error}):null,(0,U.jsx)(Xe,{scopes:e.loading?[]:e.scopes,disabled:e.resetting||e.reconnectRequired,collapsedGroups:n.collapsedGroups,onGroupCollapse:(e,t,n)=>r(r=>({...r,collapsedGroups:{...r.collapsedGroups,[`${e}/${t}`]:n}})),onCommand:(e,n,r,i)=>t.command(e,n,r,i)}),o.length?(0,U.jsxs)(H.Accordion,{className:`canvas-controls-diagnostics`,disableAnimation:!0,children:[(0,U.jsx)(H.Accordion.Heading,{children:G.controlsDiagnostics}),(0,U.jsx)(H.Accordion.Content,{children:o.map(({scope:e,id:t,label:n,error:r})=>(0,U.jsxs)(H.Text,{as:`p`,size:`100`,children:[n,`: `,r]},`${e}/${t}`))})]}):null]}),s||k||A?(0,U.jsxs)(`footer`,{className:`canvas-controls-footer`,children:[A?(0,U.jsxs)(H.InlineLink,{className:`canvas-controls-learn-more`,href:`https://github.com/github/replica/blob/main/starter/README.md#prototype-controls`,target:`_blank`,rel:`noopener noreferrer`,children:[G.controlsLearnMore,(0,U.jsx)(re,{size:16,"aria-hidden":`true`})]}):null,s?(0,U.jsx)(H.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:l.busy||l.requested||e.resetting,onClick:()=>void f(),children:l.requested?G.controlsDiagnosisRequested:o.length?G.controlsFix:G.controlsDiagnose}):null,k?(0,U.jsx)(H.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:e.resetting,onClick:()=>t.retry(),children:e.storageError?G.controlsRetryStorage:G.controlsRetry}):null]}):null]})]})})}var tt=C();function nt({children:e,className:t,...n}){return(0,U.jsx)(`span`,{...n,className:`hub-counter${t?` ${t}`:``}`,children:e})}var rt=(0,V.createContext)(null);function it({source:e,children:t}){return(0,U.jsx)(rt,{value:e,children:t})}function at({title:e,label:t=e,open:n,closeLabel:r,closeDisabled:i=!1,closeShortcut:a,closeRef:o,onClose:s,headerAccessory:c,className:l,contentClassName:u,children:d}){return(0,U.jsxs)(`aside`,{className:`hub-sidebar${l?` ${l}`:``}`,"aria-label":t,"aria-hidden":!n,"data-open":n,inert:!n,children:[(0,U.jsxs)(`header`,{className:`hub-sidebar__header`,children:[(0,U.jsxs)(`div`,{className:`hub-sidebar__heading`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`subhead-medium`,weight:`normal`,children:e}),c]}),(0,U.jsx)(W,{ref:o,icon:te,"aria-label":r,"aria-keyshortcuts":a,title:r,description:r,variant:`invisible`,size:`small`,className:`hub-sidebar__close`,disabled:i,onClick:s})]}),(0,U.jsx)(`div`,{className:`hub-sidebar__content${u?` ${u}`:``}`,children:d})]})}function ot({src:e,size:t=32,className:n}){return(0,U.jsx)(H.Avatar,{src:e||`/avatar-placeholder.svg`,alt:``,size:32,className:`hub-user-avatar hub-user-avatar--${t}${n?` ${n}`:``}`})}function st({participants:e,size:t}){let n=e.slice(0,4),r=e.length-3;return(0,U.jsxs)(`span`,{className:`review-participant-stack review-participant-stack--${t}`,"data-avatar-count":n.length,"data-participant-count":e.length,"aria-hidden":`true`,children:[(r>1?n.slice(0,3):n).map(e=>(0,U.jsx)(`span`,{className:`review-participant-stack__avatar`,children:(0,U.jsx)(ot,{src:e.avatarUrl,size:24})},e.login)),r>1?(0,U.jsxs)(`span`,{className:`review-participant-stack__avatar review-participant-stack__avatar--overflow`,children:[`+`,r]}):null]})}function ct(e,t){let n=e.path.map(e=>({x:t.x+e.x*t.width,y:t.y+e.y*t.height})),r={x:t.x+t.width,y:t.y};return{path:n,point:n.reduce((e,t)=>{let n=(t.x-r.x)**2+(t.y-r.y)**2;return n{let e=c.current;if(!e)return;function t(){let t=e?.clientWidth??0;if(t)for(let e of l.current.values()){let n=Number.parseFloat(e.style.left),r=e.offsetWidth;if(!Number.isFinite(n)||!r)continue;let i=n-16,a=Math.max(0,Math.min(i,t-r))-i;e.style.setProperty(`--review-marker-offset-x`,`${a}px`)}}t();let n=typeof ResizeObserver>`u`?null:new ResizeObserver(t);n?.observe(e);for(let e of l.current.values())n?.observe(e);return window.addEventListener(`resize`,t),()=>{n?.disconnect(),window.removeEventListener(`resize`,t)}},[t,e]),(0,V.useEffect)(()=>{!i||n===null||u!==`resolved`&&u!==`moved`||l.current.get(n)?.focus({preventScroll:!0})},[i,u,n]),(0,U.jsx)(`div`,{ref:c,className:`review-comment-markers`,role:`group`,"aria-label":o.heading,children:e.map(e=>{let{root:i}=e,c=t.get(i.id);if(!c||c.status!==`resolved`&&c.status!==`moved`)return null;let u=e.replies.length>0,d=(e.unread?u?o.unreadMarkerWithRepliesLabel:o.unreadMarkerLabel:u?o.markerWithRepliesLabel:o.markerLabel).replace(`%{author}`,`@${i.author.login}`).replace(`%{count}`,(e.replies.length+1).toString()),f=i.anchor.kind===`area`?ct(i.anchor,c.rect):null,p=e.participants.slice(3),m=p.length>1?p.map(({login:e})=>`@${e}`).join(`, `):d;return(0,U.jsxs)(V.Fragment,{children:[f&&(!a||n===i.id)?(0,U.jsx)(`svg`,{className:`review-comment-area`,"aria-hidden":`true`,width:`100%`,height:`100%`,children:(0,U.jsx)(`polyline`,{className:n===i.id?`review-comment-area__path review-comment-area__path--selected`:`review-comment-area__path`,points:f.path.map(e=>`${e.x},${e.y}`).join(` `),vectorEffect:`non-scaling-stroke`})}):null,(0,U.jsx)(H.Tooltip,{text:m,type:`description`,ref:e=>{e instanceof HTMLButtonElement?l.current.set(i.id,e):l.current.delete(i.id)},children:(0,U.jsx)(`button`,{type:`button`,"data-review-thread-id":i.id,className:`review-comment-marker${n===i.id?` review-comment-marker--selected`:``}${i.resolvedAt?` review-comment-marker--resolved`:``}${e.unread?` review-comment-marker--unread`:``}${r&&n!==i.id?` review-comment-marker--blocked`:``}`,style:{left:f?.point.x??c.point.x,top:f?.point.y??c.point.y},"aria-label":d,disabled:r&&n!==i.id,onClick:()=>s(e),children:(0,U.jsx)(st,{participants:e.participants,size:`small`})})})]},i.id)})})}function Z({checked:e,onChange:t,size:n=`medium`,className:r,...i}){let{value:a,...o}=i;return(0,U.jsxs)(`label`,{className:`hub-switch hub-switch--${n}${r?` ${r}`:``}`,"data-disabled":i.disabled||void 0,children:[(0,U.jsx)(`span`,{className:`hub-switch__native-control`,children:(0,U.jsx)(H.Checkbox,{...o,value:a===void 0?void 0:String(a),role:`switch`,checked:e,onChange:e=>{i.disabled||t(e.currentTarget.checked)}})}),(0,U.jsx)(`span`,{className:`hub-switch__track`,"data-checked":e,"aria-hidden":`true`,children:(0,U.jsx)(`span`,{className:`hub-switch__thumb`})})]})}function Q(e){(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())}function ut({filters:e,participants:t,showPins:r,copy:i,onFiltersChange:a,onShowPinsChange:o}){let[s,c]=(0,V.useState)(!1),l=e.currentBuildOnly||e.currentPageOnly||e.showResolved||!e.showRead||e.onlyMine||e.participant!==null||!r,u=t.find(t=>t.login===e.participant),d=e.participant===null?i.allParticipantsLabel:u?.name?`${u.name} (@${u.login})`:`@${e.participant}`;return(0,U.jsxs)(`div`,{className:`review-comment-filter-controls`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__search`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__search-field`,children:[(0,U.jsx)(ae,{className:`review-comment-filter-controls__search-icon`,size:16,"aria-hidden":`true`}),(0,U.jsx)(`input`,{type:`search`,className:`review-comment-filter-controls__input`,"aria-label":i.searchLabel,placeholder:i.searchPlaceholder,value:e.search,onChange:t=>a({...e,search:t.target.value})})]}),(0,U.jsx)(W,{icon:n,"aria-label":i.filterLabel,description:i.filterLabel,"aria-expanded":s,variant:`invisible`,className:`review-comment-filter-controls__button${s||l?` review-comment-filter-controls__button--active`:``}`,onClick:()=>c(e=>!e)})]}),s?(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__filters`,children:[(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__participant`,children:[(0,U.jsx)(`span`,{children:i.participantFilterLabel}),(0,U.jsxs)(H.ActionMenu,{size:`small`,selectionVariant:`single`,menuAlignment:`end`,onSelect:t=>a({...e,participant:t===``?null:t}),children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-filter-controls__participant-trigger`,variant:`secondary`,size:`small`,"aria-label":`${i.participantFilterLabel}: ${d}`,children:(0,U.jsx)(`span`,{className:`review-comment-filter-controls__participant-name`,children:d})}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":i.participantFilterLabel,children:[(0,U.jsx)(H.ActionMenu.Item,{value:``,selected:e.participant===null,role:`menuitemradio`,onKeyDownCapture:Q,children:i.allParticipantsLabel}),t.map(t=>(0,U.jsx)(H.ActionMenu.Item,{value:t.login,selected:e.participant===t.login,role:`menuitemradio`,onKeyDownCapture:Q,children:t.name?`${t.name} (@${t.login})`:`@${t.login}`},t.login))]})]})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-current-build`,children:i.currentBuildFilterLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-current-build`,checked:e.currentBuildOnly,size:`small`,onChange:t=>a({...e,currentBuildOnly:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-current-page`,children:i.currentPageFilterLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-current-page`,checked:e.currentPageOnly,size:`small`,onChange:t=>a({...e,currentPageOnly:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-show-resolved`,children:i.showResolvedLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-show-resolved`,checked:e.showResolved,size:`small`,onChange:t=>a({...e,showResolved:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-unread-only`,children:i.unreadOnlyLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-unread-only`,checked:!e.showRead,size:`small`,onChange:t=>a({...e,showRead:!t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-only-mine`,children:i.onlyMineLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-only-mine`,checked:e.onlyMine,size:`small`,onChange:t=>a({...e,onlyMine:t})})]}),(0,U.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,U.jsx)(`span`,{id:`review-comments-show-pins`,children:i.showPinsLabel}),(0,U.jsx)(Z,{"aria-labelledby":`review-comments-show-pins`,checked:r,size:`small`,onChange:o})]})]}):null]})}var dt=[[31536e3,`y`],[2592e3,`mo`],[604800,`w`],[86400,`d`],[3600,`h`],[60,`m`]];function ft(e){let t=window.setInterval(e,6e4);return()=>window.clearInterval(t)}function pt(){return Math.floor(Date.now()/6e4)*6e4}function mt(){return null}function ht({value:e,showTitle:t=!0}){let n=Date.parse(e),r=Number.isNaN(n)?e:new Date(n).toUTCString(),i=(0,V.useSyncExternalStore)(ft,pt,mt),a=r;if(i!==null&&!Number.isNaN(n)){let e=Math.round((i-n)/1e3),t=dt.find(([t])=>Math.abs(e)>=t);a=t?`${e<0?`in `:``}${Math.round(Math.abs(e)/t[0])}${t[1]}${e<0?``:` ago`}`:`just now`}return(0,U.jsx)(`time`,{dateTime:e,title:t?r:void 0,"aria-label":r,children:a})}function gt({thread:e,currentBuildNumber:t,resolution:n,anchorStatusLabel:r,selected:i,selectionBlocked:a,copy:o,onSelect:s,buildHref:c}){let l=(0,V.useId)(),{root:u}=e,d=u.author.name||`@${u.author.login}`,f=a&&!i,p=o.buildLabel.replace(`%{number}`,u.buildNumber.toString()),m=u.buildNumber!==t,h=e.replies.length===1?o.replyCountOneLabel:o.replyCountOtherLabel.replace(`%{count}`,e.replies.length.toString()),g=o.missingAnchorLabel;return u.resolvedAt?g=o.resolvedLabel:r===void 0?n?n.status===`resolved`?g=null:n.status===`moved`?g=o.movedAnchorLabel:n.status===`changed`?g=o.changedAnchorLabel:n.status===`route-mismatch`&&(g=o.routeMismatchLabel):g=null:g=r,(0,U.jsx)(`article`,{className:`review-comment-row${i?` review-comment-row--selected`:``}${e.unread?` review-comment-row--unread`:``}`,onClick:t=>{f||t.target instanceof Element&&t.target.closest(`a`)||s(e)},children:(0,U.jsx)(`div`,{className:`review-comment-row__layout`,children:(0,U.jsxs)(`div`,{className:`review-comment-row__content`,children:[(0,U.jsxs)(`div`,{className:`review-comment-row__copy`,children:[(0,U.jsxs)(`div`,{className:`review-comment-row__metadata`,children:[(0,U.jsxs)(`span`,{className:`review-comment-row__author-and-build`,children:[(0,U.jsx)(ot,{src:u.author.avatarUrl,size:20,className:`review-comment-row__avatar`}),(0,U.jsx)(`span`,{id:`${l}-author`,className:`review-comment-row__author`,children:d}),m?(0,U.jsxs)(`span`,{className:`review-comment-row__build`,children:[`(`,(0,U.jsx)(`a`,{href:c||u.buildPath,target:c?`_blank`:void 0,rel:c?`noopener noreferrer`:void 0,children:p}),`)`]}):null]}),(0,U.jsx)(ht,{value:e.lastActivityAt})]}),(0,U.jsx)(`button`,{type:`button`,className:`review-comment-row__button`,"aria-labelledby":`${l}-author ${l}-body${e.unread?` ${l}-unread`:``}`,"aria-pressed":i,disabled:f,title:f?o.selectionBlockedLabel:void 0,children:(0,U.jsxs)(`span`,{className:`review-comment-row__body-container`,children:[e.unread?(0,U.jsx)(`span`,{role:`img`,id:`${l}-unread`,"aria-label":o.unreadLabel,title:o.unreadLabel,className:`review-comment-row__unread`}):null,(0,U.jsx)(`span`,{id:`${l}-body`,className:`review-comment-row__body`,children:u.body??o.deletedCommentLabel})]})})]}),g||e.replies.length>0?(0,U.jsxs)(`div`,{className:`review-comment-row__context`,children:[e.replies.length>0?(0,U.jsx)(`span`,{className:`review-comment-row__replies`,children:h}):null,g?(0,U.jsx)(H.Label,{size:`small`,className:`review-comment-row__status`,children:g}):null]}):null]})})})}function _t({frame:e,threads:t,currentBuildNumber:n,buildLinkOrigin:r,totalCount:i,hasThreads:a,filters:o,participants:s,resolutions:c,selectedThreadId:l,selectionBlocked:u,closeBlocked:d,showPins:f,loading:p,loadFailed:m,notice:h,copy:g,onClose:_,onFiltersChange:v,onShowPinsChange:y,onRetry:b,onSelect:x}){let S=a?g.noMatchesLabel:g.emptyLabel,C=(0,U.jsxs)(U.Fragment,{children:[h,(0,U.jsx)(ut,{filters:o,participants:s,showPins:f,copy:g,onFiltersChange:v,onShowPinsChange:y}),(0,U.jsxs)(`div`,{className:`review-comments-sidebar__body`,"aria-live":`polite`,children:[m?(0,U.jsxs)(`div`,{className:`review-comments-sidebar__state`,role:`alert`,children:[(0,U.jsx)(`span`,{children:g.loadErrorLabel}),(0,U.jsx)(H.Button,{size:`small`,onClick:b,children:g.retryLabel})]}):t.length===0&&!p?(0,U.jsx)(`div`,{className:`review-comments-sidebar__state`,children:S}):(0,U.jsx)(`div`,{className:`review-comments-sidebar__threads`,children:t.map(e=>(0,U.jsx)(gt,{thread:e,currentBuildNumber:n,buildHref:r?new URL(e.root.buildPath,r).href:void 0,resolution:c.get(e.root.id),selected:l===e.root.id,selectionBlocked:u,copy:g,onSelect:x},e.root.id))}),p?(0,U.jsxs)(`div`,{className:`review-comments-sidebar__loading`,children:[(0,U.jsx)(ce,{decorative:!0,size:`small`}),(0,U.jsx)(`span`,{children:g.loadingLabel})]}):null]})]});return e?(0,U.jsx)(at,{...e,title:g.heading,closeLabel:g.closeLabel,closeDisabled:d,closeShortcut:`Shift+C`,onClose:_,headerAccessory:(0,U.jsx)(nt,{children:i}),children:C}):(0,U.jsxs)(`aside`,{className:`review-comments-sidebar`,"aria-label":g.heading,children:[(0,U.jsxs)(`header`,{className:`review-comments-sidebar__header`,children:[(0,U.jsxs)(`span`,{className:`review-comments-sidebar__heading`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,children:g.heading}),(0,U.jsx)(nt,{children:i})]}),(0,U.jsx)(W,{icon:te,"aria-label":g.closeLabel,"aria-keyshortcuts":`Shift+C`,description:g.closeLabel,size:`small`,variant:`invisible`,className:`review-comments-sidebar__close`,disabled:d,onClick:_})]}),C]})}function vt({bridgeReady:e,copy:t,selectionBlocked:n,selecting:r,onCancelSelection:i,onStartAreaSelection:a,onStartElementSelection:o}){let c=(0,V.useId)(),l=!e||n,u=e?n?t.selectionBlockedLabel:t.commentMenuLabel:t.bridgeUnavailableLabel;if(r)return(0,U.jsx)(W,{icon:te,"aria-label":t.cancelSelectionLabel,description:t.cancelSelectionLabel,"aria-pressed":!0,size:`small`,variant:`default`,className:`review-comment-control__trigger`,onClick:i});let d=(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`start`,disabled:l,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-control__trigger`,variant:`secondary`,"aria-label":t.commentMenuLabel,"aria-describedby":c,leadingVisual:(0,U.jsx)(b,{size:16}),onClick:e=>{let t=e.currentTarget,n=t.closest(`.repository-workspace__content`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??window.innerHeight),i=Math.max(0,r-t.getBoundingClientRect().bottom-8);t.closest(`[data-testid="ActionMenu"]`)?.style.setProperty(`--review-comment-control-menu-height`,`${i}px`)},children:``}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":t.commentMenuLabel,children:[(0,U.jsx)(H.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`element`,leadingVisual:(0,U.jsx)(s,{size:16}),"aria-keyshortcuts":`C`,onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},children:t.commentOnElementLabel}),(0,U.jsx)(H.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`area`,leadingVisual:(0,U.jsx)(_,{size:16}),"aria-keyshortcuts":`H`,onClick:a,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),a())},children:t.highlightRegionLabel})]})]});return l?(0,U.jsxs)(`div`,{title:u,children:[d,(0,U.jsx)(le,{id:c,children:u})]}):(0,U.jsx)(H.Tooltip,{id:c,text:u,type:`description`,children:(0,U.jsx)(`div`,{children:d})})}var yt={search:``,currentBuildOnly:!1,currentPageOnly:!1,showResolved:!1,showRead:!0,onlyMine:!1,participant:null},bt={heading:`Comments`,closeLabel:`Close comments`,commentMenuLabel:`Add a comment`,commentOnElementLabel:`Comment on element`,highlightRegionLabel:`Highlight a region`,cancelSelectionLabel:`Cancel selection`,bridgeUnavailableLabel:`Adding comments needs the review bridge.`,selectionBlockedLabel:`Close or submit the open draft.`,selectionFailedLabel:`Hub could not anchor a comment to that element.`,areaTooSmallLabel:`Draw a larger region to add a comment.`,areaUnavailableLabel:`Hub could not save that region.`,searchLabel:`Search comments`,searchPlaceholder:`Search comments`,filterLabel:`Filters`,currentBuildFilterLabel:`Current build only`,currentPageFilterLabel:`Current page only`,participantFilterLabel:`Participant`,allParticipantsLabel:`All participants`,showResolvedLabel:`Show resolved`,unreadOnlyLabel:`Unread only`,onlyMineLabel:`Only your threads`,showPinsLabel:`Show pins`,sidebarShortcutLabel:`Shift+C`,loadingLabel:`Loading comments`,loadErrorLabel:`Comments could not be loaded.`,retryLabel:`Retry`,emptyLabel:`No comments have been added.`,noMatchesLabel:`No comments match these filters.`,buildLabel:`build %{number}`,movedAnchorLabel:`Moved`,changedAnchorLabel:`Context changed`,missingAnchorLabel:`Not found`,routeMismatchLabel:`Saved on another page`,resolvedLabel:`Resolved`,markerLabel:`Thread started by %{author}`,markerWithRepliesLabel:`Thread started by %{author}, %{count} comments`,unreadLabel:`Unread`,unreadMarkerLabel:`Unread thread started by %{author}`,unreadMarkerWithRepliesLabel:`Unread thread started by %{author}, %{count} comments`,replyCountOneLabel:`1 reply`,replyCountOtherLabel:`%{count} replies`,threadHeading:`Conversation`,backToCommentsLabel:`Back to comments`,resolvedByLabel:`Resolved by %{author}. Reopen this thread to reply.`,editedLabel:`Edited`,deletedCommentLabel:`Comment deleted`,addReactionLabel:`Add reaction`,reactionCountOneLabel:`%{reaction}, 1 reaction`,reactionCountOtherLabel:`%{reaction}, %{count} reactions`,reactionErrorLabel:`The reaction could not be changed.`,readErrorLabel:`Hub could not mark this conversation as read.`,markUnreadLabel:`Mark as unread`,markUnreadErrorLabel:`Hub could not mark this conversation as unread. Try again.`,reactionLabels:{"+1":`Thumbs up`,"-1":`Thumbs down`,laugh:`Laugh`,hooray:`Hooray`,confused:`Confused`,heart:`Heart`,rocket:`Rocket`,eyes:`Eyes`},commentActionsLabel:`Actions for comment by %{author}`,editLabel:`Edit`,deleteLabel:`Delete`,editCommentLabel:`Edit comment`,saveEditLabel:`Save`,savingEditLabel:`Saving comment`,cancelEditLabel:`Cancel`,editErrorLabel:`The comment could not be updated.`,deleteHeading:`Delete this comment?`,deletePromptLabel:`Deleted comment text cannot be recovered.`,confirmDeleteLabel:`Delete`,deletingLabel:`Deleting comment`,deleteErrorLabel:`The comment could not be deleted.`,replyLabel:`Reply`,replyPlaceholder:`Reply to this conversation`,replySubmitLabel:`Reply`,replySubmitTooltipMacLabel:`Reply (Cmd+Return)`,replySubmitTooltipOtherLabel:`Reply (Ctrl+Enter)`,replyingLabel:`Saving reply`,replyErrorLabel:`The reply could not be saved.`,resolveLabel:`Resolve`,resolvingLabel:`Resolving thread`,reopenLabel:`Reopen`,reopeningLabel:`Reopening thread`,resolutionErrorLabel:`The thread state could not be changed.`,resolvedReplyBlockedLabel:`Reopen this thread to reply.`,deletedReplyBlockedLabel:`Replies are closed.`,threadDiscardPromptLabel:`Your reply or edit has not been saved.`,composerHeading:`New comment`,composerLabel:`Comment`,composerPlaceholder:`Leave a review comment`,submitLabel:`Comment`,submitTooltipMacLabel:`Comment (Cmd+Return)`,submitTooltipOtherLabel:`Comment (Ctrl+Enter)`,submittingLabel:`Saving comment`,closeComposerLabel:`Cancel`,discardHeading:`Keep this draft?`,discardPromptLabel:`This comment has not been submitted.`,keepLabel:`Keep`,discardButtonLabel:`Discard`,bodyTooLongLabel:`Comments must be 10000 UTF-8 bytes or fewer.`,createErrorLabel:`The comment could not be saved.`};function xt(e,t){let n=new Map;n.set(e.login.toLowerCase(),e);for(let e of t.toReversed()){let t=e.login.toLowerCase();n.has(t)||n.set(t,e)}return Array.from(n.values())}function St(e){let t=new Map,n=new Map;for(let r of e){if(r.kind===`root`){t.set(r.id,r);continue}let e=n.get(r.rootId)??[];e.push(r),n.set(r.rootId,e)}return Array.from(t.values()).flatMap(e=>{let t=(n.get(e.id)??[]).filter(e=>e.deletedAt===null).sort((e,t)=>Date.parse(e.createdAt)-Date.parse(t.createdAt)||e.id-t.id);return e.deletedAt!==null&&t.length===0?[]:[{root:e,replies:t,participants:xt(e.author,t.map(e=>e.author)),lastActivityAt:t.at(-1)?.createdAt??e.createdAt,unread:e.viewerLastSeenActivityVersion===null||e.viewerLastSeenActivityVersionDate.parse(t.lastActivityAt)-Date.parse(e.lastActivityAt)||t.root.id-e.root.id)}var Ct=new TextEncoder;function wt(e,{prefix:t,required:n=!1}={}){return N().refine(r=>(!n||r!==``)&&(!t||r===``||r.startsWith(t))&&Ct.encode(r).length<=e)}var Tt=16384,Et=2048,Dt=2048,Ot=1024,kt=4096,At=1e3,jt=2e3,Mt=1e6,Nt=1e5,Pt=new TextEncoder,Ft=B().min(0).max(Mt),It=B().min(-Mt).max(Mt),Lt=B().min(0).max(Mt),Rt=E({x:B().min(0).max(1),y:B().min(0).max(1)}).strict(),zt=E({pathname:wt(Et,{prefix:`/`,required:!0}),search:wt(Dt,{prefix:`?`}),hash:wt(Ot,{prefix:`#`})}).strict(),Bt=E({x:Ft,y:Ft,width:Lt,height:Lt}).strict();E({x:It,y:It}).strict();var Vt=E({width:B().min(1).max(Nt),height:B().min(1).max(Nt),scrollX:Ft,scrollY:Ft}).strict(),Ht=E({schemaVersion:I(1),kind:I(`element`),route:zt,selector:wt(kt,{required:!0}),accessibleName:wt(At),tagName:wt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),selectedText:wt(jt),rect:Bt,viewport:Vt,elementOffset:Rt}).strict().refine(e=>Pt.encode(JSON.stringify(e)).length<=Tt),Ut=E({selector:wt(kt,{required:!0}),accessibleName:wt(At),tagName:wt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),role:wt(64),textExcerpt:wt(500),rect:Bt}).strict(),Wt=E({schemaVersion:I(1),kind:I(`area`),route:zt,path:z(Rt).min(2).max(160),rect:Bt,viewport:Vt,elements:z(Ut).max(8)}).strict().refine(e=>Math.hypot(e.rect.width,e.rect.height)>=8).refine(e=>Pt.encode(JSON.stringify(e)).length<=Tt),Gt=T(`kind`,[Ht,Wt]),Kt=T(`status`,[E({commentId:B().int().positive().max(2**53-1),status:ee([`resolved`,`moved`]),rect:E({x:It,y:It,width:Lt,height:Lt}).strict(),point:E({x:It,y:It}).strict()}).strict(),E({commentId:B().int().positive().max(2**53-1),status:ee([`changed`,`missing`,`route-mismatch`])}).strict()]),qt=B().int().positive().max(2**53-1),Jt=N().refine(e=>!Number.isNaN(Date.parse(e))),Yt=Jt.nullable(),Xt=E({login:N().min(1),name:N().nullable(),avatarUrl:N().nullable()}),Zt=ee([`+1`,`-1`,`laugh`,`hooray`,`confused`,`heart`,`rocket`,`eyes`]),Qt=E({content:Zt,count:qt,viewerHasReacted:A()}),$t={id:qt,body:N().nullable(),mentions:z(E({login:N().min(1),githubId:qt})).optional(),createdAt:Jt,updatedAt:Jt,editedAt:Yt,deletedAt:Yt,author:Xt,viewerCanEdit:A(),viewerCanDelete:A(),reactions:z(Qt)},en=E({...$t,kind:I(`root`),buildNumber:qt,buildPath:N().startsWith(`/`),anchor:Gt,resolvedAt:Yt,resolvedBy:Xt.nullable(),activityVersion:qt,viewerLastSeenActivityVersion:qt.nullable()}),tn=E({...$t,kind:I(`reply`),rootId:qt}),nn=T(`kind`,[en,tn]),rn=T(`hasMore`,[E({comments:z(nn),nextCursor:N().min(1),hasMore:I(!0)}),E({comments:z(nn),nextCursor:F(),hasMore:I(!1)})]),an=E({comments:z(nn).min(1).max(2)});function on(e,t){let{root:n}=e,{filters:r}=t;if(!r.showResolved&&n.resolvedAt!==null||!r.showRead&&!e.unread||r.onlyMine&&![n,...e.replies].some(e=>e.author.login.toLowerCase()===t.viewerLogin.toLowerCase())||r.currentBuildOnly&&n.buildNumber!==t.selectedBuildNumber||r.participant!==null&&!e.participants.some(e=>e.login.toLowerCase()===r.participant?.toLowerCase())||r.currentPageOnly&&t.route!==null&&(n.anchor.route.pathname!==t.route.pathname||n.anchor.route.search!==t.route.search||n.anchor.route.hash!==t.route.hash))return!1;let i=r.search.trim().toLowerCase();if(!i)return!0;let a=n.anchor.kind===`element`?[n.anchor.accessibleName,n.anchor.selectedText,n.anchor.tagName]:n.anchor.elements.flatMap(e=>[e.accessibleName,e.textExcerpt,e.tagName,e.role]);return[n.body??``,n.author.login,n.author.name??``,n.buildNumber.toString(),...e.replies.flatMap(e=>[e.body??``,e.author.login,e.author.name??``]),...a].join(`
-`).toLowerCase().includes(i)}var sn=E({candidates:z(E({githubId:B().int().positive().max(2**53-1),login:N().min(1).max(39),avatarUrl:N().nullable()}))});async function $(e,t,n={}){let r=await fetch(e,{...n,headers:{"Content-Type":`application/json`,"X-Replica-Canvas-Token":t,...n.headers}}),i=await r.json().catch(()=>({error:G.invalidResponse}));if(!r.ok)throw Object.assign(Error(i.error||G.requestFailed),{code:i.code,statusCode:r.status,authorization:i.authorization});return i}function cn({error:e,busy:t,requested:n,onFix:r,onDismiss:i}){let a=(0,V.useId)();return(0,U.jsxs)(ue,{title:G.commentingUnavailable,descriptionId:a,closeLabel:G.closeCommentingDialog,onClose:i,children:[(0,U.jsx)(`p`,{id:a,children:G.commentingDescription}),e?(0,U.jsx)(`p`,{role:`alert`,children:e}):null,(0,U.jsxs)(`div`,{className:`canvas-commenting-recovery__actions`,children:[(0,U.jsx)(H.Button,{variant:`primary`,disabled:t||n,onClick:r,children:n?G.commentingFixRequested:G.commentingFix}),(0,U.jsx)(H.Button,{variant:`subtle`,onClick:i,children:G.commentingDismiss})]})]})}function ln({cancelLabel:e,confirmLabel:t,description:n,errorLabel:r,heading:i,loading:a=!1,loadingAnnouncement:o,compact:s=!1,condensed:c=!1,onCancel:l,onConfirm:u}){let d=(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:c?`primary`:void 0,className:`review-confirmation-panel__cancel`,onClick:l,children:e}),f=(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:c?`secondary`:`primary`,className:c?void 0:`review-confirmation-panel__danger`,disabled:a,"aria-busy":a,onClick:u,children:t});return(0,U.jsxs)(`div`,{className:`review-confirmation-panel${s||c?` review-confirmation-panel--compact`:``}${c?` review-confirmation-panel--condensed`:``}`,role:`alert`,children:[(0,U.jsxs)(`div`,{className:`review-confirmation-panel__copy`,children:[(0,U.jsx)(`strong`,{children:i}),c?(0,U.jsx)(le,{children:n}):(0,U.jsx)(`span`,{children:n})]}),r?(0,U.jsx)(`span`,{className:`review-confirmation-panel__error`,children:r}):null,(0,U.jsxs)(`div`,{className:`review-confirmation-panel__actions`,children:[c?f:d,c?d:f,a&&o?(0,U.jsx)(le,{role:`status`,children:o}):null]})]})}function un(){return(0,V.useContext)(rt)}function dn(e){let t=e.matchAll(/(?e[1]?[e[1].toLowerCase()]:[])))}function fn({value:e,onValueChange:t,onKeyDown:n,ref:r,...i}){let a=un(),o=(0,V.useRef)(null),s=(0,V.useRef)(null),c=(0,V.useRef)(null),l=(0,V.useId)(),[u,d]=(0,V.useState)(e.length),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(!1),[v,y]=(0,V.useState)(0),[b,x]=(0,V.useState)(0),[S,C]=(0,V.useState)({left:0,top:0,width:0}),w=e.slice(0,u).match(/(?:^|[\s(])@([a-zA-Z0-9-]*)$/)?.[1]?.toLowerCase(),T=a!==null&&w!==void 0&&!f&&!i.disabled,E=dn(e).length>10,D=m?.source===a&&m?.failed,O=g||m?.source!==a,k=(m?.source===a?m.candidates:[]).filter(e=>e.login.toLowerCase().includes(w??``)).slice(0,8),A=Math.min(b,Math.max(0,k.length-1));(0,V.useEffect)(()=>{o.current?.setCustomValidity(E?a?.copy.limit??``:``)},[a?.copy.limit,E]),(0,V.useEffect)(()=>{if(!T||!a)return;let e=!0,t=window.setTimeout(()=>{_(!0),a.load().then(t=>{e&&h({source:a,candidates:t,failed:!1})},()=>{e&&h({source:a,candidates:[],failed:!0})}).finally(()=>{e&&_(!1)})},150);return()=>{e=!1,window.clearTimeout(t)}},[T,v,a]),(0,V.useLayoutEffect)(()=>{if(!T)return;function e(){let e=o.current?.getBoundingClientRect();e&&C({left:e.left,width:e.width,top:Math.max(4,window.innerHeight-e.bottom<224?e.top-224:e.bottom)})}return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[T]);function j(n){if(w===void 0)return;let r=u-w.length-1,i=`@${n.login} `;t(e.slice(0,r)+i+e.slice(u)),p(!0);let a=r+i.length;window.requestAnimationFrame(()=>{o.current?.focus(),o.current?.setSelectionRange(a,a),d(a)})}function M(e,t){o.current=e,typeof t==`function`?t(e):t&&(t.current=e)}return(0,U.jsxs)(`div`,{className:`mention-input`,children:[(0,U.jsx)(`textarea`,{...i,ref:e=>M(e,r),value:e,"aria-autocomplete":a?`list`:void 0,"aria-controls":T?l:void 0,"aria-activedescendant":T&&k.length?`${l}-${A}`:void 0,onChange:e=>{d(e.currentTarget.selectionStart),p(!1),x(0),t(e.currentTarget.value)},onSelect:e=>d(e.currentTarget.selectionStart),onBlur:e=>{s.current?.contains(e.relatedTarget)||p(!0)},onKeyDown:e=>{if(T&&e.key===`Escape`)e.preventDefault(),e.stopPropagation(),p(!0);else if(T&&D&&!O&&e.key===`Tab`&&!e.shiftKey)e.preventDefault(),c.current?.focus();else{if(T&&!O&&!D&&k.length){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),x((A+(e.key===`ArrowDown`?1:-1)+k.length)%k.length);return}if((e.key===`Enter`||e.key===`Tab`)&&!e.nativeEvent.isComposing&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey){e.preventDefault();let t=k[A];t&&j(t);return}}n?.(e)}}}),E&&a?.copy.limit?(0,U.jsx)(`span`,{role:`alert`,children:a.copy.limit}):null,T&&a?(0,tt.createPortal)((0,U.jsx)(`div`,{ref:s,id:l,className:`mention-input__suggestions`,style:S,onBlur:e=>{e.relatedTarget!==o.current&&!e.currentTarget.contains(e.relatedTarget)&&p(!0)},onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),p(!0),o.current?.focus()):e.key===`Tab`&&e.shiftKey&&(e.preventDefault(),o.current?.focus())},children:O?(0,U.jsx)(`span`,{role:`status`,children:a.copy.loading}):D?(0,U.jsxs)(`div`,{role:`alert`,children:[a.copy.error,` `,(0,U.jsx)(`button`,{ref:c,type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{y(v+1),o.current?.focus()},children:a.copy.retry})]}):(0,U.jsxs)(`ul`,{role:`listbox`,"aria-label":a.copy.suggestions,children:[k.map((e,t)=>(0,U.jsx)(`li`,{id:`${l}-${t}`,role:`option`,"aria-selected":t===A,children:(0,U.jsxs)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>j(e),children:[`@`,e.login]})},e.githubId)),k.length?null:(0,U.jsx)(`li`,{role:`presentation`,children:a.copy.empty})]})}),document.body):null]})}function pn({anchorPoint:e,anchorRectangle:t,anchorSelector:n,layoutKey:r,preserveVerticalSide:i=!1}){let a=(0,V.useRef)(null),o=(0,V.useRef)(null),[s,c]=(0,V.useState)({left:e.x+12,top:e.y+12}),l=(0,V.useCallback)(()=>{let r=a.current,s=r?.parentElement;if(!r||!s)return;let l=r.offsetWidth,u=r.offsetHeight,d=s.clientWidth-l-8,f=s.clientHeight-u-8,p,m,h=(n?s.querySelector(n)??s.parentElement?.querySelector(n):null)?.getBoundingClientRect(),g=s.getBoundingClientRect(),_=h?{x:h.left-g.left,y:h.top-g.top,width:h.height,height:h.height}:t;if(_){let e=_.x+_.width+12,t=_.x-12-l,n=e+l<=s.clientWidth-8,r=t>=8,i=s.clientWidth-8-_.x-_.width,a=_.x-8;p=n?e:r?t:i>=a?e:t,m=_.y}else{let t=e.x+12,n=e.y+12;p=t+l<=s.clientWidth-8?t:e.x-12-l;let r=o.current,a=i&&r?.x===e.x&&r.y===e.y?r.side:n+u<=s.clientHeight-8?`below`:`above`;i&&(o.current={x:e.x,y:e.y,side:a}),m=a===`below`?n:e.y-12-u}let v={left:Math.max(8,Math.min(p,d)),top:Math.max(8,Math.min(m,f))};c(e=>e.left===v.left&&e.top===v.top?e:v)},[e,t,n,i]);return(0,V.useLayoutEffect)(()=>{l();let e=a.current,t=e?.parentElement;if(!e||!t||typeof ResizeObserver!=`function`)return;let r=new ResizeObserver(l);r.observe(e),r.observe(t);let i=n?t.querySelector(n)??t.parentElement?.querySelector(n):null;return i&&r.observe(i),window.addEventListener(`resize`,l),()=>{r.disconnect(),window.removeEventListener(`resize`,l)}},[n,r,l]),{cardRef:a,position:s}}function mn(){return typeof navigator<`u`&&/Mac/i.test(navigator.platform)}function hn(e,{allowPlainEnter:t=!1}={}){let n=e.isComposing||e.keyCode===229,r=mn()?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey,i=t&&!e.metaKey&&!e.ctrlKey;return e.key===`Enter`&&!e.shiftKey&&!e.altKey&&!n&&!e.repeat&&(r||i)}var gn=new TextEncoder;function _n({anchorPoint:e,bodyMaximumBytes:t,copy:n,creating:r,onSubmit:i,onDiscard:a}){let o=(0,V.useId)(),[s,c]=(0,V.useState)(``),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(!1),{cardRef:m,position:h}=pn({anchorPoint:e,layoutKey:`${l}:${d}`,preserveVerticalSide:!0}),g=gn.encode(s).length>t,_=s.trim()!==``&&!g&&!r&&!l,v=mn()?n.submitTooltipMacLabel:n.submitTooltipOtherLabel;(0,V.useEffect)(()=>{l?m.current?.querySelector(`.review-confirmation-panel__cancel`)?.focus({preventScroll:!0}):p.current&&m.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),p.current=l},[m,l]);function y(){r||(s.trim()===``?a():u(!0))}async function b(e){e.preventDefault(),_&&(await i(s)||f(!0))}return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-hidden":`true`,className:`review-comment-composer-backdrop`,onClick:y}),(0,U.jsx)(`section`,{ref:m,role:`dialog`,"aria-labelledby":o,className:`review-comment-composer`,style:{left:h.left,top:h.top},children:(0,U.jsxs)(`form`,{className:`review-comment-composer__form`,onSubmit:e=>{b(e)},onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),l?u(!1):y())},children:[(0,U.jsxs)(`header`,{className:`review-comment-composer__header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,id:o,children:n.composerHeading}),(0,U.jsx)(W,{icon:te,"aria-label":n.closeComposerLabel,description:n.closeComposerLabel,variant:`invisible`,type:`button`,disabled:r,onClick:y})]}),(0,U.jsx)(fn,{autoFocus:!0,"aria-label":n.composerLabel,placeholder:n.composerPlaceholder,value:s,rows:4,onValueChange:e=>{c(e),u(!1),f(!1)},onKeyDown:e=>{_&&hn(e.nativeEvent)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),g?(0,U.jsx)(`span`,{role:`alert`,className:`review-comment-composer__error`,children:n.bodyTooLongLabel}):null,d?(0,U.jsx)(me,{variant:`critical`,title:n.createErrorLabel,className:`review-comment-composer__banner`}):null,l?(0,U.jsx)(ln,{heading:n.discardHeading,description:n.discardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,condensed:!0,onCancel:()=>u(!1),onConfirm:a}):(0,U.jsxs)(`footer`,{className:`review-comment-composer__actions`,children:[(0,U.jsx)(H.Button,{type:`button`,size:`small`,disabled:r,onClick:y,children:n.closeComposerLabel}),(0,U.jsx)(H.Tooltip,{text:v,type:`description`,children:(0,U.jsx)(H.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!_,"aria-busy":r,children:n.submitLabel})}),r?(0,U.jsx)(le,{role:`status`,children:n.submittingLabel}):null]})]})})]})}function vn({blockedLabel:e,confirmingDiscard:t,replyDraft:n,replyBodyTooLong:r,replyFailed:i,replyDisabled:a,replying:o,submitDisabled:s=!1,copy:c,onKeepDraft:u,onDiscardDraft:d,onSubmit:f,onDraftChange:p}){let m=(0,V.useRef)(null),h=n.trim()!==``&&!r&&!a&&!o&&!s&&!t&&!e,g=mn()?c.replySubmitTooltipMacLabel:c.replySubmitTooltipOtherLabel;return(0,V.useLayoutEffect)(()=>{m.current&&(m.current.style.height=`auto`,m.current.style.height=n?`${Math.min(m.current.scrollHeight,120)}px`:`2.5rem`)},[n]),t?(0,U.jsx)(ln,{heading:c.discardHeading,description:c.threadDiscardPromptLabel,cancelLabel:c.keepLabel,confirmLabel:c.discardButtonLabel,compact:!0,onCancel:u,onConfirm:d}):e?(0,U.jsx)(`span`,{className:`review-thread-reply-form__blocked`,children:e}):(0,U.jsxs)(`form`,{className:`review-thread-reply-form`,onSubmit:e=>{e.preventDefault(),h&&f()},children:[(0,U.jsxs)(`div`,{className:`review-thread-reply-form__composer`,children:[(0,U.jsx)(fn,{ref:m,"aria-label":c.replyLabel,placeholder:c.replyPlaceholder,value:n,rows:1,disabled:a,onValueChange:p,onKeyDown:e=>{h&&hn(e.nativeEvent,{allowPlainEnter:!0})&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),(0,U.jsx)(H.Tooltip,{text:g,type:`description`,children:(0,U.jsx)(`button`,{type:`submit`,className:`review-thread-reply-form__submit`,disabled:!h,"aria-label":c.replySubmitLabel,"aria-busy":o,children:(0,U.jsx)(l,{size:16})})})]}),r?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:c.bodyTooLongLabel}):null,i?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:c.replyErrorLabel}):null,o?(0,U.jsx)(le,{role:`status`,children:c.replyingLabel}):null]})}function yn({comment:e}){let t=e.body??``,n=new Set(e.mentions?.map(e=>e.login.toLowerCase())??[]),r=t.matchAll(/(?({content:e,emoji:Sn(e)}));function wn(e,t=0,n=0){if(t!==0||n!==0)return{x:t,y:n};let r=e.getBoundingClientRect();return{x:r.left+r.width/2,y:r.top+r.height/2}}function Tn({comment:e,mutation:t,actionsDisabled:n,controlsHidden:r=!1,copy:i,onAdd:a,onRemove:o,onBurst:s}){let c=(0,V.useId)(),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(`outside-bottom`),v=t!==null&&(t.kind===`add-reaction`||t.kind===`remove-reaction`)&&t.commentId===e.id,y=e.reactions.flatMap(e=>{if(!m||e.content!==m.content)return[e];let t=e.count+Number(m.viewerHasReacted)-Number(e.viewerHasReacted);return t>0?[{...e,count:t,viewerHasReacted:m.viewerHasReacted}]:[]});m?.viewerHasReacted&&!e.reactions.some(({content:e})=>e===m.content)&&y.push({content:m.content,count:1,viewerHasReacted:!0});async function b(r,i){if(n||t!==null||p.current)return;let c=e.reactions.find(e=>e.content===r)?.viewerHasReacted??!1;p.current=!0,u(!1),h({content:r,viewerHasReacted:!c});try{if(!c){let e=Cn.find(e=>e.content===r);e&&s(e.emoji,i.x,i.y)}let e=c?await o(r):await a(r);u(!e)}catch{u(!0)}finally{p.current=!1,h(null)}}function x(e,t){b(e,wn(t.currentTarget,t.clientX,t.clientY))}let S=(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:g,disabled:n,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-comment-reactions__menu-trigger`,variant:`subtle`,"aria-label":i.addReactionLabel,"aria-describedby":c,"aria-busy":v||m!==null,leadingVisual:(0,U.jsx)(w,{size:16}),onClick:e=>{f(!0);let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0),a=Cn.length*36+16;_(rr?`outside-top`:`outside-bottom`)},children:``}),(0,U.jsx)(H.ActionMenu.Overlay,{"aria-label":i.addReactionLabel,children:Cn.map(e=>(0,U.jsx)(H.ActionMenu.Item,{value:e.content,leadingVisual:(0,U.jsx)(`span`,{className:`review-comment-reactions__picker-emoji`,children:e.emoji}),onClick:t=>x(e.content,t),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),b(e.content,wn(t.currentTarget)))},children:i.reactionLabels[e.content]},e.content))})]});return r&&!l?null:(0,U.jsxs)(`div`,{className:`review-comment-reactions__layout`,children:[r?null:(0,U.jsxs)(`div`,{className:`review-comment-reactions`,children:[y.map(e=>{let r=Cn.find(({content:t})=>t===e.content);if(!r)return null;let a=(e.count===1?i.reactionCountOneLabel:i.reactionCountOtherLabel).replace(`%{reaction}`,i.reactionLabels[e.content]).replace(`%{count}`,e.count.toString());return(0,U.jsxs)(H.Button,{size:`small`,"aria-label":a,title:a,"aria-pressed":e.viewerHasReacted,disabled:n,"aria-busy":m?.content===e.content||v&&`content`in t&&t.content===e.content,className:e.viewerHasReacted?`review-comment-reaction--selected`:void 0,onClick:t=>x(e.content,t),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,children:r.emoji}),(0,U.jsx)(nt,{"aria-hidden":`true`,children:e.count})]},e.content)}),n?(0,U.jsxs)(`div`,{title:i.addReactionLabel,children:[S,(0,U.jsx)(le,{id:c,children:i.addReactionLabel})]}):(0,U.jsx)(H.Tooltip,{id:c,text:i.addReactionLabel,type:`description`,className:`review-comment-reactions__tooltip${d?` review-comment-reactions__tooltip--suppressed`:``}`,children:(0,U.jsx)(`div`,{onMouseEnter:e=>{e.currentTarget.querySelector(`[aria-expanded="true"]`)||f(!1)},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||f(!1)},children:S})})]}),l?(0,U.jsx)(`span`,{role:`alert`,className:`review-comment-reactions__error`,children:i.reactionErrorLabel}):null]})}function En({comment:e,mutation:t,copy:n,editing:r,editDraft:i,editBodyTooLong:a,editFailed:s,confirmingEditDiscard:c,saving:l,confirmingDelete:u,deleting:d,deleteFailed:f,actionsDisabled:p,onStartEdit:m,onEditDraftChange:h,onSaveEdit:g,onCancelEdit:_,onKeepEdit:v,onDiscardEdit:y,onRequestDelete:b,onCancelDelete:x,onDelete:S,onAddReaction:C,onRemoveReaction:w,onBurstReaction:T,onMarkUnread:E,markUnreadDisabled:D=!1}){let k=(0,V.useId)(),A=(0,V.useRef)(null),M=(0,V.useRef)(!1),[N,P]=(0,V.useState)(`outside-bottom`),F=e.author.name||`@${e.author.login}`,I=n.commentActionsLabel.replace(`%{author}`,`@${e.author.login}`),L=p&&(!E||D),R=!!(e.body&&e.viewerCanEdit),z=!!(e.body&&e.viewerCanDelete);return(0,V.useEffect)(()=>{c?A.current?.querySelector(`.review-confirmation-panel button`)?.focus({preventScroll:!0}):M.current&&A.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),M.current=c},[c]),(0,U.jsxs)(`article`,{className:`review-thread-message`,"data-review-message-id":e.id,children:[(0,U.jsx)(bn,{visual:(0,U.jsx)(ot,{src:e.author.avatarUrl,size:28}),author:F,metadata:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(ht,{value:e.createdAt}),e.editedAt?(0,U.jsx)(`span`,{children:n.editedLabel}):null]}),children:E||R||z?L?(0,U.jsxs)(`div`,{title:I,children:[(0,U.jsx)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,disabled:!0,children:(0,U.jsx)(H.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":I,"aria-describedby":k,leadingVisual:(0,U.jsx)(o,{size:16}),children:``})}),(0,U.jsx)(le,{id:k,children:I})]}):(0,U.jsx)(H.Tooltip,{id:k,text:I,type:`description`,children:(0,U.jsx)(`div`,{children:(0,U.jsxs)(H.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:N,children:[(0,U.jsx)(H.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":I,"aria-describedby":k,leadingVisual:(0,U.jsx)(o,{size:16}),onClick:e=>{let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0);P(r<(E?128:88)&&i>r?`outside-top`:`outside-bottom`)},children:``}),(0,U.jsxs)(H.ActionMenu.Overlay,{"aria-label":I,children:[E?(0,U.jsx)(H.ActionMenu.Item,{value:`mark-unread`,disabled:D,leadingVisual:(0,U.jsx)(j,{size:16}),onClick:()=>{D||E()},onKeyDown:e=>{!D&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),E())},children:n.markUnreadLabel}):null,R?(0,U.jsx)(H.ActionMenu.Item,{value:`edit`,disabled:p,leadingVisual:(0,U.jsx)(ie,{size:16}),onClick:m,onKeyDown:e=>{!p&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),m())},children:n.editLabel}):null,z&&(E||R)?(0,U.jsx)(`li`,{role:`separator`,className:`review-thread-message__menu-divider`}):null,z?(0,U.jsx)(H.ActionMenu.Item,{value:`delete`,disabled:p||t!==null,className:`review-thread-message__delete-item`,leadingVisual:(0,U.jsx)(O,{size:16}),onClick:b,onKeyDown:e=>{!p&&t===null&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),b())},children:n.deleteLabel}):null]})]})})}):null}),r?(0,U.jsxs)(`form`,{ref:A,className:`review-thread-message__edit`,onSubmit:e=>{e.preventDefault(),c||g()},children:[(0,U.jsx)(fn,{autoFocus:!0,"aria-label":n.editCommentLabel,value:i,rows:3,onValueChange:h}),a?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.bodyTooLongLabel}):null,s?(0,U.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.editErrorLabel}):null,c?(0,U.jsx)(ln,{heading:n.discardHeading,description:n.threadDiscardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,compact:!0,onCancel:v,onConfirm:y}):(0,U.jsxs)(`div`,{className:`review-thread-message__actions`,children:[(0,U.jsx)(H.Button,{type:`button`,size:`small`,disabled:l,onClick:_,children:n.cancelEditLabel}),(0,U.jsx)(H.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:i.trim()===``||a||t!==null||l,"aria-busy":l,children:n.saveEditLabel}),l?(0,U.jsx)(le,{role:`status`,children:n.savingEditLabel}):null]})]}):u?(0,U.jsx)(ln,{heading:n.deleteHeading,description:n.deletePromptLabel,errorLabel:f?n.deleteErrorLabel:void 0,cancelLabel:n.cancelEditLabel,confirmLabel:n.confirmDeleteLabel,loading:d,loadingAnnouncement:n.deletingLabel,compact:!0,onCancel:x,onConfirm:S}):(0,U.jsx)(`p`,{className:e.body?`review-thread-message__body`:`review-thread-message__body review-thread-message__body--deleted`,children:e.body?(0,U.jsx)(yn,{comment:e}):n.deletedCommentLabel}),e.body?(0,U.jsx)(Tn,{comment:e,mutation:t,actionsDisabled:p,controlsHidden:r||u,copy:n,onAdd:C,onRemove:w,onBurst:T}):null]})}function Dn({position:e,anchored:t,className:n,style:r,...i}){return(0,U.jsx)(`section`,{...i,role:`dialog`,className:`review-thread-conversation review-thread-conversation--${t?`anchored`:`docked`}${n?` ${n}`:``}`,style:{"--review-thread-left":`${e.left}px`,"--review-thread-top":`${e.top}px`,...r}})}function On(){let e=(0,V.useRef)(null),t=(0,V.useRef)([]),n=(0,V.useRef)(new Map),[r,i]=(0,V.useState)(!1),a=(0,V.useCallback)((e,n,r)=>{if(window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)return;let a=4+Math.floor(Math.random()*5),o=performance.now();for(let i=0;i{if(!r)return;let a=e.current,o=a?.getContext(`2d`);if(!a||!o){console.error(`Emoji reaction burst could not create a canvas context.`),t.current=[];let e=requestAnimationFrame(()=>i(!1));return()=>cancelAnimationFrame(e)}let s=a,c=o,l;function u(){let e=window.devicePixelRatio||1;s.width=Math.round(window.innerWidth*e),s.height=Math.round(window.innerHeight*e),c.setTransform(e,0,0,e,0,0)}function d(e,t){let r=Math.round(t),i=`${e}_${r}`;if(n.current.has(i))return n.current.get(i)??null;let a=document.createElement(`canvas`);a.width=r*2,a.height=r*2;let o=a.getContext(`2d`);return o?(o.font=`${r}px serif`,o.textAlign=`center`,o.textBaseline=`middle`,o.fillText(e,r,r),n.current.set(i,a),a):(console.error(`Emoji reaction burst could not draw an emoji.`),n.current.set(i,null),null)}function f(e){c.clearRect(0,0,window.innerWidth,window.innerHeight);let n=[];for(let r of t.current){if(e10&&(r.opacity-=.04),r.opacity<=0)continue;let t=d(r.emoji,r.size);t&&(c.globalAlpha=r.opacity,c.drawImage(t,r.x-t.width/2,r.y-t.height/2)),n.push(r)}c.globalAlpha=1,t.current=n,n.length>0?l=requestAnimationFrame(f):i(!1)}return u(),window.addEventListener(`resize`,u),l=requestAnimationFrame(f),()=>{cancelAnimationFrame(l),window.removeEventListener(`resize`,u)}},[r]),{burst:a,canvas:r?(0,tt.createPortal)((0,U.jsx)(`canvas`,{ref:e,className:`review-emoji-burst`,"aria-hidden":`true`}),document.body):null}}var kn=new TextEncoder;function An({thread:e,bodyMaximumBytes:t,mutation:n,onClose:r,onDraftStateChange:i,onReply:a,onEdit:o,onDelete:s,onResolve:c,onReopen:l}){let[u,d]=(0,V.useState)(``),[f,p]=(0,V.useState)(!1),[m,h]=(0,V.useState)(null),[g,_]=(0,V.useState)(``),[v,y]=(0,V.useState)(``),[b,x]=(0,V.useState)(!1),[S,C]=(0,V.useState)(!1),[w,T]=(0,V.useState)(null),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(!1),[A,j]=(0,V.useState)(!1),M=u.trim()!==``||m!==null,N=kn.encode(u).length>t,P=kn.encode(g).length>t,F=e.root.resolvedAt!==null,I=e.root.deletedAt!==null||F;(0,V.useEffect)(()=>(i(M),()=>i(!1)),[M,i]);function L(){n||(u.trim()===``&&g===v?r():(C(!1),j(!0)))}function R(){d(``),h(null),_(``),y(``),C(!1),j(!1),i(!1),r()}async function z(){u.trim()===``||N||n||(await a(u)?(d(``),p(!1)):p(!0))}function B(e){d(e),p(!1),j(!1)}function ee(e){e.body&&(h(e.id),_(e.body),y(e.body),x(!1),T(null),D(!1))}function te(e){_(e),x(!1),C(!1),j(!1)}async function ne(e){g.trim()===``||P||n||(await o(e,g)?(h(null),_(``),y(``),C(!1),x(!1)):x(!0))}function re(){g===v?ie():C(!0)}function ie(){h(null),_(``),y(``),x(!1),C(!1),j(!1)}function ae(e){T(e),D(!1)}function oe(){T(null),D(!1)}async function se(e){n||(await s(e)?oe():D(!0))}async function H(){if(n||M)return;let e=F?await l():await c();k(!e)}return{state:{replyDraft:u,replyFailed:f,editingCommentId:m,editDraft:g,editFailed:b,confirmingEditDiscard:S,confirmingDeleteId:w,deleteFailed:E,resolutionFailed:O,confirmingDiscard:A,draftActive:M,replyBodyTooLong:N,editBodyTooLong:P,resolved:F,replyBlocked:I},actions:{requestDismissal:L,discardAndClose:R,keepDraft:()=>j(!1),submitReply:z,changeReplyDraft:B,startEdit:ee,changeEditDraft:te,saveEdit:ne,cancelEdit:re,keepEdit:()=>C(!1),discardEdit:ie,requestDelete:ae,cancelDelete:oe,deleteComment:se,changeResolution:H}}}function jn(e){let t=e.closest(`[data-testid="ActionMenu"]`);if(!t)return;let n=e.getBoundingClientRect(),r=e.closest(`.review-shell`)?.getBoundingClientRect(),i=Math.max(0,r?.top??0),a=Math.min(window.innerHeight,r?.bottom??window.innerHeight);t.style.setProperty(`--review-thread-menu-room-top`,`${Math.max(0,n.top-i-8)}px`),t.style.setProperty(`--review-thread-menu-room-bottom`,`${Math.max(0,a-n.bottom-8)}px`)}function Mn({thread:e,anchorPoint:t,bodyMaximumBytes:n,mutation:r,copy:i,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d,onAddReaction:f,onRemoveReaction:p,onMarkRead:m,onMarkUnread:h}){let g=(0,V.useId)(),_=(0,V.useRef)(null),v=(0,V.useRef)(0),y=(0,V.useRef)(e.root.activityVersion),b=(0,V.useRef)(null),x=(0,V.useRef)(!1),S=(0,V.useRef)(!1),C=(0,V.useRef)(!1),[w,T]=(0,V.useState)(!1),[E,D]=(0,V.useState)(!1),[O,k]=(0,V.useState)(!1),[A,j]=(0,V.useState)(!1),{burst:M,canvas:N}=On(),{state:P,actions:F}=An({thread:e,bodyMaximumBytes:n,mutation:r,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d}),I={x:12,y:12},L=[e.root,...e.replies],{cardRef:R,position:z}=pn({anchorPoint:t??I,...t?{anchorSelector:`[data-review-thread-id="${e.root.id}"]`,anchorRectangle:{x:t.x-16,y:t.y-16,width:32,height:32}}:{},layoutKey:[P.confirmingDiscard,P.confirmingEditDiscard,P.replyFailed,P.editFailed,P.deleteFailed,P.resolutionFailed,P.editingCommentId,P.confirmingDeleteId,P.resolved,w,O,e.replies.length,e.participants.length,L.map(e=>e.reactions.length).join(`,`)].join(`:`)}),B=P.replyBlocked?e.root.deletedAt?i.deletedReplyBlockedLabel:e.root.resolvedBy?i.resolvedByLabel.replace(`%{author}`,e.root.resolvedBy.name||`@${e.root.resolvedBy.login}`):i.resolvedReplyBlockedLabel:null,ee=(0,V.useCallback)(()=>{R.current?.querySelector(`.review-thread-conversation__close`)?.focus({preventScroll:!0})},[R]);(0,V.useEffect)(()=>{if(P.confirmingDiscard)R.current?.querySelector(`.review-thread-conversation__footer button`)?.focus({preventScroll:!0});else if(C.current){let e=P.editingCommentId===null?`.review-thread-reply-form textarea`:`.review-thread-message__edit textarea`;R.current?.querySelector(e)?.focus({preventScroll:!0})}C.current=P.confirmingDiscard},[R,P.confirmingDiscard,P.editingCommentId]),(0,V.useEffect)(()=>{let e=document.activeElement;return _.current=e instanceof HTMLElement?e:null,ee(),()=>{_.current?.isConnected&&_.current.focus()}},[ee]),(0,V.useEffect)(()=>{let t=y.current;e.unread&&b.current!==t&&(b.current=t,x.current=!0,D(!0),m(t).then(e=>T(!e)).catch(()=>T(!0)).finally(()=>{x.current=!1,D(!1)}))},[m,e.unread]);async function ne(){if(!(x.current||S.current||r!==null)){b.current=y.current,S.current=!0,j(!0),k(!1);try{let e=await h();k(!e),e&&T(!1)}catch{k(!0)}finally{S.current=!1,j(!1)}}}return(0,V.useEffect)(()=>{function e(){P.confirmingDiscard?F.keepDraft():P.confirmingEditDiscard?F.keepEdit():F.requestDismissal()}function t(t){t.key!==`Escape`||t.defaultPrevented||t.isComposing||R.current?.querySelector(`[role="menu"]`)||t.target instanceof Element&&t.target.closest(`[role="menu"], [role="dialog"], dialog`)||(t.preventDefault(),e())}function n(){let t=document.activeElement;R.current?.querySelector(`[role="menu"]`)||t instanceof Element&&(t.closest(`[role="menu"]`)||t.closest(`[role="dialog"], dialog`)&&!R.current?.contains(t))||e()}return document.addEventListener(`keydown`,t),window.addEventListener(`replica:review-dismiss`,n),()=>{document.removeEventListener(`keydown`,t),window.removeEventListener(`replica:review-dismiss`,n)}},[F,R,P.confirmingDiscard,P.confirmingEditDiscard]),(0,U.jsxs)(Dn,{ref:R,"aria-labelledby":g,anchored:!!t,position:z,onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||e.nativeEvent.isComposing||e.target instanceof Element&&e.target.closest(`[role="menu"]`)||(e.preventDefault(),P.confirmingDiscard?F.keepDraft():P.confirmingEditDiscard?F.keepEdit():F.requestDismissal())},children:[(0,U.jsxs)(`div`,{className:`review-thread-conversation__layout`,children:[(0,U.jsxs)(`header`,{className:`review-thread-conversation__header`,children:[(0,U.jsx)(H.Heading,{as:`h2`,size:`6`,id:g,children:i.threadHeading}),(0,U.jsx)(H.Button,{size:`small`,disabled:P.draftActive||r!==null,"aria-busy":r!==null&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`),onClick:()=>{F.changeResolution()},children:P.resolved?i.reopenLabel:i.resolveLabel}),r&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`)?(0,U.jsx)(le,{role:`status`,children:P.resolved?i.reopeningLabel:i.resolvingLabel}):null,(0,U.jsx)(W,{icon:te,"aria-label":i.backToCommentsLabel,title:i.backToCommentsLabel,variant:`invisible`,className:`review-thread-conversation__close`,onClick:F.requestDismissal})]}),P.resolutionFailed?(0,U.jsx)(me,{variant:`critical`,title:i.resolutionErrorLabel,className:`review-thread-conversation__banner`}):null,w?(0,U.jsx)(me,{variant:`critical`,title:i.readErrorLabel,className:`review-thread-conversation__banner`}):null,O?(0,U.jsx)(me,{variant:`critical`,title:i.markUnreadErrorLabel,className:`review-thread-conversation__banner`}):null,(0,U.jsx)(`div`,{className:`review-thread-conversation__messages`,onClickCapture:e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`button[data-testid="ActionMenu-button"]`);t&&e.currentTarget.contains(t)&&(v.current=e.currentTarget.scrollTop,jn(t))},onScroll:e=>{let t=e.currentTarget.scrollTop,n=t-v.current;if(v.current=t,n===0)return;let r=e.currentTarget.getBoundingClientRect();e.currentTarget.querySelectorAll(`[role="menu"]`).forEach(e=>{let t=e.closest(`[data-testid="ActionMenu"]`)?.querySelector(`button[data-testid="ActionMenu-button"]`);if(!t)return;let i=t.getBoundingClientRect();if(r.height>0&&(i.bottom<=r.top||i.top>=r.bottom)){let n=e.contains(document.activeElement);t.click(),n&&ee();return}let a=Number.parseFloat(e.style.top);Number.isFinite(a)&&(e.style.top=`${a-n}px`),jn(t)})},children:L.map(e=>(0,U.jsx)(En,{comment:e,mutation:r,copy:i,editing:P.editingCommentId===e.id,editDraft:P.editingCommentId===e.id?P.editDraft:``,editBodyTooLong:P.editingCommentId===e.id&&P.editBodyTooLong,editFailed:P.editingCommentId===e.id&&P.editFailed,confirmingEditDiscard:P.editingCommentId===e.id&&P.confirmingEditDiscard,saving:r?.kind===`edit`&&r.commentId===e.id,confirmingDelete:P.confirmingDeleteId===e.id,deleting:r?.kind===`delete`&&r.commentId===e.id,deleteFailed:P.confirmingDeleteId===e.id&&P.deleteFailed,actionsDisabled:r!==null&&r.kind!==`add-reaction`&&r.kind!==`remove-reaction`||P.confirmingDiscard||P.confirmingDeleteId!==null||P.replyDraft.trim()!==``||P.editingCommentId!==null&&P.editingCommentId!==e.id,onStartEdit:()=>F.startEdit(e),onEditDraftChange:F.changeEditDraft,onSaveEdit:()=>{F.saveEdit(e.id)},onCancelEdit:F.cancelEdit,onKeepEdit:F.keepEdit,onDiscardEdit:F.discardEdit,onRequestDelete:()=>F.requestDelete(e.id),onCancelDelete:F.cancelDelete,onDelete:()=>{F.deleteComment(e.id)},onAddReaction:t=>f(e.id,t),onRemoveReaction:t=>p(e.id,t),onBurstReaction:M,onMarkUnread:e.kind===`root`?()=>void ne():void 0,markUnreadDisabled:E||A||r!==null},e.id))}),(0,U.jsx)(`div`,{className:`review-thread-conversation__footer${B&&!P.confirmingDiscard?` review-thread-conversation__footer--blocked`:``}`,children:(0,U.jsx)(vn,{blockedLabel:B,confirmingDiscard:P.confirmingDiscard,replyDraft:P.replyDraft,replyBodyTooLong:P.replyBodyTooLong,replyFailed:P.replyFailed,replyDisabled:r!==null||P.editingCommentId!==null,replying:r?.kind===`reply`&&r.commentId===e.root.id,copy:i,onKeepDraft:F.keepDraft,onDiscardDraft:F.discardAndClose,onSubmit:()=>{F.submitReply()},onDraftChange:F.changeReplyDraft})})]}),N]})}function Nn({selectionNotice:e,rateLimitNotice:t,composer:n,conversation:r}){return(0,U.jsxs)(U.Fragment,{children:[e||t?(0,U.jsxs)(`div`,{className:`canvas-selection-notice`,role:`alert`,children:[e?(0,U.jsx)(`div`,{children:e}):null,t?(0,U.jsx)(`div`,{children:t}):null]}):null,n?(0,U.jsx)(`div`,{className:`canvas-composer-shell`,children:(0,U.jsx)(_n,{...n})}):null,r?(0,U.jsx)(`div`,{className:`canvas-conversation-shell`,children:(0,U.jsx)(Mn,{...r},r.thread.root.id)}):null]})}function Pn({identity:e,enabled:t,ready:n,bridgeProblem:r,token:i}){let[a,o]=(0,V.useState)(``),[s,c]=(0,V.useState)(!1),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(e);(0,V.useLayoutEffect)(()=>(p.current=e,()=>{p.current=``}),[e]),(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{o(``),c(!1),u(!1),f(!1)},0);return()=>{window.clearTimeout(e)}},[e,t]);async function m(){let t=e;o(``),c(!0);try{await $(`/api/commenting/fix`,i,{method:`POST`}),p.current===t&&f(!0)}catch(e){p.current===t&&o(e instanceof Error?e.message:String(e))}finally{p.current===t&&c(!1)}}return{visible:t&&!n&&!l&&!!r,error:a,busy:s,requested:d,onFix:()=>void m(),onDismiss:()=>u(!0)}}function Fn({preference:e,disabled:t=!1}){let n=(0,V.useId)(),r=(0,V.useId)(),i=(0,V.useId)(),a=(0,V.useId)();return(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":n,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:n,children:K.settings}),(0,U.jsxs)(`div`,{className:`canvas-publish-settings__option`,children:[(0,U.jsx)(`label`,{id:r,htmlFor:i,children:K.alwaysCommit}),(0,U.jsx)(Z,{className:`canvas-publish-settings__toggle`,id:i,"aria-labelledby":r,"aria-describedby":e.error?a:void 0,checked:e.remember===!0,disabled:e.loading||e.remember===null,"aria-disabled":e.saving||t||void 0,onChange:n=>{!e.saving&&!t&&e.save(n)},size:`small`})]}),e.error?(0,U.jsxs)(`div`,{id:a,className:`canvas-publish-settings__error`,children:[(0,U.jsx)(me,{title:e.error,variant:`critical`,layout:`compact`}),(0,U.jsx)(H.Button,{size:`small`,disabled:e.loading||e.saving,onClick:()=>void e.retry(),children:K.retrySettings})]}):null]})}function In(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ln(e){return!In(e)||typeof e.pathname!=`string`||typeof e.search!=`string`||typeof e.hash!=`string`?null:{pathname:e.pathname,search:e.search,hash:e.hash}}function Rn({config:e,frameRef:t,onRouteChange:n,status:r,onStatusChange:i,onSelectHub:a,onConnect:o,onDisconnected:s,connectionButtonRef:c,connecting:l=!1,publication:u,publicationBusy:d=!1,dirty:f=!1,onPublish:p,onRetryPublication:m,publishPreference:h,open:g,onClose:_}){let[v,y]=(0,V.useState)({identity:``,items:[]}),b=r?.prototype?.repositoryId,x=r?.prototype?.id,S=r?.state===`connected`,C=r?.hubOrigin,w=(0,V.useMemo)(()=>({load:async()=>{if(!S||!C)throw Error(G.mentionSuggestionsError);return sn.parse(await $(`/api/hub/mention-candidates?repositoryId=${b}&prototypeId=${x}`,e.token)).candidates},copy:{suggestions:G.mentionSuggestions,error:G.mentionSuggestionsError,loading:G.mentionSuggestionsLoading,empty:G.mentionSuggestionsEmpty,retry:bt.retryLabel,limit:G.mentionLimit}}),[e.token,S,C,b,x]),[T,E]=(0,V.useState)(!1),[D,O]=(0,V.useState)(yt),[k,A]=(0,V.useState)(!0),[j,N]=(0,V.useState)(null),[P,F]=(0,V.useState)(null),[I,R]=(0,V.useState)(``),[z,B]=(0,V.useState)(``),[ee,te]=(0,V.useState)(``),[ne,re]=(0,V.useState)(!1),[ie,ae]=(0,V.useState)(!1),[oe,se]=(0,V.useState)(!1),[ce,le]=(0,V.useState)(r?.discovery?.mismatch&&r.discovery.origin||r?.hubOrigin||``),[W,ue]=(0,V.useState)(!1),[de,fe]=(0,V.useState)(!1),[pe,K]=(0,V.useState)(``),[he,ge]=(0,V.useState)(``),[_e,ve]=(0,V.useState)(``),[ye,be]=(0,V.useState)(!1),[xe,q]=(0,V.useState)(null),[Se,Ce]=(0,V.useState)(!1),[we,Te]=(0,V.useState)(new Map),[Ee,De]=(0,V.useState)(!1),[Oe,ke]=(0,V.useState)(``),[J,Ae]=(0,V.useState)(null),[X,Me]=(0,V.useState)(null),[Ne,Pe]=(0,V.useState)(null),[Fe,Ie]=(0,V.useState)(!1),[Le,Re]=(0,V.useState)(null),ze=(0,V.useRef)(!1),Be=(0,V.useRef)(0),Ve=(0,V.useRef)(!1),He=(0,V.useRef)(``),Ue=(0,V.useRef)(null),We=(0,V.useRef)(``),Ge=(0,V.useRef)(g),Ke=(0,V.useRef)(void 0),qe=`${r?.hubOrigin??``}/${r?.repository??``}/${r?.branch??``}/${r?.state===`connected`?r.prototype?.id??``:``}`,Je=r?r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``:null,Ye=(0,V.useRef)(Je),Xe=r?.state,Ze=Xe===`unavailable`||Xe===`denied`,Qe=(0,V.useRef)(Xe);(0,V.useEffect)(()=>{if(Je===null||Ye.current===Je)return;let e=window.setTimeout(()=>{le(Je),Ye.current=Je},0);return()=>window.clearTimeout(e)},[Je]),(0,V.useEffect)(()=>{if(!Xe||Qe.current===Xe)return;if(Xe!==`connected`&&Xe!==`undiscovered`){Qe.current=Xe;return}let e=window.setTimeout(()=>{se(!1),Qe.current=Xe},0);return()=>window.clearTimeout(e)},[Xe]);let $e=Pn({identity:qe,enabled:r?.repositoryAuthorized===!0,ready:Ee,bridgeProblem:Oe,token:e.token}),et=(0,V.useMemo)(()=>v.identity===qe?v.items:[],[v,qe]),rt=(0,V.useMemo)(()=>St(et),[et]),ot=(0,V.useMemo)(()=>{let e=new Map(rt.flatMap(e=>e.participants.map(e=>[e.login.toLowerCase(),e])));return Array.from(e.values()).sort((e,t)=>(e.name||e.login).localeCompare(t.name||t.login))},[rt]),st=(0,V.useMemo)(()=>{let e=new Map;for(let t of rt){let n=t.root.id,r=we.get(n);if(r)e.set(n,{commentId:n,status:`resolved`,point:r,rect:r.rect});else if(Ee){let r=t.root.anchor.route;e.set(n,{commentId:n,status:j&&(r.pathname!==j.pathname||r.search!==j.search||r.hash!==j.hash)?`route-mismatch`:`missing`})}}return e},[Ee,we,j,rt]),Z=r?.state===`connected`?rt.find(e=>e.root.id===P):null,Q=r?.state===`connected`?r.prototype:null,ut=r?.state===`disconnected`||r?.state===`pairing`||r?.state===`unconfigured`,dt=Q?.build?.author.login,ft=dt&&/^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}(?:\[bot\])?$/i.test(dt)?`https://github.com/${encodeURIComponent(dt)}`:null,pt=Q?.build?.author.name?.trim()||(ft?dt:null)||G.unknownCommitAuthor,mt=Q?.canEdit&&Q.registered,ht=Q?.id,gt=Q?.build??null,xt=(0,V.useMemo)(()=>Q?rt.filter(e=>on(e,{filters:D,viewerLogin:Q.viewerLogin,selectedBuildNumber:gt?.number,route:j})):rt,[gt?.number,D,j,Q,rt]),Ct=xt.length,wt=xt.some(e=>e.unread),Tt=!!(gt&&r?.commitSha&&r.commitSha===gt.commitSha),Et=X!==null||Se||Le!==null,Dt=g&&!T,Ot=typeof document>`u`?null:document.getElementById(`canvas-review-controls`),kt=X?X.kind===`element`?{x:X.rect.x-X.viewport.scrollX+X.rect.width*X.elementOffset.x,y:X.rect.y-X.viewport.scrollY+X.rect.height*X.elementOffset.y}:ct(X,{x:X.rect.x-X.viewport.scrollX,y:X.rect.y-X.viewport.scrollY,width:X.rect.width,height:X.rect.height}).point:null;(0,V.useLayoutEffect)(()=>(We.current=qe,()=>window.clearTimeout(Ke.current)),[qe]),(0,V.useLayoutEffect)(()=>{g&&Ue.current?.focus({preventScroll:!0})},[g]),(0,V.useEffect)(()=>{let e=Ge.current;if(Ge.current=g,!g||e||!T)return;if(Se){_();return}let t=window.setTimeout(()=>{E(!1),F(null)},0);return()=>window.clearTimeout(t)},[T,Se,_,g]),(0,V.useEffect)(()=>{if(!g)return;function e(e){e.key!==`Escape`||e.defaultPrevented||e.target instanceof Element&&e.target.closest(`[role="dialog"], dialog, [role="menu"]`)||(e.preventDefault(),_())}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[g,_]);let At=ye&&xe===qe,jt=JSON.stringify(e.pickAndPolish||e.improvementNotesDemo?[]:rt.slice(0,200).map(({root:e})=>({id:e.id,anchor:e.anchor}))),Mt=(0,V.useCallback)(async()=>{if(!ht||Ve.current)return;let t=qe,n=Be.current;re(!0);try{let r=[],i=null;for(let t=0;t<100;t+=1){let n=rn.parse(await $(`/api/hub/comments${i?`?cursor=${encodeURIComponent(i)}`:``}`,e.token));if(r.push(...n.comments),i=n.nextCursor,!i)break;if(t===99)throw Error(`Too many review comment pages.`)}if(We.current!==t||Be.current!==n)return;y({identity:t,items:r}),ae(!1),R(``)}catch(e){We.current===t&&Be.current===n&&(ae(!0),R(e instanceof Error?e.message:String(e)))}finally{We.current===t&&Be.current===n&&re(!1)}},[e.token,ht,qe]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{y({identity:qe,items:[]}),E(!1),O(yt),A(!0),N(null),F(null),Ce(!1),be(!1),q(null),K(``),ge(``),Re(null),ze.current=!1,Ve.current=!1,Be.current+=1,Te(new Map),De(!1),Ae(null),Me(null),Pe(null),B(``),ae(!1),ht&&Mt()},0);return()=>window.clearTimeout(e)},[qe,ht,Mt]),(0,V.useEffect)(()=>{if(!ht)return;let e=window.setInterval(()=>void Mt(),3e4);return()=>window.clearInterval(e)},[ht,Mt]),(0,V.useEffect)(()=>{if(!ht)return;let t=new AbortController,n,r=5e3;async function i(){let a=Date.now();try{let n=await fetch(`/api/hub/events`,{headers:{"X-Replica-Canvas-Token":e.token},signal:t.signal});if(!n.ok||!n.body)throw Error(`Live review connection unavailable.`);Ie(!1);let r=n.body.getReader(),i=new TextDecoder,a=``;for(;!t.signal.aborted;){let{value:e,done:t}=await r.read();if(t)throw Error(`Live review connection closed.`);a+=i.decode(e,{stream:!0});let n=a.split(`
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["renderer-improvement-notes-prototype.js","renderer-rolldown-runtime.js","renderer-vendor.js","renderer-prototype-canvas-improvement-threads.js","renderer-improvement-notes-vendor.js","renderer-prototype-canvas-thread-sample.js"])))=>i.map(i=>d[i]);
+import{r as e,t}from"./renderer-rolldown-runtime.js";import{A as n,B as r,C as i,D as a,E as o,F as s,G as c,H as l,I as u,J as d,K as f,L as p,N as m,O as h,R as g,S as _,T as v,U as y,V as b,W as x,X as S,Y as C,_ as w,a as T,c as E,d as D,f as O,h as k,i as A,j,k as M,l as N,m as P,n as F,o as I,p as L,q as R,r as z,s as B,t as ee,u as V,v as te,w as ne,x as re,y as ie,z as ae}from"./renderer-vendor.js";var H=e(S(),1),oe=d(),U=f(),W=R();function se({size:e=`medium`,className:t,label:n}){return(0,W.jsx)(`span`,{role:n?`status`:void 0,"aria-label":n,"aria-hidden":!n||void 0,className:`hub-spinner hub-spinner--${e}${t?` ${t}`:``}`})}function ce({className:e,...t}){return(0,W.jsx)(`span`,{...t,className:`hub-visually-hidden${e?` ${e}`:``}`})}function G(e){let t=(0,H.useId)(),{as:n,href:r,ref:i,icon:a,description:o,loading:s=!1,size:c=`medium`,variant:l=`default`,className:u,...d}=e,f=`hub-icon-button${c===`small`?` hub-icon-button--small`:``}${l===`invisible`?` hub-icon-button--invisible`:``}${l===`danger`?` hub-icon-button--danger`:``}${u?` ${u}`:``}`,p=l===`invisible`?`subtle`:`secondary`,m=!(!o||d.title||d[`aria-describedby`]||`disabled`in d&&d.disabled),h=[d[`aria-describedby`],o&&!m?t:void 0].filter(Boolean).join(` `)||void 0,g=d.title??(m?void 0:o??d[`aria-label`]),_=o&&!m?(0,W.jsx)(ce,{id:t,children:o}):null,v=s?(0,W.jsx)(se,{decorative:!0,size:`small`}):(0,W.jsx)(a,{size:16}),y=s?!0:d[`aria-busy`];if(n===`a`){let e=i,t=(0,W.jsx)(U.Button,{...d,ref:e,as:`a`,href:r,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,W.jsx)(U.Tooltip,{ref:i,text:o,type:`description`,children:t}):t}let b=(0,W.jsx)(U.Button,{...d,ref:i,type:d.type??`button`,leadingVisual:v,variant:p,size:c,className:f,"aria-busy":y,"aria-describedby":h,title:g,children:_});return m&&o?(0,W.jsx)(U.Tooltip,{ref:i,text:o,type:`description`,children:b}):b}function le({title:e,closeLabel:t,onClose:n,returnFocusRef:r,descriptionId:i,className:a,children:o}){let s=(0,H.useRef)(null),c=(0,H.useId)();return(0,H.useLayoutEffect)(()=>{let e=s.current,t=r?.current??(document.activeElement instanceof HTMLElement?document.activeElement:null);return e?.showModal(),()=>{e?.close(),(r?.current??t)?.focus()}},[r]),(0,W.jsxs)(`dialog`,{ref:s,"aria-labelledby":c,"aria-describedby":i,className:a?`canvas-dialog ${a}`:`canvas-dialog`,onCancel:e=>{e.preventDefault(),n()},onClick:e=>{if(e.target!==e.currentTarget)return;let{left:t,right:r,top:i,bottom:a}=e.currentTarget.getBoundingClientRect();(e.clientXr||e.clientYa)&&n()},children:[(0,W.jsxs)(`header`,{className:`canvas-dialog-header`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`5`,id:c,children:e}),(0,W.jsx)(G,{variant:`default`,size:`small`,icon:V,"aria-label":t,onClick:n})]}),o]})}var K={improvementNotesLoading:`Loading improvement notes demo...`,mentionSuggestions:`Mention suggestions`,mentionSuggestionsError:`Mention suggestions are unavailable. Try again.`,mentionSuggestionsLoading:`Loading people...`,mentionSuggestionsEmpty:`No matching people. You can type a GitHub login to check it when sending.`,mentionLimit:`Each message can mention at most 10 distinct people.`,controls:`Controls`,controlsMove:`Move controls`,controlsMoveHint:`Drag to move. Use arrow keys, or Shift and arrow keys for smaller steps.`,controlsCollapse:`Collapse controls`,controlsExpand:`Expand controls`,controlsCollapseGroup:e=>`Collapse ${e}`,controlsExpandGroup:e=>`Expand ${e}`,controlsDescription:`Settings stay in this prototype's URL. The app may paint before Controls apply declared defaults.`,controlsConnecting:`Connecting controls...`,controlsEmpty:`No active controls. This prototype may have no declaration or this route may not mount controls.`,controlsLearnMore:`Learn more`,controlsMissingRuntime:`No supported controls runtime found.`,controlsLocalMissingRuntime:`Local controls couldn't connect.`,controlsLocalConnectionFailed:`The preview has not responded to controls. Retry the connection or ask Copilot to diagnose the cause.`,controlsLocalStorageFailed:`Controls could not be saved in the prototype URL. Changes remain in memory.`,controlsDiagnose:`Diagnose with Copilot`,controlsFix:`Fix with Copilot`,controlsDiagnostics:`Technical details`,controlsUnavailable:e=>`${e} is unavailable`,controlsNotApplied:e=>`${e} could not be applied`,controlsDiagnosisRequested:`Requested in chat`,controlsDiagnosisFailed:`Could not request a diagnosis. Try again.`,controlsUnsupportedRuntime:`This controls runtime version is unsupported. Upgrade only after an approved release.`,controlsInvalid:`The Controls definitions are invalid. Fix controls.replica.json and reload.`,controlsScopeError:(e,t)=>`Controls scope "${e}" did not connect. ${t}`,controlsRetry:`Retry connection`,controlsRetryStorage:`Retry saving`,controlsResetAll:`Reset all controls`,controlsRegion:`Prototype controls`,controlsActionBusy:` - Working...`,controlsActionUnavailable:`No mounted action handler.`,controlsValueNotApplied:`This value was not applied.`,browserNavigation:`Prototype navigation`,browserBack:`Back`,browserForward:`Forward`,browserReload:`Reload preview`,browserAddress:`Prototype address`,browserAddressInvalid:`Enter a valid URL or route.`,browserAddressOrigin:`The address must stay on this prototype's origin.`,browserOpenTab:`Open preview in browser`,browserAppearance:`Preview appearance`,browserLight:`Light appearance`,browserDark:`Dark appearance`,commentingUnavailable:`Commenting needs attention`,commentingDescription:`The canvas could not connect to the preview's commenting bridge.`,closeCommentingDialog:`Close commenting dialog`,commentingFix:`Fix with Copilot`,commentingFixRequested:`Requested in chat`,commentingDismiss:`Dismiss`,commentingMissing:`The preview has not responded through its local proxy. Check that the selected server is running, then reopen the canvas. Script or framing policies, certificate errors, and origin-dependent apps can prevent connection. A Vite plugin or server restart is not required to connect.`,commentingIncompatible:`The preview responded with an incompatible commenting protocol. Update the installed Replica extension and reopen the canvas, or use Fix with Copilot to check the preview connection.`,connectToHub:`Connect to the Hub`,closeConnectionDialog:`Close connection dialog`,connectionDescription:`Connecting to the hub lets you share the prototype with others and enables commenting.`,connectionBeforePublishing:`Connect to the hub before publishing this prototype.`,connectionRepositoryRequired:`Open a repository with a GitHub origin before connecting.`,connectionHubRequired:`Enter and save a Hub URL before connecting.`,connectionOpeningBrowser:`Opening browser...`,connectionApproval:`Browser approval`,connectionWaiting:`Make sure your browser shows the same code`,connectionApprovalExpired:`The approval expired or was declined. Connect again to retry.`,connectionBrowserFailed:e=>`Could not open your browser. Open or copy the approval link below. ${e}`,hubUrl:`Hub URL`,editHubUrl:`Edit Hub URL`,saveHub:`Save Hub`,disconnectFailed:(e,t)=>`Could not disconnect from ${e}: ${t} The previous connection may still be active. Save another Hub URL to switch this canvas locally, or retry Disconnect Hub.`,resetHubUrl:`Reset to repository Hub URL`,resetHubUnavailable:`No repository Hub URL is available. Enter a URL manually or retry reset.`,hubHttpsHint:`Remote Hubs require HTTPS`,copyApprovalLink:`Copy Hub approval link`,approvalLinkCopied:`Approval link copied`,approvalCopyFailed:`Could not copy the link. Copy the Connect to the hub link manually.`,invalidResponse:`The extension returned an invalid response.`,startPage:`Start page`,prototypeFrameTitle:e=>`${e} prototype`,startPageOrigin:`Hub returned a start page outside the prototype.`,hubStatusUnavailable:e=>`Hub status unavailable: ${e}`,hubBuildImported:`Hub imported this Build.`,hubBuildMissing:`Hub has not imported a successful registered Build.`,hubPublicationUnavailable:`Connect to Hub to verify publication.`,editDetails:`Edit details`,startPageHint:`Paste a prototype URL or route. Leave blank to start at /.`,requestFailed:`The request failed.`,statusUnavailable:`Publish status unavailable.`,publishRequestPending:`Waiting for the current commit to run through the publish workflow.`,waitingForHubImport:`The workflow completed. Waiting for Hub to import this Build.`,workingTreeChanged:`Uncommitted changes`,workingTreeClean:`Working tree clean`,buildDetails:`Build details`,latestBuild:`Latest Build`,buildTitle:e=>`Build #${e}`,buildCommit:`Commit`,unknownCommitAuthor:`Unknown`,showBuildHistory:`Show build history`,closeBuildDetails:`Close build details`,branch:`Branch`,sessionId:`Session ID`,comparison:`Branch comparison`,comparisonNeedsRefresh:`Branch comparison unavailable until Git stats refresh.`,upToDate:`Up to date`,commitsBehind:e=>`${e} ${e===1?`commit`:`commits`} behind`,copyBranch:`Copy branch`,copySessionId:`Copy session ID`,branchCopied:`Branch copied`,sessionIdCopied:`Session ID copied`,buildDetailsCopyFailed:e=>`${e} could not be copied. Select it and copy it manually.`,unavailable:`Unavailable`,publishLabels:{succeeded:`Awaiting Hub`,failed:`Retry`,in_progress:`Publishing`,not_published:`Publish`,published:`Published`,requested:`Requested`,unavailable:`Publish`}};function ue({onClose:e,state:t,titleButtonRef:n}){let[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(null),c=t.stats.branchError?void 0:t.stats.branch,l=t.sessionId,u=t.stats.comparison;async function d(e,t){try{await navigator.clipboard.writeText(e),a(t),s(null)}catch{a(null),s(t===`branch`?K.branch:K.sessionId)}}function f(e,t){if(!e)return null;let n=t===`branch`?K.copyBranch:K.copySessionId,a=t===`branch`?K.branchCopied:K.sessionIdCopied;return(0,W.jsx)(U.Button,{type:`button`,className:`canvas-icon-button`,variant:`subtle`,size:`small`,leadingVisual:i===t?(0,W.jsx)(r,{size:16}):(0,W.jsx)(m,{size:16}),"aria-label":i===t?a:n,title:i===t?a:n,onClick:()=>void d(e,t),children:(0,W.jsx)(`span`,{className:`visually-hidden`,children:n})})}return(0,W.jsxs)(le,{title:K.buildDetails,closeLabel:K.closeBuildDetails,className:`build-details-dialog`,returnFocusRef:n,onClose:e,children:[(0,W.jsxs)(`dl`,{className:`build-details-list`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:K.branch}),(0,W.jsxs)(`dd`,{children:[(0,W.jsx)(M,{size:16,"aria-hidden":`true`}),(0,W.jsx)(`code`,{children:c||t.stats.branchError||K.unavailable}),f(c,`branch`)]})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:K.sessionId}),(0,W.jsxs)(`dd`,{children:[(0,W.jsx)(`code`,{children:l||K.unavailable}),f(l,`sessionId`)]})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`dt`,{children:u?.branch?`Behind ${u.branch}${u.source===`local`?` (local)`:``}`:K.comparison}),(0,W.jsx)(`dd`,{children:u?.error||(u?.behind===0?K.upToDate:u?.behind==null?K.unavailable:K.commitsBehind(u.behind))})]})]}),(0,W.jsx)(`span`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:i===`branch`?`${K.branchCopied}.`:i===`sessionId`?`${K.sessionIdCopied}.`:``}),o?(0,W.jsx)(`span`,{role:`alert`,className:`build-details-copy-error`,children:K.buildDetailsCopyFailed(o)}):null]})}function de({pairing:e}){let[t,n]=(0,H.useState)(`idle`),i=(0,H.useRef)(null);(0,H.useEffect)(()=>{i.current?.querySelector(`a`)?.focus()},[]);async function a(){try{await navigator.clipboard.writeText(e.verificationUrl),n(`copied`)}catch{n(`failed`)}}return(0,W.jsxs)(`section`,{className:`hub-connection-approval`,"aria-label":K.connectionApproval,children:[(0,W.jsxs)(`p`,{role:`status`,children:[K.connectionWaiting,` `,(0,W.jsx)(`strong`,{children:e.userCode}),`.`]}),(0,W.jsxs)(`div`,{ref:i,className:`hub-connection-approval-actions`,role:`group`,"aria-label":K.connectionApproval,children:[(0,W.jsx)(U.Button,{as:`a`,variant:`primary`,size:`medium`,href:e.verificationUrl,target:`_blank`,rel:`noopener noreferrer`,children:K.connectToHub}),(0,W.jsx)(G,{icon:t===`copied`?r:m,size:`medium`,className:`hub-connection-approval-copy`,"aria-label":t===`copied`?K.approvalLinkCopied:K.copyApprovalLink,onClick:()=>void a()})]}),(0,W.jsx)(ce,{role:`status`,children:t===`copied`?K.approvalLinkCopied:``}),t===`failed`?(0,W.jsx)(`p`,{role:`alert`,children:K.approvalCopyFailed}):null]})}function fe({status:e,pairing:t,connecting:n,error:r,onConnect:i,onSelectHub:a,onResetHub:o,onClose:s,hubButtonRef:c}){let l=(0,H.useId)(),[u,d]=(0,H.useState)(null),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(!1),[b,x]=(0,H.useState)(``),S=(0,H.useRef)(null),C=(0,H.useRef)(null),w=f||!e?.hubOrigin||u!==null&&!m,T=(0,H.useRef)(w),E=u??e?.hubOrigin??``,D=n||g||v,O=!!t||n;(0,H.useEffect)(()=>{w&&!O?S.current?.focus():T.current&&!O&&C.current?.focus(),T.current=w},[w,O]),(0,H.useEffect)(()=>{if(f||u===null||!m||!e?.hubOrigin)return;let t=window.setTimeout(()=>d(null),0);return()=>window.clearTimeout(t)},[u,f,m,e?.hubOrigin]);async function k(){if(!D){_(!0),x(``);try{await a(E),d(null),p(!1)}catch(e){x(e instanceof Error?e.message:String(e))}finally{_(!1)}}}async function A(){if(!D&&o){y(!0),x(``);try{d(await o()),p(!!e?.hubOrigin)}catch(e){x(e instanceof Error?e.message:String(e))}finally{y(!1)}}}return(0,W.jsxs)(le,{title:K.connectToHub,closeLabel:K.closeConnectionDialog,onClose:s,returnFocusRef:c,children:[(0,W.jsx)(`p`,{children:K.connectionDescription}),b||r?(0,W.jsx)(`p`,{role:`alert`,children:b||r}):null,(0,W.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),!D&&(!O&&w&&(f||e?.hubOrigin)?k():(x(``),e?.hubOrigin||h(!0),i(e?.hubOrigin?void 0:E)))},children:[!O&&(w?(0,W.jsxs)(`div`,{className:`hub-connection-origin-field`,children:[(0,W.jsx)(`label`,{htmlFor:l,children:K.hubUrl}),(0,W.jsxs)(`div`,{className:`hub-connection-origin-input`,children:[(0,W.jsx)(U.TextInput,{ref:S,id:l,type:`url`,value:E,onChange:e=>{h(!1),d(e.target.value)},required:!0,fullWidth:!0,disabled:D,placeholder:`https://hub.example.com`}),o?(0,W.jsx)(G,{icon:L,variant:`invisible`,size:`small`,"aria-label":K.resetHubUrl,disabled:D,"aria-busy":v,onClick:()=>void A()}):null]}),f||e?.hubOrigin?(0,W.jsx)(U.Button,{type:`submit`,variant:`subtle`,size:`small`,disabled:D,children:K.saveHub}):null]}):(0,W.jsxs)(`div`,{className:`hub-connection-origin`,children:[(0,W.jsx)(`a`,{href:e?.hubOrigin&&new URL(e.hubOrigin).origin,target:`_blank`,rel:`noopener noreferrer`,children:e?.hubOrigin}),(0,W.jsx)(G,{ref:C,icon:re,variant:`invisible`,size:`small`,"aria-label":K.editHubUrl,disabled:D,onClick:()=>{x(``),p(!0),d(e?.hubOrigin??``)}})]})),t?(0,W.jsx)(de,{pairing:t},t.verificationUrl):null,t?null:(0,W.jsx)(U.Button,{type:`submit`,variant:`primary`,disabled:D||!e?.repository||!O&&w&&(f||!!e?.hubOrigin),children:n?K.connectionOpeningBrowser:K.connectToHub})]})]})}function pe({title:e,description:t,children:n,action:r,variant:i,layout:o,onDismiss:s,dismissLabel:l,className:u,...d}){let f=i===`critical`?k:i===`success`?ae:i===`info`?a:c;return(0,W.jsxs)(`div`,{...d,role:i===`critical`||i===`warning`?`alert`:`status`,className:`hub-alert hub-alert--${i}${o===`compact`?` hub-alert--compact`:``}${u?` ${u}`:``}`,children:[(0,W.jsx)(f,{className:`hub-alert__icon`,size:20,"aria-hidden":`true`}),(0,W.jsxs)(`div`,{className:`hub-alert__content`,children:[(0,W.jsxs)(U.Text,{as:`p`,size:`100`,className:`hub-alert__message`,children:[(0,W.jsx)(`strong`,{className:`hub-alert__title`,children:e}),t?(0,W.jsx)(`span`,{className:`hub-alert__description`,children:t}):null]}),n]}),r||s?(0,W.jsxs)(`div`,{className:`hub-alert__action`,children:[r,s&&l?(0,W.jsx)(G,{icon:V,"aria-label":l,title:l,variant:`invisible`,size:`small`,onClick:s}):null]}):null]})}var q={title:`Publish uncommitted changes?`,description:`Do you want to commit changes before publishing? Publishing the committed version only excludes your local uncommitted edits.`,checkFailedTitle:`Could not check local changes`,checkFailed:`Git could not check local changes.`,retryCheck:`Retry check`,commit:`Commit changes & publish`,committed:`Publish committed version only`,close:`Close publishing dialog`,changedFiles:`Uncommitted changes`,moreChanges:e=>`${e} more`,localSkills:e=>`${e} local agent skill ${e===1?`file stays`:`files stay`} uncommitted.`,selection:`Copilot commits only changes related to this prototype task and asks if it cannot tell which changes belong.`,remember:`Always commit changes before publishing for this prototype`,settings:`Settings`,alwaysCommit:`Always commit changes before publishing`,retrySettings:`Retry settings`,preferenceTargetChanged:`The checkout changed. Refresh Settings and try again.`,invalidPreference:`Publishing settings returned an invalid response. Retry settings.`};function me({busy:e,error:t,changes:n,checkError:r,remembered:i,returnFocusRef:a,onClose:o,onChoose:s,onRetry:c}){let[l,u]=(0,H.useState)(i),d=(0,H.useId)(),f=(0,H.useId)();return(0,W.jsx)(le,{title:r?q.checkFailedTitle:q.title,closeLabel:q.close,descriptionId:r?void 0:d,returnFocusRef:a,onClose:()=>{e||o()},className:`publish-changes-dialog`,children:(0,W.jsxs)(U.Stack,{gap:`normal`,padding:`none`,children:[r?null:(0,W.jsx)(`p`,{id:d,children:q.description}),r?(0,W.jsx)(pe,{title:r,variant:`critical`,layout:`compact`}):null,n?.files.total?(0,W.jsx)(`section`,{"aria-label":q.changedFiles,children:(0,W.jsxs)(`ul`,{className:`publish-changes-dialog__files`,children:[n.files.paths.map(e=>(0,W.jsx)(`li`,{children:(0,W.jsx)(`code`,{children:e})},e)),n.files.total>n.files.paths.length?(0,W.jsx)(`li`,{children:q.moreChanges(n.files.total-n.files.paths.length)}):null]})}):null,r?null:(0,W.jsxs)(`p`,{children:[n?.localSkills.total?`${q.localSkills(n.localSkills.total)} `:null,q.selection]}),r?null:(0,W.jsxs)(U.FormControl,{id:f,fullWidth:!0,children:[(0,W.jsx)(U.Checkbox,{checked:l,disabled:e,onChange:e=>u(e.target.checked)}),(0,W.jsx)(U.FormControl.Label,{children:q.remember})]}),t?(0,W.jsx)(pe,{title:t,variant:`critical`,layout:`compact`}):null,(0,W.jsxs)(`footer`,{className:`publish-changes-dialog__actions`,children:[r?(0,W.jsx)(U.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:c,children:q.retryCheck}):null,r?null:(0,W.jsx)(U.Button,{variant:`primary`,size:`small`,disabled:e,"aria-busy":e,onClick:()=>s(`commit-changes`,l),children:q.commit}),(0,W.jsx)(U.Button,{size:`small`,disabled:e,onClick:()=>s(`committed-only`,!1),children:q.committed})]})]})})}function he({value:e,label:t,copyLabel:n,copiedLabel:r,copyErrorLabel:i,compact:a=!1}){let[o,s]=(0,H.useState)(null),c=o?.value===e?o.status:null,l=c===`copied`?r:n;async function u(){try{await navigator.clipboard.writeText(e),s({value:e,status:`copied`})}catch{s({value:e,status:`failed`})}}return(0,W.jsxs)(`div`,{className:`copyable-text-input${a?` copyable-text-input--compact`:``}`,children:[(0,W.jsxs)(`div`,{className:`copyable-text-input__control`,children:[a?(0,W.jsx)(`input`,{type:`text`,value:e,"aria-label":t,readOnly:!0,className:`copyable-text-input__input`}):(0,W.jsx)(U.TextInput,{value:e,"aria-label":t,readOnly:!0,fullWidth:!0,className:`copyable-text-input__input`}),(0,W.jsx)(G,{icon:m,"aria-label":l,description:a?l:void 0,title:a?void 0:l,variant:`invisible`,size:`small`,className:`copyable-text-input__button`,onClick:()=>void u()})]}),(0,W.jsx)(ce,{"aria-live":`polite`,"aria-atomic":`true`,children:c===`copied`?r:``}),c===`failed`?(0,W.jsx)(`span`,{role:`alert`,className:`copyable-text-input__error`,children:i}):null]})}function ge({children:e}){return(0,W.jsx)(`div`,{className:`prototype-workspace__body`,children:e})}function _e({title:e,description:t,trailing:n,headingAs:r=`h2`,headingRef:i}){return(0,W.jsxs)(`header`,{className:`hub-content-page-header`,children:[(0,W.jsxs)(`div`,{className:`hub-content-page-header__top`,children:[(0,W.jsx)(U.Heading,{as:r,size:`4`,ref:i,tabIndex:i?-1:void 0,children:e}),n]}),t?(0,W.jsx)(U.Text,{as:`p`,className:`hub-content-page-header__description`,children:t}):null]})}function ve({labels:e,headingRef:t,headingTrailing:n,feedback:r,form:i,formUnavailable:a,links:o,hasLinks:s,showEmpty:c=!0,listRef:l,listBusy:u,beforeLinks:d,afterLinks:f}){return(0,W.jsxs)(U.Stack,{gap:`normal`,children:[(0,W.jsx)(_e,{title:e.heading,description:e.description,headingRef:t,trailing:n}),r,i||(a===void 0?(0,W.jsxs)(`section`,{className:`share-links__empty`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`5`,children:e.noBuildHeading}),(0,W.jsx)(U.Text,{as:`p`,className:`share-links__empty-description`,children:e.noBuildLabel})]}):a),d,s?(0,W.jsx)(`ul`,{className:`share-links__list`,ref:l,"aria-busy":u,children:o}):c?(0,W.jsxs)(`section`,{className:`share-links__empty`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`5`,children:e.emptyHeading}),(0,W.jsx)(U.Text,{as:`p`,className:`share-links__empty-description`,children:e.emptyLabel})]}):null,f]})}function ye({shareLink:e,className:t,copiedLabel:n,copyErrorLabel:r,copyLabel:i,urlLabel:a,unavailableLabel:o,highlighted:s,children:c}){return(0,W.jsx)(`li`,{"data-share-id":e.id,className:`share-link-item${s?` share-link-item--created`:``}${t?` ${t}`:``}`,children:(0,W.jsxs)(`div`,{className:`share-link-item__layout`,children:[(0,W.jsxs)(`div`,{className:`share-link-item__details`,children:[(0,W.jsx)(`h3`,{children:e.label}),(0,W.jsxs)(`span`,{className:`share-link-item__metadata`,children:[e.buildLabel,e.createdLabel?(0,W.jsxs)(W.Fragment,{children:[` · `,(0,W.jsx)(`time`,{dateTime:e.createdAt,children:e.createdLabel})]}):null,` · `,e.expiresAt?(0,W.jsx)(`time`,{dateTime:e.expiresAt,children:e.expiresLabel}):e.expiresLabel]})]}),(0,W.jsxs)(`div`,{className:`share-link-item__actions`,children:[o?(0,W.jsx)(`p`,{children:o}):(0,W.jsx)(he,{value:e.url,label:a||e.label,copyLabel:i,copiedLabel:n,copyErrorLabel:r}),c]})]})})}function be({data:e,action:t,hiddenFields:n,details:r,afterFields:i,onSubmit:a,label:o,onLabelChange:s,expiration:c,onExpirationChange:l,disabled:u,fieldsDisabled:d,busy:f,error:p}){let m=(0,H.useId)(),h=(0,H.useId)();return(0,W.jsxs)(`div`,{className:`share-links-form`,children:[e.buildLabel?(0,W.jsx)(U.Heading,{as:`h2`,size:`5`,children:e.buildLabel}):null,r,(0,W.jsxs)(`form`,{action:t,method:`post`,onSubmit:a,"aria-busy":f,className:`share-links__form`,children:[n,(0,W.jsxs)(`div`,{className:`share-links__form-row`,children:[(0,W.jsxs)(U.FormControl,{id:m,required:!0,fullWidth:!0,className:`share-links__field`,children:[(0,W.jsx)(U.FormControl.Label,{children:e.labelLabel}),(0,W.jsx)(U.TextInput,{"aria-label":e.labelLabel,"aria-invalid":!!p,name:`share_link[label]`,placeholder:e.labelPlaceholder,maxLength:e.labelMaximumBytes,value:o,onChange:s,disabled:d,fullWidth:!0}),p?(0,W.jsx)(U.FormControl.Validation,{validationStatus:`error`,className:`share-links__validation`,children:p}):null]}),p?(0,W.jsx)(ce,{role:`alert`,children:p}):null,(0,W.jsxs)(U.FormControl,{id:h,fullWidth:!0,className:`share-links__field`,children:[(0,W.jsx)(U.FormControl.Label,{children:e.expirationLabel}),(0,W.jsx)(U.Select,{"aria-label":e.expirationLabel,name:`share_link[expiration]`,defaultValue:c===void 0?e.expirationOptions.find(e=>e.value===`seven_days`)?.value??e.expirationOptions[0]?.value:void 0,value:c,onChange:l,disabled:d,fullWidth:!0,children:e.expirationOptions.map(e=>(0,W.jsx)(U.Select.Option,{value:e.value,children:e.label},e.value))})]}),(0,W.jsx)(`div`,{className:`share-links__form-actions`,children:(0,W.jsx)(U.Button,{type:`submit`,variant:`primary`,leadingVisual:v,disabled:u,children:e.submitLabel})})]}),i?(0,W.jsx)(`div`,{className:`share-links__form-options`,children:i}):null]})]})}var J={title:`Share prototype`,internal:`Internal prototype link`,internalDescription:`Requires GitHub sign-in and repository access.`,internalUnavailable:`Internal prototype link unavailable.`,internalCopy:`Copy internal prototype link`,internalOpen:`Open internal prototype link`,public:`Public share links`,permissionUnknown:`Hub has not confirmed permission to manage public share links.`,group:`Publish and share`,back:`Back to preview`,warning:`Anyone with a link can view its Build without signing in. The prototype may expose sensitive or customer information. Check its content before sharing. Local and uncommitted changes are not included.`,target:`New links share this published Build:`,oldBuild:`This is the last published Build, not the current local preview.`,includeControlSettings:`Include current control settings`,controlSettingsDescription:`Adds settings for all configured pages to the links you copy or open. Saved share links stay unchanged.`,controlSettingsWarning:`Settings for controls that have not been published will not take effect for shared links.`,controlSettingsWarningTitle:`Local changes are not in the shared Build`,label:`Label`,labelPlaceholder:`Usability review`,labelInvalid:`Enter a label containing no more than 100 UTF-8 bytes.`,expiry:`Expires after`,expirations:[{value:`one_day`,label:`1 day`},{value:`seven_days`,label:`7 days`},{value:`thirty_days`,label:`30 days`},{value:`never`,label:`Never`}],create:`Create share link`,creating:`Working...`,active:`Active share links`,empty:`Create a link when someone needs signed-out access.`,emptyHeading:`No active share links`,loading:`Loading share links...`,refresh:`Refresh links`,authorize:`Verify with GitHub`,authorizationRetry:`Complete authorization in your browser, then refresh links and submit the action again. No action is replayed automatically.`,paginationFailed:`Hub returned a repeated share-link page. Refresh links to try again.`,noBuild:`A successful published Build is required before creating a share link.`,noBuildHeading:`No successful Build`,build:e=>`Build ${e}`,buildDetails:(e,t,n)=>`Commit: ${e}\nAuthor: @${t}\nPublished: ${n}`,denied:`Managing public share links requires repository admin access or authorship of any successful Build for this Prototype, with current read access. Write access alone is not sufficient.`,disabled:`Public sharing is disabled for this Hub. A Hub administrator must explicitly enable it. Previously revoked links never return.`,disconnected:`Connect to Hub before managing share links.`,connect:`Connect to Hub`,unavailable:`Hub is unavailable. Restore the connection and reopen Share prototype.`,branch:`Open a named prototype branch discovered by Hub before sharing.`,stale:`Hub or checkout changed. Return to preview and reopen Share prototype.`,deleted:`Share link deleted. Its public URL no longer works.`,never:`Never expires`,expires:e=>`Expires ${e}`,createdBy:(e,t)=>`Created by @${e} ${t}`,copy:(e,t)=>`Copy ${e}, Build #${t}`,copied:`Link copied`,copyError:`Could not copy the link. Select the URL and copy it manually.`,open:(e,t)=>`Open ${e}, Build #${t}`,delete:(e,t)=>`Delete ${e}, Build #${t}`,deletePrompt:e=>`Delete "${e}"? Anyone with this link will lose access to its Build.`,deletedError:`Could not delete the link.`,failed:`The sharing request failed.`,unknown:`The sharing request may have completed. Refresh active links before trying again. A matching label does not prove which request created a link.`,expired:`This link has expired. Refresh links.`};function xe({included:e,onChange:t,publishedVersionDiffers:n,disabled:r=!1,error:i,copy:a}){let o=(0,H.useId)(),s=e&&n;return(0,W.jsxs)(`div`,{className:`share-control-settings`,children:[(0,W.jsxs)(U.FormControl,{id:o,fullWidth:!0,children:[(0,W.jsx)(U.Checkbox,{checked:e,onChange:e=>t(e.target.checked),disabled:r}),(0,W.jsx)(U.FormControl.Label,{children:a?.label??J.includeControlSettings}),(0,W.jsx)(U.FormControl.Hint,{className:`share-control-settings__hint`,children:(0,W.jsx)(`span`,{className:`share-control-settings__description`,children:a?.description??J.controlSettingsDescription})})]}),i?(0,W.jsx)(pe,{title:i,variant:`critical`,layout:`compact`}):null,s?(0,W.jsx)(pe,{title:J.controlSettingsWarningTitle,description:J.controlSettingsWarning,variant:`warning`,layout:`compact`,className:`share-control-settings__warning`}):null]})}function Se(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e)&&(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))}var Ce=`replica:controls:url`,we=/^rc\.([a-zA-Z][a-zA-Z0-9_-]{0,63})\.([a-zA-Z][a-zA-Z0-9_-]{0,63})$/;function Te(e){let t=new URLSearchParams;for(let n of Object.keys(e).sort()){let r=e[n];if(!Se(r))throw Error(`Invalid control settings.`);for(let e of Object.keys(r).sort()){let i=`rc.${n}.${e}`;if(!we.test(i))throw Error(`Invalid control settings identifier.`);t.set(i,JSON.stringify(r[e]))}}let n=t.toString();if(new Blob([n]).size>8192)throw Error(`Control settings exceed the 8 KB URL limit. Reduce the settings before sharing.`);return n}function Ee(e){let t=new URLSearchParams(e),n=[...t].filter(([e])=>e.startsWith(`rc.`));if(new Blob([new URLSearchParams(n).toString()]).size>8192)return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`};let r=new Map,i=!1;for(let[e,a]of n){let n=we.exec(e);if(!n||t.getAll(e).length!==1){i=!0;continue}let o=n[1],s=n[2],c;try{c=JSON.parse(a)}catch{c=a}if(!Se({[s]:c})){i=!0;continue}let l=r.get(o)??new Map;l.set(s,c),r.set(o,l)}let a=Object.fromEntries([...r].map(([e,t])=>[e,Object.fromEntries(t)]));try{Te(a)}catch{return{scopes:{},notice:`Control settings in this URL exceed 8 KB. Defaults were used.`}}return{scopes:a,notice:i?`Some URL control settings were invalid. Defaults were used instead.`:``}}function De(e,t){let n=new URL(e,window.location.href),r=Ee(t);if(r.notice)throw Error(r.notice);for(let e of[...n.searchParams.keys()])e.startsWith(`rc.`)&&n.searchParams.delete(e);for(let[e,t]of new URLSearchParams(Te(r.scopes)))n.searchParams.set(e,t);return n.toString()}function Oe({state:e,buildDetails:t,currentCommit:n,hasLocalChanges:r=!1,shareButtonRef:i,onClose:a,onConnect:o,onRefresh:s,onCreate:c,onDelete:l,onOpen:u,controlSettings:d,onAuthorize:f}){let[p,m]=(0,H.useState)(``),[h,g]=(0,H.useState)(`seven_days`),[_,v]=(0,H.useState)(``),[y,b]=(0,H.useState)(Date.now),x=(0,H.useRef)(null),S=(0,H.useRef)(null),C=(0,H.useRef)(null),w=e.context?.prototype,T=J.expirations.filter(e=>!w?.shareLinkExpirationOptions||w.shareLinkExpirationOptions.includes(e.value)),E=T.some(e=>e.value===h)?h:T.find(e=>e.value===`seven_days`)?.value??T[0]?.value??``,D=w?.published?w.build:null,k=D?.url,A=k&&URL.canParse(k)?new URL(k):null,j=A&&A.origin===e.context?.hubOrigin&&[`http:`,`https:`].includes(A.protocol)&&!A.username&&!A.password?k:null,M=!!(D&&n&&n!==D.commitSha)||r,N=w?.canManageShareLinks===!0,P=!e.sharingDisabled&&w?.publicSharingEnabled!==!1,F=e.busy||e.loading||e.stale||!N||!P,I=d?.included?d.query??``:``,L=!!d?.blocked;function R(e){return De(e,I)}let z=P&&e.stale&&!e.loading&&e.created&&!e.links.some(t=>t.id===e.created?.id)?e.created:null;(0,H.useEffect)(()=>{let e=i.current;S.current?.focus();let t=window.setInterval(()=>b(Date.now()),1e4);return()=>{window.clearInterval(t),e?.focus()}},[i]),(0,H.useEffect)(()=>{if(e.busy||!C.current)return;let t=C.current;C.current=null,(t.map(e=>x.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||S.current)?.focus()},[e.busy,e.links]);async function B(t,n){if(!window.confirm(J.deletePrompt(n)))return;let r=e.links.findIndex(e=>e.id===t),i=[...e.links.slice(r+1),...e.links.slice(0,r).reverse()].map(e=>e.id);await l(t)&&(C.current=i,(i.map(e=>x.current?.querySelector(`[data-share-id="${e}"] button`)).find(e=>e&&!e.disabled)||S.current)?.focus())}function ee(e){return new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}return(0,W.jsx)(`main`,{className:`canvas-share-page`,"aria-label":J.title,children:(0,W.jsx)(ge,{children:(0,W.jsx)(ve,{labels:{heading:J.title,noBuildHeading:J.noBuildHeading,noBuildLabel:J.noBuild,emptyHeading:J.emptyHeading,emptyLabel:J.empty},headingRef:S,headingTrailing:(0,W.jsx)(`div`,{className:`canvas-share-close`,children:(0,W.jsx)(G,{icon:V,variant:`invisible`,"aria-label":J.back,description:J.back,onClick:a})}),feedback:(0,W.jsxs)(W.Fragment,{children:[d?(0,W.jsx)(xe,{included:d.included,onChange:d.onChange,publishedVersionDiffers:M,disabled:e.busy||d.pending,error:d.error}):null,(0,W.jsxs)(`section`,{className:`canvas-share-internal`,"aria-label":J.internal,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`6`,children:J.internal}),(0,W.jsx)(`p`,{children:J.internalDescription}),j&&!L?(0,W.jsxs)(`div`,{className:`share-link-item__actions canvas-share-internal-actions`,children:[(0,W.jsx)(he,{value:R(j),label:J.internal,copyLabel:J.internalCopy,copiedLabel:J.copied,copyErrorLabel:J.copyError}),(0,W.jsx)(G,{as:`a`,href:R(j),target:`_blank`,rel:`noopener`,icon:ne,"aria-label":J.internalOpen,description:J.internalOpen})]}):j?null:(0,W.jsx)(`p`,{role:`status`,children:J.internalUnavailable})]}),(0,W.jsxs)(`div`,{className:`canvas-share-public-header`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`6`,children:J.public}),(0,W.jsx)(`p`,{children:J.warning})]}),w&&!N?(0,W.jsx)(`p`,{role:`status`,children:w.canManageShareLinks===!1?J.denied:J.permissionUnknown}):null,P?null:(0,W.jsx)(`p`,{role:`status`,children:J.disabled}),e.error?(0,W.jsx)(pe,{title:e.error,variant:`critical`,layout:`compact`}):null,e.authorization&&f?(0,W.jsx)(U.Button,{variant:`secondary`,size:`small`,onClick:f,disabled:e.busy,children:J.authorize}):null,o&&!e.context?(0,W.jsx)(U.Button,{variant:`secondary`,size:`small`,onClick:o,children:J.connect}):null]}),form:D&&N&&P?(0,W.jsx)(be,{data:{buildLabel:null,labelLabel:J.label,labelPlaceholder:J.labelPlaceholder,labelMaximumBytes:100,expirationLabel:J.expiry,expirationOptions:T,submitLabel:e.busy?J.creating:J.create},label:p,onLabelChange:e=>{m(e.target.value),v(``)},expiration:E,onExpirationChange:e=>g(e.target.value),onSubmit:e=>{e.preventDefault(),!p.trim()||new TextEncoder().encode(p.trim()).length>100?v(J.labelInvalid):(v(``),c(p,E))},disabled:F,fieldsDisabled:e.busy,busy:e.busy,error:_,details:(0,W.jsxs)(`div`,{className:`canvas-share-build-details`,children:[(0,W.jsxs)(`p`,{children:[J.target,` `,(0,W.jsx)(`strong`,{children:J.build(D.number)}),` - `,(0,W.jsx)(`code`,{children:D.commitSha.slice(0,7)}),` - `,(0,W.jsx)(`time`,{dateTime:D.publishedAt,children:ee(D.publishedAt)})]}),M?(0,W.jsx)(`p`,{children:J.oldBuild}):null]})}):null,formUnavailable:N&&P&&!D?void 0:null,beforeLinks:(0,W.jsxs)(W.Fragment,{children:[e.notice?(0,W.jsx)(`p`,{role:`status`,children:e.notice}):null,z&&!L?(0,W.jsx)(he,{value:R(z.url),label:z.label,copyLabel:J.copy(z.label,z.buildNumber),copiedLabel:J.copied,copyErrorLabel:J.copyError}):null,e.loading?(0,W.jsx)(`p`,{role:`status`,children:J.loading}):null]}),hasLinks:N&&P&&!L&&e.links.length>0,showEmpty:N&&P&&!L&&!e.loading&&!e.stale,listRef:x,listBusy:e.loading,links:(!N||!P||L?[]:e.links).map(e=>{let n=e.expiresAt!==null&&Date.parse(e.expiresAt)<=y,r=t?.[e.buildNumber];return(0,W.jsxs)(ye,{className:D&&e.buildNumberI?u(e.id,I):u(e.id)}),(0,W.jsx)(G,{icon:O,variant:`danger`,"aria-label":J.delete(e.label,e.buildNumber),description:J.delete(e.label,e.buildNumber),disabled:F||n,onClick:()=>void B(e.id,e.label)})]},e.id)}),afterLinks:(0,W.jsx)(`div`,{className:`canvas-share-list-actions`,children:N||!e.context&&!o?(0,W.jsx)(U.Button,{size:`small`,variant:`subtle`,onClick:s,disabled:e.busy||e.loading,children:J.refresh}):null})})})})}var Y={checking:`Checking sharing readiness`,checkingDetail:`Checking Hub for a successful published Build and repository access.`,connect:`Connect before sharing`,connectDetail:`Connect to Hub before sharing this prototype.`,connectAction:`Connect to Hub`,publish:`Publish before sharing`,publishDetail:`To create a share link, publish this prototype to Hub first. Your local preview stays private.`,publishPermissionUnverified:`This Hub has not confirmed publishing permission. Copilot will check access when publishing and report any permission errors.`,preparing:`Preparing your prototype`,ready:`Ready to share`,readyDetail:`Your prototype is ready to share.`,manage:`Share prototype`,unavailable:`Sharing status unavailable`,unavailableDetail:`Hub could not verify sharing readiness. Retry before continuing.`,permissionUnknown:`This Hub cannot verify sharing or publishing permission. Update Hub and retry.`,restricted:`Sharing unavailable`,publishDenied:`Publishing requires repository write access. Ask a prototype author to publish a Build.`,local:`Local development prototypes cannot create public share links.`,changed:`Sharing target changed`,changedDetail:`The repository, branch, or Hub changed. Close this dialog and reopen Share for the intended prototype.`,boundary:`Internal review requires repository access. Public share links let anyone view a published Build, not your local preview.`,close:`Close sharing readiness`},ke=`Branch not eligible for Hub registration`,X={heading:`Branch publication`,checking:`Checking...`,retry:`Retry status`,retryPublish:`Retry publish`,requested:`Requested`,awaitingCopilot:`Waiting for Copilot`,publishBranch:`Publish`,publishChanges:`Publish changes`,registration:`Publishing`,registrationFailed:`Publication delayed`,published:`Published`,alreadyPublished:`Latest changes already published`,queued:`Build queued`,building:`Building`,awaitingHub:`Awaiting Hub`,awaitingBuild:`Awaiting build`,connect:`Connect to the hub`,workflowLink:`View workflow run`,initial:`Checking branch publication.`,checkingRemote:`Checking the exact branch on the origin repository.`,detached:`Open a named branch before publishing.`,changed:`The checkout changed. Refresh publication status.`,unknown:e=>`Remote branch status is unknown. ${e||`Check GitHub access and retry.`}`,pending:`Copilot received the publish request in chat and has not pushed this branch yet. Follow its progress in chat.`,checkingHub:`Checking the Hub connection.`,disconnected:`Connect to the hub before publishing this prototype.`,hubUnavailable:`Hub verification is unavailable. Restore access and retry.`,hubUnavailableTitle:`Hub verification unavailable`,staleHub:`The Hub status belongs to a different checkout. Refresh to continue.`,workflowMissing:`This checkout has no .github/workflows/replica.yml. Set up the repository's Replica build workflow before publishing.`,dispatchFailed:`Copilot could not receive the publish request.`,absent:`This branch won't appear in the hub until you publish.`,needsPush:`The remote branch points to a different commit. Publish pushes this branch without force.`,localChanges:`Local changes are not in the published prototype. Choose how to publish them.`,needsRegistration:`Hub imported this commit. The canvas is publishing it automatically.`,registrationDenied:`Hub could not register this branch. Check repository access and branch eligibility.`,registrationErrorTitle:`Hub registration failed`,registrationReasons:new Map([[`write_access_required`,{title:ke,description:`You lack write access to this repository.`}],[`branch_not_reviewable`,{title:ke,description:`Default, reserved, and internal branches cannot be registered in Hub.`}],[`remote_branch_missing`,{title:ke,description:`The branch no longer exists on the remote repository.`}],[`branch_authorship_required`,{title:ke,description:`You have not authored a commit unique to this branch.`}],[`repository_mismatch`,{title:ke,description:`The branch belongs to a different repository.`}],[`already_registered`,{title:`Branch already registered in Hub`,description:`This branch is already registered in Hub. Refresh its status.`}],[`successful_build_required`,{title:`Hub registration delayed`,description:`Hub has not imported this checkout's successful Build yet.`}]]),ready:`Hub imported this commit and the prototype is registered.`,importFailed:`Hub could not import or build this commit. Pushing this unchanged commit does not rerun the failed work. Inspect the Build failure in Hub and repair the cause before publishing again.`,workflowUnavailable:`Workflow status is unavailable. Check GitHub access and retry.`,staleWorkflow:`Workflow status belongs to a different branch or commit.`,workflowQueued:`The Replica workflow for this commit is queued or waiting.`,workflowBuilding:`The Replica workflow is building this commit.`,workflowFailed:e=>`The Replica workflow finished with ${e||`an unsuccessful result`}. Pushing this unchanged commit does not rerun the failed work. Inspect the run and repair the cause before publishing again.`,importing:`The workflow succeeded. Waiting for Hub discovery and artifact import; this is not published yet.`,noBuild:`The exact branch and commit are on GitHub, but no matching Replica workflow run has appeared yet.`};function Ae({publication:e,busy:t,onPublish:n,onRetry:r}){if(e.kind===`ready`)return null;let i=e.kind===`requested`,a=t||i;return(0,W.jsxs)(`section`,{className:`canvas-branch-publication`,"aria-label":X.heading,children:[e.error?(0,W.jsx)(pe,{variant:`critical`,layout:`compact`,title:e.error.title,description:e.error.description}):(0,W.jsx)(`p`,{role:`status`,children:e.detail}),e.runUrl?(0,W.jsx)(`p`,{children:(0,W.jsx)(U.InlineLink,{className:`canvas-branch-publication__workflow-link`,href:e.runUrl,target:`_blank`,rel:`noopener noreferrer`,children:X.workflowLink})}):null,(e.action!==`none`||i)&&e.kind!==`disconnected`?(0,W.jsx)(`div`,{className:`canvas-branch-publication__actions`,children:(0,W.jsx)(U.Button,{variant:`primary`,size:`small`,disabled:a,"aria-busy":a,leadingVisual:a?(0,W.jsx)(L,{size:16}):void 0,onClick:e.action===`retry`?r:n,children:e.label})}):null]})}function Z({readiness:e,busy:t,shareButtonRef:n,onClose:r,onConnect:i,onPublish:a,onRetry:o,onManage:s}){let c=(0,H.useId)();return(0,W.jsxs)(le,{title:e.title,closeLabel:Y.close,onClose:r,returnFocusRef:n,descriptionId:c,children:[(0,W.jsx)(`p`,{id:c,role:`status`,children:e.detail}),[`connect`,`publish`,`ready`].includes(e.kind)?(0,W.jsx)(`p`,{children:Y.boundary}):null,e.publication?(0,W.jsx)(Ae,{publication:e.publication,dirty:!1,busy:t,onPublish:a,onRetry:o}):null,[`connect`,`ready`,`retry`].includes(e.kind)?(0,W.jsx)(U.Button,{variant:`primary`,size:`small`,disabled:t,"aria-busy":t,onClick:e.kind===`connect`?i:e.kind===`ready`?s:o,children:e.kind===`connect`?Y.connectAction:e.kind===`ready`?Y.manage:X.retry}):null]})}function je({hub:e,connection:t,publication:n,sharing:r,shareIntent:i,controlSettings:a,readiness:o,state:s,hubOpen:c,buildDetailsOpen:l,onCloseBuildDetails:u,shareButtonRef:d,hubButtonRef:f,connectionButtonRef:p,publishButtonRef:m,titleButtonRef:h}){let{intent:g,targetChanged:_}=i,v=n.presentedState;return(0,W.jsxs)(W.Fragment,{children:[t.open&&(!g||g.connecting&&!_)?(0,W.jsx)(fe,{status:e.status,pairing:t.pairing,connecting:t.connecting,error:t.error,onConnect:t.connect,onSelectHub:e.select,onResetHub:e.reset,onClose:()=>{t.close(),i.setConnecting(!1)},hubButtonRef:g?d:c?p:f}):null,g&&!n.publishDialog&&(_||!g.connecting||!t.open)?(0,W.jsx)(Z,{readiness:_?{kind:`restricted`,title:Y.changed,detail:Y.changedDetail}:o,busy:n.busy,shareButtonRef:d,onClose:()=>{i.close(),t.close()},onConnect:()=>{_||o.kind!==`connect`||(i.setConnecting(!0),t.showAndConnect())},onPublish:()=>{!_&&o.kind===`publish`&&n.publish()},onRetry:()=>void n.retry(),onManage:()=>{_||o.kind!==`ready`||(i.close(),r.open())}}):null,n.publishDialog?(0,W.jsx)(me,{busy:n.busy,error:n.publishDialogError,changes:n.publishDialog.preparation.changes,checkError:n.publishDialog.preparation.workingTree===`unavailable`?n.publishDialog.preparation.workingTreeError||q.checkFailed:void 0,remembered:n.publishDialog.preparation.remember,returnFocusRef:g?d:m,onClose:n.closePublishDialog,onChoose:(e,t)=>void n.choosePublish(e,t),onRetry:()=>void n.retryPublishCheck()},n.publishDialog.preparation.workingTree===`unavailable`?`unchecked`:`checked`):null,r.state.open?(0,W.jsx)(Oe,{state:r.state,currentCommit:s?.stats.commitSha,hasLocalChanges:s?.stats.workingTree===`changed`,shareButtonRef:d,onClose:r.close,onConnect:!e.status||[`disconnected`,`pairing`,`unconfigured`].includes(e.status.state)?()=>{r.close(),t.show()}:void 0,onRefresh:()=>void r.refresh(),onCreate:r.create,onDelete:r.remove,onOpen:(e,t)=>void r.openLink(e,t),controlSettings:a,onAuthorize:()=>void r.authorize()}):null,l&&v?(0,W.jsx)(ue,{state:v,titleButtonRef:h,onClose:u}):null]})}function Me({address:e,addressRef:t,canGoBack:n,canGoForward:r,appearance:a,onAppearanceChange:o,onBack:s,onForward:c,onNavigate:l,onOpenTab:u,onReload:d}){let[f,p]=(0,H.useState)(null),m=f?.address===e?f.value:e,h=f?.address===e?f.error:``;function g(t){t.preventDefault();try{let t=new URL(m.trim(),e);if(![`http:`,`https:`].includes(t.protocol)||t.origin!==new URL(e).origin||t.username||t.password){p({address:e,value:m,error:K.browserAddressOrigin});return}p(null),l(t.href)}catch{p({address:e,value:m,error:K.browserAddressInvalid})}}return(0,W.jsx)(U.ThemeProvider,{colorMode:`auto`,className:`canvas-browser-theme`,children:(0,W.jsxs)(`nav`,{className:`canvas-browser-bar`,"aria-label":K.browserNavigation,children:[(0,W.jsxs)(`div`,{className:`canvas-browser-bar__navigation`,children:[(0,W.jsx)(`button`,{type:`button`,"aria-label":K.browserBack,disabled:!n,onClick:s,children:(0,W.jsx)(x,{size:16})}),(0,W.jsx)(`button`,{type:`button`,"aria-label":K.browserForward,disabled:!r,onClick:c,children:(0,W.jsx)(y,{size:16})}),(0,W.jsx)(`button`,{type:`button`,"aria-label":K.browserReload,onClick:d,children:(0,W.jsx)(L,{size:16})})]}),(0,W.jsxs)(`form`,{className:`canvas-browser-bar__address`,onSubmit:g,children:[(0,W.jsx)(`input`,{ref:t,"aria-label":K.browserAddress,"aria-invalid":!!h,"aria-describedby":h?`canvas-browser-address-error`:void 0,spellCheck:!1,value:m,onChange:t=>{p({address:e,value:t.target.value,error:``})},onFocus:e=>e.currentTarget.select(),onKeyDown:e=>{e.key===`Escape`&&(p(null),e.currentTarget.blur())}}),h?(0,W.jsx)(`span`,{id:`canvas-browser-address-error`,className:`canvas-browser-bar__error`,role:`alert`,children:h}):null]}),(0,W.jsxs)(`div`,{className:`canvas-browser-bar__tools`,children:[(0,W.jsx)(`button`,{type:`button`,"aria-label":K.browserOpenTab,title:K.browserOpenTab,onClick:()=>{u().catch(t=>{p({address:e,value:m,error:t instanceof Error?t.message:String(t)})})},children:(0,W.jsx)(ne,{size:16})}),(0,W.jsxs)(`div`,{className:`canvas-browser-bar__appearance`,role:`group`,"aria-label":K.browserAppearance,children:[(0,W.jsx)(`button`,{type:`button`,"aria-label":K.browserLight,"aria-pressed":a===`light`,onClick:()=>o(`light`),children:(0,W.jsx)(P,{size:16})}),(0,W.jsx)(`button`,{type:`button`,"aria-label":K.browserDark,"aria-pressed":a===`dark`,onClick:()=>o(`dark`),children:(0,W.jsx)(i,{size:16})})]})]})]})})}var Ne=e(t((e=>{var t=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),n=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r=55296&&i<=56319&&r{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),i=t((e=>{Object.defineProperty(e,"__esModule",{value:!0});var t=r();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t}));e.validateShape=P;var a={type:`object`,additionalProperties:!1,required:[`version`,`scope`,`controls`],properties:{$schema:{type:`string`},version:{const:1},scope:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},role:{enum:[`shared`,`page`]},container:{$ref:`#/$defs/selector`},panel:{type:`object`,additionalProperties:!1,required:[`width`],properties:{width:{type:`integer`,minimum:160,maximum:4096}}},groups:{type:`array`,maxItems:100,items:{type:`object`,additionalProperties:!1,required:[`id`,`label`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},when:{$ref:`#/$defs/condition`}}}},controls:{type:`array`,maxItems:500,items:{oneOf:[{$ref:`#/$defs/boolean`},{$ref:`#/$defs/number`},{$ref:`#/$defs/slider`},{$ref:`#/$defs/choice`},{$ref:`#/$defs/checkboxGroup`},{$ref:`#/$defs/text`},{$ref:`#/$defs/color`},{$ref:`#/$defs/button`}]}}}},o=Object.prototype.hasOwnProperty,s=n().default,c=RegExp(`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`,`u`),l={type:[`string`,`number`,`boolean`]},u=i().default,d={validate:f};function f(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0,s=o,p=!1,m=null,h=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.equals===void 0){let e={instancePath:t,schemaPath:`#/oneOf/0/required`,keyword:`required`,params:{missingProperty:`equals`},message:`must have required property 'equals'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`equals`){let e={instancePath:t,schemaPath:`#/oneOf/0/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.equals!==void 0){let n=e.equals;if(typeof n!=`string`&&!(typeof n==`number`&&isFinite(n))&&typeof n!=`boolean`){let e={instancePath:t+`/equals`,schemaPath:`#/$defs/scalar/type`,keyword:`type`,params:{type:l.type},message:`must be string,number,boolean`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=h===o;g&&(p=!0,m=0);let _=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.in===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`in`},message:`must have required property 'in'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`in`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.in!==void 0){let n=e.in;if(Array.isArray(n)){if(n.length>20){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/maxItems`,keyword:`maxItems`,params:{limit:20},message:`must NOT have more than 20 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r1){outer0:for(;r--;)for(i=r;i--;)if(u(n[r],n[i])){let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[e]:a.push(e),o++;break outer0}}}else{let e={instancePath:t+`/in`,schemaPath:`#/oneOf/1/properties/in/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=_===o;if(g&&p)p=!1,m=[m,1];else{g&&(p=!0,m=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.control===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`control`},message:`must have required property 'control'`};a===null?a=[e]:a.push(e),o++}if(e.includes===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`includes`},message:`must have required property 'includes'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`control`&&n!==`includes`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.control!==void 0){let n=e.control;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/control`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.includes!==void 0&&typeof e.includes!=`string`){let e={instancePath:t+`/includes`,schemaPath:`#/oneOf/2/properties/includes/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var g=n===o;if(g&&p)p=!1,m=[m,2];else{g&&(p=!0,m=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.all===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`all`},message:`must have required property 'all'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`all`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.all!==void 0){let n=e.all;if(Array.isArray(n)){if(n.length>10){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/all`,schemaPath:`#/oneOf/3/properties/all/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r10){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/maxItems`,keyword:`maxItems`,params:{limit:10},message:`must NOT have more than 10 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/any`,schemaPath:`#/oneOf/4/properties/any/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/0/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=d===o;f&&(l=!0,u=0);let v=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.selector===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`selector`},message:`must have required property 'selector'`};a===null?a=[e]:a.push(e),o++}if(e.property===void 0){let e={instancePath:t,schemaPath:`#/oneOf/1/required`,keyword:`required`,params:{missingProperty:`property`},message:`must have required property 'property'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`selector`&&n!==`property`){let e={instancePath:t,schemaPath:`#/oneOf/1/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`style`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/1/properties/type/const`,keyword:`const`,params:{allowedValue:`style`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.selector!==void 0){let n=e.selector;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/selector`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.property!==void 0){let n=e.property;if(typeof n==`string`){if(s(n)>100){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/maxLength`,keyword:`maxLength`,params:{limit:100},message:`must NOT have more than 100 characters`};a===null?a=[e]:a.push(e),o++}if(!m.test(n)){let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/pattern`,keyword:`pattern`,params:{pattern:`^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$`},message:`must match pattern "^(--[a-zA-Z0-9_-]+|[a-z][a-z-]*)$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/property`,schemaPath:`#/oneOf/1/properties/property/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/1/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=v===o;if(f&&l)l=!1,u=[u,1];else{f&&(l=!0,u=1);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.key===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`key`},message:`must have required property 'key'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/2/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`key`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/2/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`query`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/2/properties/type/const`,keyword:`const`,params:{allowedValue:`query`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.key!==void 0){let n=e.key;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/key`,schemaPath:`#/oneOf/2/properties/key/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/2/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[2].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/2/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,2];else{f&&(l=!0,u=2);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.mode===void 0){let e={instancePath:t,schemaPath:`#/oneOf/3/required`,keyword:`required`,params:{missingProperty:`mode`},message:`must have required property 'mode'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`mode`){let e={instancePath:t,schemaPath:`#/oneOf/3/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`hash`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/3/properties/type/const`,keyword:`const`,params:{allowedValue:`hash`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.mode!==void 0){let n=e.mode;if(n!==`in-place`&&n!==`navigate`){let e={instancePath:t+`/mode`,schemaPath:`#/oneOf/3/properties/mode/enum`,keyword:`enum`,params:{allowedValues:p.oneOf[3].properties.mode.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}}else{let e={instancePath:t,schemaPath:`#/oneOf/3/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;if(f&&l)l=!1,u=[u,3];else{f&&(l=!0,u=3);let n=o;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.type===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.object===void 0){let e={instancePath:t,schemaPath:`#/oneOf/4/required`,keyword:`required`,params:{missingProperty:`object`},message:`must have required property 'object'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`type`&&n!==`object`&&n!==`read`&&n!==`write`&&n!==`action`&&n!==`subscribe`&&n!==`pollMs`){let e={instancePath:t,schemaPath:`#/oneOf/4/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.type!==void 0&&e.type!==`api`){let e={instancePath:t+`/type`,schemaPath:`#/oneOf/4/properties/type/const`,keyword:`const`,params:{allowedValue:`api`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.object!==void 0){let n=e.object;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(!h.test(n)){let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$`},message:`must match pattern "^[a-zA-Z_$][a-zA-Z0-9_$]*(\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/object`,schemaPath:`#/oneOf/4/properties/object/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.read!==void 0){let n=e.read;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/read`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.write!==void 0){let n=e.write;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/write`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.action!==void 0){let n=e.action;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/action`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.subscribe!==void 0){let n=e.subscribe;if(typeof n==`string`){if(s(n)>64){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/maxLength`,keyword:`maxLength`,params:{limit:64},message:`must NOT have more than 64 characters`};a===null?a=[e]:a.push(e),o++}if(!g.test(n)){let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/pattern`,keyword:`pattern`,params:{pattern:`^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$`},message:`must match pattern "^(?!constructor$|prototype$|__proto__$)[a-zA-Z_$][a-zA-Z0-9_$]*$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/subscribe`,schemaPath:`#/$defs/method/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.pollMs!==void 0){let n=e.pollMs;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),o++}if(typeof n==`number`&&isFinite(n)){if(n>6e4||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:6e4},message:`must be <= 60000`};a===null?a=[e]:a.push(e),o++}if(n<100||isNaN(n)){let e={instancePath:t+`/pollMs`,schemaPath:`#/oneOf/4/properties/pollMs/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:100},message:`must be >= 100`};a===null?a=[e]:a.push(e),o++}}}}else{let e={instancePath:t,schemaPath:`#/oneOf/4/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}var f=n===o;f&&l?(l=!1,u=[u,4]):f&&(l=!0,u=4)}}}if(l)o=c,a!==null&&(c?a.length=c:a=null);else{let e={instancePath:t,schemaPath:`#/oneOf`,keyword:`oneOf`,params:{passingSchemas:u},message:`must match exactly one schema in oneOf`};a===null?a=[e]:a.push(e),o++}return _.errors=a,o===0}function v(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return v.errors=a,o===0}var y={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`number`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function b(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return b.errors=a,l===0}var x={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`min`,`max`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{const:`slider`},default:{type:`number`},binding:{$ref:`#/$defs/binding`},min:{type:`number`},max:{type:`number`},step:{type:`number`,exclusiveMinimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function S(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return S.errors=a,l===0}var C={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`,`options`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`select`,`radio`,`segmented`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},options:{$ref:`#/$defs/options`},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function w(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return w.errors=a,o===0}function T(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return T.errors=a,o===0}var E={type:`object`,additionalProperties:!1,required:[`id`,`label`,`type`,`default`],properties:{id:{$ref:`#/$defs/id`},label:{$ref:`#/$defs/label`},type:{enum:[`text`,`textarea`]},default:{type:`string`},binding:{$ref:`#/$defs/binding`},minLength:{type:`integer`,minimum:0},maxLength:{type:`integer`,minimum:0},group:{$ref:`#/$defs/id`},when:{$ref:`#/$defs/condition`}}};function D(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return D.errors=a,l===0}var O=RegExp(`^#[0-9a-fA-F]{6}$`,`u`);function k(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return k.errors=a,o===0}function A(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return A.errors=a,o===0}function j(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let l=null,u=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.version===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`version`},message:`must have required property 'version'`};l===null?l=[e]:l.push(e),u++}if(e.scope===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`scope`},message:`must have required property 'scope'`};l===null?l=[e]:l.push(e),u++}if(e.controls===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`controls`},message:`must have required property 'controls'`};l===null?l=[e]:l.push(e),u++}for(let n in e)if(!o.call(a.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};l===null?l=[e]:l.push(e),u++}if(e.$schema!==void 0&&typeof e.$schema!=`string`){let e={instancePath:t+`/$schema`,schemaPath:`#/properties/%24schema/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}if(e.version!==void 0&&e.version!==1){let e={instancePath:t+`/version`,schemaPath:`#/properties/version/const`,keyword:`const`,params:{allowedValue:1},message:`must be equal to constant`};l===null?l=[e]:l.push(e),u++}if(e.scope!==void 0){let n=e.scope;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/scope`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.role!==void 0){let n=e.role;if(n!==`shared`&&n!==`page`){let e={instancePath:t+`/role`,schemaPath:`#/properties/role/enum`,keyword:`enum`,params:{allowedValues:a.properties.role.enum},message:`must be equal to one of the allowed values`};l===null?l=[e]:l.push(e),u++}}if(e.container!==void 0){let n=e.container;if(typeof n==`string`){if(s(n)>512){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/maxLength`,keyword:`maxLength`,params:{limit:512},message:`must NOT have more than 512 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/container`,schemaPath:`#/$defs/selector/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}if(e.panel!==void 0){let n=e.panel;if(n&&typeof n==`object`&&!Array.isArray(n)){if(n.width===void 0){let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/required`,keyword:`required`,params:{missingProperty:`width`},message:`must have required property 'width'`};l===null?l=[e]:l.push(e),u++}for(let e in n)if(e!==`width`){let n={instancePath:t+`/panel`,schemaPath:`#/properties/panel/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:e},message:`must NOT have additional properties`};l===null?l=[n]:l.push(n),u++}if(n.width!==void 0){let e=n.width;if(typeof e!=`number`||e%1||isNaN(e)||!isFinite(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};l===null?l=[e]:l.push(e),u++}if(typeof e==`number`&&isFinite(e)){if(e>4096||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/maximum`,keyword:`maximum`,params:{comparison:`<=`,limit:4096},message:`must be <= 4096`};l===null?l=[e]:l.push(e),u++}if(e<160||isNaN(e)){let e={instancePath:t+`/panel/width`,schemaPath:`#/properties/panel/properties/width/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:160},message:`must be >= 160`};l===null?l=[e]:l.push(e),u++}}}}else{let e={instancePath:t+`/panel`,schemaPath:`#/properties/panel/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}if(e.groups!==void 0){let n=e.groups;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};l===null?l=[e]:l.push(e),u++}if(s(n)<1){let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};l===null?l=[e]:l.push(e),u++}}else{let e={instancePath:t+`/groups/`+r+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};l===null?l=[e]:l.push(e),u++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/groups/`+r+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(l=l===null?f.errors:l.concat(f.errors),u=l.length))}else{let e={instancePath:t+`/groups/`+r,schemaPath:`#/properties/groups/items/type`,keyword:`type`,params:{type:`object`},message:`must be object`};l===null?l=[e]:l.push(e),u++}}}else{let e={instancePath:t+`/groups`,schemaPath:`#/properties/groups/type`,keyword:`type`,params:{type:`array`},message:`must be array`};l===null?l=[e]:l.push(e),u++}}if(e.controls!==void 0){let n=e.controls;if(Array.isArray(n)){if(n.length>500){let e={instancePath:t+`/controls`,schemaPath:`#/properties/controls/maxItems`,keyword:`maxItems`,params:{limit:500},message:`must NOT have more than 500 items`};l===null?l=[e]:l.push(e),u++}let e=n.length;for(let r=0;r100){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/sets`,schemaPath:`#/properties/sets/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`boolean`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`boolean`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0&&typeof e.default!=`boolean`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`boolean`},message:`must be boolean`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return L.errors=a,o===0}e.number=R;function R(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(y.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`number`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`number`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return R.errors=a,l===0}e.slider=z;function z(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}if(e.min===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`min`},message:`must have required property 'min'`};a===null?a=[e]:a.push(e),l++}if(e.max===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`max`},message:`must have required property 'max'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(x.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0&&e.type!==`slider`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`slider`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),l++}if(e.default!==void 0){let n=e.default;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.min!==void 0){let n=e.min;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/min`,schemaPath:`#/properties/min/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.max!==void 0){let n=e.max;if(!(typeof n==`number`&&isFinite(n))){let e={instancePath:t+`/max`,schemaPath:`#/properties/max/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.step!==void 0){let n=e.step;if(typeof n==`number`&&isFinite(n)){if(n<=0||isNaN(n)){let e={instancePath:t+`/step`,schemaPath:`#/properties/step/exclusiveMinimum`,keyword:`exclusiveMinimum`,params:{comparison:`>`,limit:0},message:`must be > 0`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/step`,schemaPath:`#/properties/step/type`,keyword:`type`,params:{type:`number`},message:`must be number`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return z.errors=a,l===0}e.choice=B;function B(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0){let n=e.type;if(n!==`select`&&n!==`radio`&&n!==`segmented`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:C.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),o++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return B.errors=a,o===0}e.checkboxGroup=ee;function ee(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}if(e.options===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`options`},message:`must have required property 'options'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!=="default"&&n!==`options`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`checkboxGroup`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`checkboxGroup`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.default!==void 0){let n=e.default;if(Array.isArray(n)){let e=n.length;for(let r=0;r1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/default`,schemaPath:`#/properties/default/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.options!==void 0){let n=e.options;if(Array.isArray(n)){if(n.length>100){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/maxItems`,keyword:`maxItems`,params:{limit:100},message:`must NOT have more than 100 items`};a===null?a=[e]:a.push(e),o++}if(n.length<1){let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/minItems`,keyword:`minItems`,params:{limit:1},message:`must NOT have fewer than 1 items`};a===null?a=[e]:a.push(e),o++}let e=n.length;for(let r=0;r200){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(e)<1){let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/options/`+r,schemaPath:`#/$defs/options/items/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}let r=n.length,i;if(r>1){let e={};for(;r--;){let s=n[r];if(typeof s==`string`){if(typeof e[s]==`number`){i=e[s];let n={instancePath:t+`/options`,schemaPath:`#/$defs/options/uniqueItems`,keyword:`uniqueItems`,params:{i:r,j:i},message:`must NOT have duplicate items (items ## `+i+` and `+r+` are identical)`};a===null?a=[n]:a.push(n),o++;break}e[s]=r}}}}else{let e={instancePath:t+`/options`,schemaPath:`#/$defs/options/type`,keyword:`type`,params:{type:`array`},message:`must be array`};a===null?a=[e]:a.push(e),o++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ee.errors=a,o===0}e.text=V;function V(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,l=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),l++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),l++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),l++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),l++}for(let n in e)if(!o.call(E.properties,n)){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),l++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),l++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}if(e.type!==void 0){let n=e.type;if(n!==`text`&&n!==`textarea`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/enum`,keyword:`enum`,params:{allowedValues:E.properties.type.enum},message:`must be equal to one of the allowed values`};a===null?a=[e]:a.push(e),l++}}if(e.default!==void 0&&typeof e.default!=`string`){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),l=a.length)),e.minLength!==void 0){let n=e.minLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/minLength`,schemaPath:`#/properties/minLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.maxLength!==void 0){let n=e.maxLength;if(typeof n!=`number`||n%1||isNaN(n)||!isFinite(n)){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/type`,keyword:`type`,params:{type:`integer`},message:`must be integer`};a===null?a=[e]:a.push(e),l++}if(typeof n==`number`&&isFinite(n)&&(n<0||isNaN(n))){let e={instancePath:t+`/maxLength`,schemaPath:`#/properties/maxLength/minimum`,keyword:`minimum`,params:{comparison:`>=`,limit:0},message:`must be >= 0`};a===null?a=[e]:a.push(e),l++}}if(e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),l++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),l++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),l=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),l++}return V.errors=a,l===0}e.color=te;function te(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}if(e.default===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`default`},message:`must have required property 'default'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!=="default"&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`color`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`color`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.default!==void 0){let n=e.default;if(typeof n==`string`){if(!O.test(n)){let e={instancePath:t+`/default`,schemaPath:`#/properties/default/pattern`,keyword:`pattern`,params:{pattern:`^#[0-9a-fA-F]{6}$`},message:`must match pattern "^#[0-9a-fA-F]{6}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/default`,schemaPath:`#/properties/default/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return te.errors=a,o===0}e.button=ne;function ne(e,{instancePath:t=``,parentData:n,parentDataProperty:r,rootData:i=e}={}){let a=null,o=0;if(e&&typeof e==`object`&&!Array.isArray(e)){if(e.id===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`id`},message:`must have required property 'id'`};a===null?a=[e]:a.push(e),o++}if(e.label===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`label`},message:`must have required property 'label'`};a===null?a=[e]:a.push(e),o++}if(e.type===void 0){let e={instancePath:t,schemaPath:`#/required`,keyword:`required`,params:{missingProperty:`type`},message:`must have required property 'type'`};a===null?a=[e]:a.push(e),o++}for(let n in e)if(n!==`id`&&n!==`label`&&n!==`type`&&n!==`binding`&&n!==`group`&&n!==`when`){let e={instancePath:t,schemaPath:`#/additionalProperties`,keyword:`additionalProperties`,params:{additionalProperty:n},message:`must NOT have additional properties`};a===null?a=[e]:a.push(e),o++}if(e.id!==void 0){let n=e.id;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/id`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.label!==void 0){let n=e.label;if(typeof n==`string`){if(s(n)>200){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/maxLength`,keyword:`maxLength`,params:{limit:200},message:`must NOT have more than 200 characters`};a===null?a=[e]:a.push(e),o++}if(s(n)<1){let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/minLength`,keyword:`minLength`,params:{limit:1},message:`must NOT have fewer than 1 characters`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/label`,schemaPath:`#/$defs/label/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}if(e.type!==void 0&&e.type!==`button`){let e={instancePath:t+`/type`,schemaPath:`#/properties/type/const`,keyword:`const`,params:{allowedValue:`button`},message:`must be equal to constant`};a===null?a=[e]:a.push(e),o++}if(e.binding!==void 0&&(_(e.binding,{instancePath:t+`/binding`,parentData:e,parentDataProperty:`binding`,rootData:i})||(a=a===null?_.errors:a.concat(_.errors),o=a.length)),e.group!==void 0){let n=e.group;if(typeof n==`string`){if(!c.test(n)){let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/pattern`,keyword:`pattern`,params:{pattern:`^[a-zA-Z][a-zA-Z0-9_-]{0,63}$`},message:`must match pattern "^[a-zA-Z][a-zA-Z0-9_-]{0,63}$"`};a===null?a=[e]:a.push(e),o++}}else{let e={instancePath:t+`/group`,schemaPath:`#/$defs/id/type`,keyword:`type`,params:{type:`string`},message:`must be string`};a===null?a=[e]:a.push(e),o++}}e.when!==void 0&&(f(e.when,{instancePath:t+`/when`,parentData:e,parentDataProperty:`when`,rootData:i})||(a=a===null?f.errors:a.concat(f.errors),o=a.length))}else{let e={instancePath:t,schemaPath:`#/type`,keyword:`type`,params:{type:`object`},message:`must be object`};a===null?a=[e]:a.push(e),o++}return ne.errors=a,o===0}}))(),1),{validateDocumentShape:Pe,validateDeclaration:Fe}=Ne.default,Ie={boolean:`boolean`,number:`number`,slider:`slider`,select:`choice`,radio:`choice`,segmented:`choice`,checkboxGroup:`checkboxGroup`,text:`text`,textarea:`text`,color:`color`,button:`button`};function Le(e){let t=[...Fe.errors].filter(e=>!/^\/controls\/\d+(?:\/|$)/.test(e.instancePath)).map(e=>({...e}));return Array.isArray(e?.controls)&&e.controls.forEach((e,n)=>{let r=Object.hasOwn(Ie,e?.type)?Ie[e.type]:void 0,i=r&&Ne.default[r];i?i(e)||t.push(...i.errors.map(e=>({...e,instancePath:`/controls/${n}${e.instancePath}`}))):t.push({instancePath:`/controls/${n}/type`,message:`must name a supported control type`})}),t.map(e=>({path:e.instancePath,message:e.keyword===`additionalProperties`?`${e.message}: "${e.params.additionalProperty}"`:e.message,keyword:e.keyword,params:e.params}))}var Re=class extends Error{constructor(e){super(`Invalid controls.replica.json:\n${e.map(e=>` ${e.path||`/`}: ${e.message}`).join(`
+`)}`),this.name=`ControlsValidationError`,this.issues=e}};function ze(e,t){switch(e.type){case`boolean`:return typeof t==`boolean`?null:`must be a boolean`;case`number`:case`slider`:{if(typeof t!=`number`||!Number.isFinite(t))return`must be a finite number`;if(e.min!==void 0&&t= min`;if(e.max!==void 0&&t>e.max)return`must be <= max`;let n=(t-e.min)/(e.step??1);return!Number.isFinite(n)||Math.abs(n-Math.round(n))>1e-8?`must align with step (anchored at min)`:null}case`select`:case`radio`:case`segmented`:return e.options.includes(t)?null:`must be a declared option`;case`checkboxGroup`:return Array.isArray(t)&&new Set(t).size===t.length&&t.every(t=>e.options.includes(t))?null:`must be unique declared options`;case`text`:case`textarea`:return typeof t==`string`?e.minLength!==void 0&&[...t].lengthe.maxLength?`longer than maxLength`:null:`must be a string`;case`color`:return typeof t==`string`&&/^#[0-9a-fA-F]{6}$/.test(t)?null:`must be a six-digit hex color`;default:return`button controls have no value`}}function Be(e){return e?e.control?[e.control]:(e.all??e.any).flatMap(Be):[]}function Ve(e){let t=new Map((e.groups??[]).map(e=>[e.id,e])),n=new Map(e.controls.map(e=>[e.id,e])),r=new Set,i=new Set,a=[];function o(e){if(r.has(e))return;if(i.has(e))throw new Re([{path:`/controls/${e}/when`,message:`conditional dependency cycle (including groups)`}]);i.add(e);let s=n.get(e);for(let e of[...Be(s.when),...Be(t.get(s.group)?.when)])o(e);i.delete(e),r.add(e),a.push(e)}for(let e of n.keys())o(e);return a}function He(e){let t=new Set;function n(e,r=0){if(r>24)throw new Re([{path:`/`,message:`document nesting exceeds 24`}]);if(typeof e==`number`&&!Number.isFinite(e))throw new Re([{path:`/`,message:`numbers must be finite`}]);if(![`string`,`number`,`boolean`,`object`].includes(typeof e))throw new Re([{path:`/`,message:`must contain only JSON values`}]);if(e&&typeof e==`object`){if(!Array.isArray(e)&&Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null)throw new Re([{path:`/`,message:`must contain only JSON objects`}]);if(t.has(e))throw new Re([{path:`/`,message:`must be an acyclic JSON document`}]);t.add(e);for(let t of Object.values(e))n(t,r+1);t.delete(e)}}n(e)}function Ue(e){if(He(e),!Fe(e))throw new Re(Le(e));let t=[];function n(e,n){t.push({path:e,message:n})}let r=new Set,i=new Map((e.groups??[]).map(e=>[e.id,e])),a=new Map(e.controls.map(e=>[e.id,e]));for(let[t,i]of[[`groups`,e.groups??[]],[`controls`,e.controls]])i.forEach((e,i)=>{r.has(e.id)&&n(`/${t}/${i}/id`,`duplicate ID ${e.id}`),r.add(e.id)});function o(e,t,r=0){if(!e)return;if(r>4){n(t,`conditions support at most five levels`);return}if(e.all||e.any){let n=e.all?`all`:`any`;e[n].forEach((e,i)=>o(e,`${t}/${n}/${i}`,r+1));return}let i=a.get(e.control);if(!i||i.type===`button`)n(t,`condition must reference a value control`);else if(`includes`in e)(i.type!==`checkboxGroup`||!i.options.includes(e.includes))&&n(t,`includes requires a declared checkboxGroup option`);else if(i.type===`checkboxGroup`)n(t,`checkboxGroup conditions must use includes`);else for(let r of`in`in e?e.in:[e.equals]){let e=ze(i,r);e&&n(t,`invalid condition for ${i.id}: ${e}`)}}if(e.controls.forEach((e,t)=>{let r=`/controls/${t}`;if(e.group&&!i.has(e.group)&&n(`${r}/group`,`unknown group`),e.min!==void 0&&e.max!==void 0&&e.min>e.max&&n(r,`min must not exceed max`),e.minLength!==void 0&&e.maxLength!==void 0&&e.minLength>e.maxLength&&n(r,`minLength must not exceed maxLength`),e.type===`segmented`&&e.options.length>3&&n(`${r}/options`,`segmented supports at most three options`),e.type!==`button`){let t=ze(e,e.default);t&&n(`${r}/default`,t)}o(e.when,`${r}/when`)}),(e.groups??[]).forEach((e,t)=>o(e.when,`/groups/${t}/when`)),t.length)throw new Re(t);return Ve(e),e}function We(e,t){let[n,r]=(0,H.useState)(e),[i,a]=(0,H.useState)(null),o=(0,H.useRef)(e),s=(0,H.useRef)(e),c=(0,H.useRef)(0),l=(0,H.useRef)(!1);(0,H.useLayoutEffect)(()=>{s.current=e,l.current||(o.current=e,r(e))},[e]),(0,H.useLayoutEffect)(()=>()=>{c.current++},[]);function u(e){c.current++,l.current=!0,o.current=e,r(e),a(null)}function d(){c.current++,l.current=!1,o.current=s.current,r(s.current),a(null)}function f(e,n=e){u(e);let i=c.current;Promise.resolve().then(()=>t(n)).then(e=>{c.current===i&&(l.current=!1,o.current=e&&`value`in e?e.value:s.current,r(o.current))}).catch(()=>{c.current===i&&(d(),a(K.controlsValueNotApplied))})}return{draft:n,error:i,current:()=>o.current,stage:u,commit:f,reset:d}}function Ge(e){let t=e.step??1,n=Math.max(...[e.min,e.max,t].map(e=>{let[t=``,n=`0`]=String(e).split(`e`);return Math.max(0,(t.split(`.`)[1]?.length??0)-Number(n))})),r=Math.max(...[e.min,e.max].map(e=>n<=100?e.toFixed(n).length:String(e).length),String(e.default).length,String(t).length);return e.type===`slider`?`calc(${r}ch + var(--hub-space-8) * 2)`:`calc(${r}ch + var(--hub-space-8) * 2 + 1.25rem)`}function Ke({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=We(n,a),[s,c]=(0,H.useState)(null);function l(e){let n=e.target.value,r=t.type===`number`||t.type===`slider`?n===``?NaN:Number(n):n,i=ze(t,r);c(i),i?o.stage(n):o.commit(n,r)}let u=s||o.error,d=t.type===`number`||t.type===`slider`,f=t.type===`slider`?{"--controls-slider-progress":`${t.min===t.max?100:(Number(n)-t.min)/(t.max-t.min)*100}%`}:void 0,p=[i?`${e}-hint`:void 0,u?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0,m={id:e,disabled:r,value:String(o.draft),onChange:l,"aria-invalid":u?!0:void 0,"aria-describedby":p,onBlur:()=>{s&&(o.reset(),c(null))}},h;return h=t.type===`textarea`?(0,W.jsx)(U.Textarea,{...m,rows:2,resize:`vertical`}):d?(0,W.jsx)(U.TextInput,{...m,className:t.type===`slider`?`controls-number-input controls-number-input--slider`:`controls-number-input`,type:`number`,min:t.min,max:t.max,step:t.step??1,validationStatus:u?`error`:void 0,"aria-labelledby":`${e}-label`,style:{width:Ge(t)}}):t.type===`color`?(0,W.jsx)(`input`,{...m,className:`controls-native-color`,type:`color`}):(0,W.jsx)(U.TextInput,{...m,type:`text`}),(0,W.jsxs)(U.FormControl,{id:e,className:d?`controls-field controls-field--${t.type}`:`controls-field`,fullWidth:!d||t.type===`slider`,validationStatus:u?`error`:void 0,children:[d?(0,W.jsxs)(`div`,{className:`controls-field-heading`,children:[(0,W.jsx)(U.FormControl.Label,{id:`${e}-label`,htmlFor:e,className:`controls-field-label`,children:t.label}),t.type===`slider`?(0,W.jsxs)(`div`,{className:`controls-slider-row`,children:[(0,W.jsx)(`input`,{...m,id:`${e}-slider`,value:String(n),className:`controls-native-slider`,type:`range`,style:f,min:t.min,max:t.max,step:t.step??1,"aria-labelledby":`${e}-label`}),h]}):h]}):(0,W.jsx)(U.FormControl.Label,{className:`controls-field-label`,children:t.label}),d?null:h,i?(0,W.jsx)(U.FormControl.Hint,{children:(0,W.jsx)(`span`,{role:`status`,children:i})}):null,u?(0,W.jsx)(U.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:u}):null]})}function qe({id:e,control:t,value:n,disabled:r,message:i,onCommit:a}){let o=We(n,a),s=[i?`${e}-unavailable`:void 0,o.error?`${e}-validation`:void 0].filter(Boolean).join(` `)||void 0;if(t.type===`boolean`||t.type===`select`)return(0,W.jsxs)(U.FormControl,{id:e,className:t.type===`boolean`?`controls-field controls-choice-row`:`controls-field controls-field--select`,fullWidth:t.type===`boolean`,validationStatus:o.error?`error`:void 0,children:[t.type===`select`?(0,W.jsx)(U.FormControl.Label,{className:`controls-field-label`,children:t.label}):null,t.type===`boolean`?(0,W.jsx)(U.Checkbox,{className:`controls-choice-mark`,disabled:r,"aria-describedby":s,checked:o.draft===!0,onChange:e=>o.commit(e.target.checked)}):(0,W.jsx)(U.Select,{className:`controls-select-input`,disabled:r,"aria-describedby":s,value:o.draft,onChange:e=>o.commit(e.target.value),children:t.options.map(e=>(0,W.jsx)(U.Select.Option,{value:e,children:e},e))}),t.type===`boolean`?(0,W.jsx)(U.FormControl.Label,{className:`controls-choice-label`,children:t.label}):null,i?(0,W.jsx)(U.FormControl.Hint,{children:(0,W.jsx)(`span`,{role:`status`,children:i})}):null,o.error?(0,W.jsx)(U.FormControl.Validation,{className:`controls-field-validation`,"aria-live":`polite`,children:o.error}):null]});let c=t.type===`checkboxGroup`,l=t.type===`segmented`,u=c?U.CheckboxGroup:U.RadioGroup,d=c?U.Checkbox:U.Radio;return(0,W.jsxs)(u,{id:e,className:`controls-field`,"aria-disabled":r||void 0,"aria-describedby":s,children:[(0,W.jsx)(u.Label,{className:`controls-choice-group-label`,children:t.label}),(0,W.jsx)(`div`,{className:l?`controls-segments`:`controls-options`,children:t.options.map((t,n)=>{let i=`${e}-${n}`,a=c?o.draft.includes(t):o.draft===t,u=(0,W.jsx)(d,{className:c?`controls-choice-mark`:`controls-choice-mark controls-choice-mark--radio`,id:i,name:e,value:t,checked:a,disabled:r,"aria-describedby":s,onChange:e=>{let n=o.current();o.commit(c?e.target.checked?[...n,t]:n.filter(e=>e!==t):t)}});return l?(0,W.jsxs)(`label`,{htmlFor:i,className:`controls-segment`,title:t,children:[(0,W.jsx)(ce,{children:u}),(0,W.jsx)(U.Text,{as:`span`,size:`100`,weight:`medium`,children:t})]},t):(0,W.jsxs)(U.FormControl,{id:i,className:`controls-field controls-choice-row`,children:[u,(0,W.jsx)(U.FormControl.Label,{className:`controls-choice-label`,children:t})]},t)})}),i?(0,W.jsx)(U.Text,{as:`span`,id:`${e}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:i}):null,o.error?(0,W.jsx)(u.Validation,{variant:`error`,role:`status`,children:o.error}):null]})}function Je(e,t){let n=e.snapshot.bindings?.[t.id],r=e.snapshot.actions[t.id];return{scope:e.declaration.scope,id:t.id,visible:e.snapshot.visible[t.id]===!0,available:(t.type!==`button`||r?.available===!0)&&(!n?.error||n.available===!0),busy:n?.busy===!0||r?.busy===!0,error:n?.error||(t.type===`button`&&!r?.available?K.controlsActionUnavailable:``)}}function Ye({scopes:e,disabled:t=!1,onCommand:n,collapsedGroups:r,onGroupCollapse:i}){let a=(0,H.useId)(),o=(0,H.useRef)(null),s=(0,H.useRef)(null),[c,l]=(0,H.useState)({});(0,H.useLayoutEffect)(()=>{s.current&&!s.current.isConnected&&(document.activeElement===document.body&&o.current?.focus(),s.current=null)},[e]);function u(e,r){if(!e.snapshot.visible[r.id])return null;let i=`${a}-${e.declaration.scope}-${r.id}`,o=e.snapshot.values[r.id];function s(t){return n(`update`,e.declaration.scope,r.id,t)}let c=e.snapshot.bindings?.[r.id],l=Je(e,r),u={id:i,message:l.error?l.available?K.controlsNotApplied(r.label):K.controlsUnavailable(r.label):void 0,disabled:t||!!c?.error&&c?.available!==!0||c?.busy===!0};switch(r.type){case`button`:{let t=e.snapshot.actions[r.id];return(0,W.jsx)(`div`,{className:`controls-field controls-action-field`,children:(0,W.jsxs)(U.Button,{type:`button`,size:`small`,variant:`secondary`,className:`controls-action-button`,disabled:u.disabled||!t?.available||t.busy,"aria-describedby":u.message?`${i}-unavailable`:void 0,"aria-busy":t?.busy,onClick:()=>{n(`action`,e.declaration.scope,r.id)},children:[r.label,t?.busy?K.controlsActionBusy:``]})},r.id)}case`boolean`:case`select`:case`radio`:case`segmented`:case`checkboxGroup`:return(0,W.jsx)(qe,{...u,control:r,value:o,onCommit:s},r.id);case`number`:case`slider`:case`text`:case`textarea`:case`color`:return(0,W.jsx)(Ke,{...u,control:r,value:o,onCommit:s},r.id)}}function d(e,t){if(!e.snapshot.visible[t.id])return null;let n=Je(e,t);return(0,W.jsxs)(H.Fragment,{children:[u(e,t),t.type===`button`&&n.error?(0,W.jsx)(U.Text,{as:`p`,id:`${a}-${e.declaration.scope}-${t.id}-unavailable`,size:`100`,variant:`muted`,role:`status`,children:n.available?K.controlsNotApplied(t.label):K.controlsUnavailable(t.label)}):null]},t.id)}let f=[...e.filter(e=>e.declaration.role===`shared`),...e.filter(e=>e.declaration.role!==`shared`)].filter(e=>e.declaration.controls.some(t=>t.group?e.snapshot.groups[t.group]:e.snapshot.visible[t.id]));return(0,W.jsx)(`div`,{ref:o,tabIndex:-1,role:`region`,"aria-label":K.controlsRegion,className:`controls-fields`,onFocusCapture:e=>{s.current=e.target},children:f.map((e,t)=>{let n=new Set;return(0,W.jsxs)(`section`,{className:`controls-scope`,"aria-label":e.declaration.label??e.declaration.scope,children:[t>0?(0,W.jsx)(`hr`,{className:`controls-scope-divider`}):null,e.declaration.controls.map(t=>{if(!t.group)return d(e,t);if(n.has(t.group))return null;n.add(t.group);let o=e.declaration.groups?.find(e=>e.id===t.group);if(!o||!e.snapshot.groups[o.id])return null;let s=`${e.declaration.scope}/${o.id}`,u=(r??c)[s]===!0,f=`${a}-${e.declaration.scope}-${o.id}-group`;return(0,W.jsxs)(`fieldset`,{className:`controls-group`,"aria-label":o.label,children:[(0,W.jsx)(`legend`,{children:(0,W.jsx)(U.Button,{size:`small`,variant:`subtle`,type:`button`,block:!0,className:`controls-group-toggle controls-ghost-button`,"aria-label":u?K.controlsExpandGroup(o.label):K.controlsCollapseGroup(o.label),"aria-controls":f,"aria-expanded":!u,trailingVisual:u?(0,W.jsx)(p,{size:16}):(0,W.jsx)(g,{size:16}),onClick:t=>{t.currentTarget.focus(),i?i(e.declaration.scope,o.id,!u):l(e=>({...e,[s]:!u}))},children:(0,W.jsx)(U.Text,{as:`span`,size:`100`,weight:`bold`,variant:`muted`,className:`controls-group-label`,children:o.label})})}),(0,W.jsx)(`div`,{id:f,className:`controls-group-body`,hidden:u,children:e.declaration.controls.filter(e=>e.group===o.id).map(t=>d(e,t))})]},o.id)})]},e.declaration.scope)})})}function Xe(e){return Object.fromEntries(e.declaration.controls.filter(t=>t.type!==`button`&&e.snapshot.visible[t.id]&&JSON.stringify(e.snapshot.values[t.id])!==JSON.stringify(t.default)).map(t=>[t.id,e.snapshot.values[t.id]]))}function Ze(e,t){let n=(0,H.useRef)(null),r=(0,H.useRef)(null),i=(0,H.useRef)(null),a=(0,H.useRef)({position:e,onChange:t}),o=(0,H.useRef)(null),[s,c]=(0,H.useState)(!1);(0,H.useLayoutEffect)(()=>{a.current={position:e,onChange:t}});let l=(0,H.useCallback)(e=>{let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i||!t.width||!t.height)return;let o={x:Math.max(0,Math.min(e.x,Math.max(0,t.width-i.width))),y:Math.max(0,Math.min(e.y,Math.max(0,t.height-i.height)))};(a.current.position?.x!==o.x||a.current.position?.y!==o.y)&&a.current.onChange(o)},[]);(0,H.useLayoutEffect)(()=>{let e=n.current,t=r.current;if(!e||!t)return;function i(){let n=e?.getBoundingClientRect(),r=t?.getBoundingClientRect();if(!n||!r||!n.width||!n.height)return;let i=r.left-n.left,a=r.top-n.top;(i<0||a<0||i>Math.max(0,n.width-r.width)||a>Math.max(0,n.height-r.height))&&l({x:i,y:a})}let a=new ResizeObserver(i);return a.observe(e),a.observe(t),window.addEventListener(`resize`,i),i(),()=>{a.disconnect(),window.removeEventListener(`resize`,i)}},[l]);function u(e=!1){let t=o.current;o.current=null,c(!1),t&&(e&&l(t.origin),i.current?.hasPointerCapture(t.pointerId)&&i.current.releasePointerCapture(t.pointerId))}return{boundsRef:n,panelRef:r,handleRef:i,dragging:s,onPointerDown:e=>{if(e.button!==0||o.current)return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();t&&i&&(o.current={pointerId:e.pointerId,x:e.clientX,y:e.clientY,origin:{x:i.left-t.left,y:i.top-t.top}},e.currentTarget.setPointerCapture(e.pointerId),e.currentTarget.focus(),e.preventDefault(),c(!0))},onPointerMove:e=>{let t=o.current;t&&t.pointerId===e.pointerId&&l({x:t.origin.x+e.clientX-t.x,y:t.origin.y+e.clientY-t.y})},onPointerUp:e=>{o.current?.pointerId===e.pointerId&&u()},onPointerCancel:e=>{o.current?.pointerId===e.pointerId&&u(!0)},onLostPointerCapture:()=>{o.current&&u()},onKeyDown:e=>{if(e.key===`Escape`&&o.current){e.preventDefault(),u(!0);return}if(![`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`].includes(e.key))return;let t=n.current?.getBoundingClientRect(),i=r.current?.getBoundingClientRect();if(!t||!i)return;e.preventDefault();let a=e.shiftKey?1:10;l({x:i.left-t.left+(e.key===`ArrowLeft`?-a:e.key===`ArrowRight`?a:0),y:i.top-t.top+(e.key===`ArrowUp`?-a:e.key===`ArrowDown`?a:0)})}}}function Qe(e){let t=e.filter(e=>e.declaration.role!==`shared`),n=t.length?t:e;return n.length?Math.max(...n.map(e=>e.declaration.panel?.width??288)):288}function $e({state:e,connection:t,layout:n,onLayoutChange:r,onDiagnose:i,diagnosisTarget:a=``}){let o=e.loading?[]:e.scopes.flatMap(e=>e.declaration.controls.flatMap(t=>{let n=Je(e,t);return n.visible&&n.error?[{...n,label:t.label}]:[]})),s=!!(i&&!e.loading&&(!e.runtimeAvailable&&e.error||e.storageError||o.length||e.reconnectRequired||e.status===`missing-runtime`||e.status===`unsupported-runtime`||e.status===`invalid-config`)),c=s?JSON.stringify([a,e.status,e.runtimeAvailable,e.reconnectRequired,e.error,e.storageError,o.map(({scope:e,id:t,error:n})=>[e,t,n])]):``,[l,d]=(0,H.useState)(()=>({episode:c,identity:{},busy:!1,requested:!1,error:``}));l.episode!==c&&d({episode:c,identity:{},busy:!1,requested:!1,error:``});async function f(){if(!i||!s||l.busy||l.requested)return;let e=l.identity;d(t=>t.identity===e?{...t,busy:!0,error:``}:t);try{await i(),d(t=>t.identity===e?{...t,requested:!0}:t)}catch(t){d(n=>n.identity===e?{...n,error:t instanceof Error?t.message:K.controlsDiagnosisFailed}:n)}finally{d(t=>t.identity===e?{...t,busy:!1}:t)}}let p=(0,H.useId)(),m=(0,H.useId)(),_=(0,H.useRef)(null),{boundsRef:v,panelRef:y,handleRef:b,dragging:x,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}=Ze(n.position,e=>r(t=>({...t,position:e})));(0,H.useEffect)(()=>{b.current?.focus()},[b]),(0,H.useLayoutEffect)(()=>{_.current&&!_.current.isConnected&&(document.activeElement===document.body&&b.current?.focus(),_.current=null)},[e,b]);let O=e.loading?K.controlsConnecting:e.status===`no-controls`?K.controlsEmpty:e.status===`missing-runtime`?i?K.controlsLocalMissingRuntime:K.controlsMissingRuntime:e.status===`unsupported-runtime`?K.controlsUnsupportedRuntime:e.status===`invalid-config`?K.controlsInvalid:``,k=!e.loading&&(e.storageError||e.reconnectRequired||!e.runtimeAvailable&&e.error),A=!e.loading&&e.status===`no-controls`&&!e.error&&!e.storageError&&!e.reconnectRequired&&!e.scopeErrors?.length&&!e.scopes.length;return(0,W.jsx)(`div`,{ref:v,className:`canvas-controls-layer`,children:(0,W.jsxs)(`aside`,{ref:y,className:`canvas-controls-panel`,"aria-label":K.controls,onFocusCapture:e=>{e.target instanceof HTMLElement&&(_.current=e.target)},"data-collapsed":n.collapsed,"data-dragging":x||void 0,style:{left:n.position?.x,top:n.position?.y,width:`min(${Qe(e.scopes)}px, calc(100% - var(--hub-space-16) * 2))`},children:[(0,W.jsxs)(`header`,{className:`canvas-controls-header`,children:[(0,W.jsx)(G,{icon:h,ref:b,size:`small`,variant:`invisible`,className:`canvas-controls-grab controls-ghost-button`,"aria-label":K.controlsMove,"aria-describedby":m,title:``,onPointerDown:S,onPointerMove:C,onPointerUp:w,onPointerCancel:T,onLostPointerCapture:E,onKeyDown:D}),(0,W.jsx)(ce,{id:m,children:K.controlsMoveHint}),(0,W.jsx)(U.Button,{type:`button`,size:`small`,variant:`subtle`,block:!0,className:`canvas-controls-title controls-ghost-button`,"aria-label":n.collapsed?K.controlsExpand:K.controlsCollapse,"aria-expanded":!n.collapsed,"aria-controls":p,trailingVisual:n.collapsed?(0,W.jsx)(g,{size:16}):(0,W.jsx)(u,{size:16}),onClick:()=>r(e=>({...e,collapsed:!e.collapsed})),children:K.controls}),(0,W.jsx)(G,{icon:L,size:`small`,variant:`invisible`,className:`controls-ghost-button`,"aria-label":K.controlsResetAll,disabled:!e.runtimeAvailable||e.reconnectRequired||e.loading||e.resetting||!e.storageError&&!e.hasResettableValues&&!e.scopes.some(e=>Object.keys(Xe(e)).length>0)||e.scopes.some(e=>Object.values(e.snapshot.actions).some(e=>e.busy))||e.status!==`ready`&&e.status!==`no-controls`&&!e.storageError,onClick:()=>{t.resetAll()}})]}),(0,W.jsxs)(`div`,{id:p,className:`canvas-controls-body`,hidden:n.collapsed,children:[(0,W.jsxs)(`div`,{className:`canvas-controls-content`,children:[O||e.notice?(0,W.jsx)(`div`,{role:`status`,"aria-live":`polite`,children:(0,W.jsx)(U.Text,{as:`p`,size:`100`,variant:`muted`,children:[O,e.notice].filter(Boolean).join(` `)})}):null,!e.loading&&e.error?(0,W.jsx)(U.Text,{as:`p`,size:`100`,role:`alert`,children:e.error}):null,!e.loading&&e.scopeErrors?.map(e=>(0,W.jsx)(U.Text,{as:`p`,size:`100`,role:`alert`,children:K.controlsScopeError(e.scope,e.error)},e.scope)),!e.loading&&e.storageError?(0,W.jsx)(U.Text,{as:`p`,size:`100`,role:`alert`,children:e.storageError}):null,l.error?(0,W.jsx)(U.Text,{as:`p`,size:`100`,role:`alert`,children:l.error}):null,(0,W.jsx)(Ye,{scopes:e.loading?[]:e.scopes,disabled:e.resetting||e.reconnectRequired,collapsedGroups:n.collapsedGroups,onGroupCollapse:(e,t,n)=>r(r=>({...r,collapsedGroups:{...r.collapsedGroups,[`${e}/${t}`]:n}})),onCommand:(e,n,r,i)=>t.command(e,n,r,i)}),o.length?(0,W.jsxs)(U.Accordion,{className:`canvas-controls-diagnostics`,disableAnimation:!0,children:[(0,W.jsx)(U.Accordion.Heading,{children:K.controlsDiagnostics}),(0,W.jsx)(U.Accordion.Content,{children:o.map(({scope:e,id:t,label:n,error:r})=>(0,W.jsxs)(U.Text,{as:`p`,size:`100`,children:[n,`: `,r]},`${e}/${t}`))})]}):null]}),s||k||A?(0,W.jsxs)(`footer`,{className:`canvas-controls-footer`,children:[A?(0,W.jsxs)(U.InlineLink,{className:`canvas-controls-learn-more`,href:`https://github.com/github/replica/blob/main/starter/README.md#prototype-controls`,target:`_blank`,rel:`noopener noreferrer`,children:[K.controlsLearnMore,(0,W.jsx)(ne,{size:16,"aria-hidden":`true`})]}):null,s?(0,W.jsx)(U.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:l.busy||l.requested||e.resetting,onClick:()=>void f(),children:l.requested?K.controlsDiagnosisRequested:o.length?K.controlsFix:K.controlsDiagnose}):null,k?(0,W.jsx)(U.Button,{size:`small`,variant:`secondary`,type:`button`,disabled:e.resetting,onClick:()=>t.retry(),children:e.storageError?K.controlsRetryStorage:K.controlsRetry}):null]}):null]})]})})}var et=C();function tt({children:e,className:t,...n}){return(0,W.jsx)(`span`,{...n,className:`hub-counter${t?` ${t}`:``}`,children:e})}var nt=(0,H.createContext)(null);function rt({source:e,children:t}){return(0,W.jsx)(nt,{value:e,children:t})}function it({title:e,label:t=e,open:n,closeLabel:r,closeDisabled:i=!1,closeShortcut:a,closeRef:o,onClose:s,headerAccessory:c,className:l,contentClassName:u,children:d}){return(0,W.jsxs)(`aside`,{className:`hub-sidebar${l?` ${l}`:``}`,"aria-label":t,"aria-hidden":!n,"data-open":n,inert:!n,children:[(0,W.jsxs)(`header`,{className:`hub-sidebar__header`,children:[(0,W.jsxs)(`div`,{className:`hub-sidebar__heading`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`subhead-medium`,weight:`normal`,children:e}),c]}),(0,W.jsx)(G,{ref:o,icon:V,"aria-label":r,"aria-keyshortcuts":a,title:r,description:r,variant:`invisible`,size:`small`,className:`hub-sidebar__close`,disabled:i,onClick:s})]}),(0,W.jsx)(`div`,{className:`hub-sidebar__content${u?` ${u}`:``}`,children:d})]})}function at({src:e,size:t=32,className:n}){return(0,W.jsx)(U.Avatar,{src:e||`/avatar-placeholder.svg`,alt:``,size:32,className:`hub-user-avatar hub-user-avatar--${t}${n?` ${n}`:``}`})}function ot({participants:e,size:t}){let n=e.slice(0,4),r=e.length-3;return(0,W.jsxs)(`span`,{className:`review-participant-stack review-participant-stack--${t}`,"data-avatar-count":n.length,"data-participant-count":e.length,"aria-hidden":`true`,children:[(r>1?n.slice(0,3):n).map(e=>(0,W.jsx)(`span`,{className:`review-participant-stack__avatar`,children:(0,W.jsx)(at,{src:e.avatarUrl,size:24})},e.login)),r>1?(0,W.jsxs)(`span`,{className:`review-participant-stack__avatar review-participant-stack__avatar--overflow`,children:[`+`,r]}):null]})}function st(e,t){let n=e.path.map(e=>({x:t.x+e.x*t.width,y:t.y+e.y*t.height})),r={x:t.x+t.width,y:t.y};return{path:n,point:n.reduce((e,t)=>{let n=(t.x-r.x)**2+(t.y-r.y)**2;return n{let e=c.current;if(!e)return;function t(){let t=e?.clientWidth??0;if(t)for(let e of l.current.values()){let n=Number.parseFloat(e.style.left),r=e.offsetWidth;if(!Number.isFinite(n)||!r)continue;let i=n-16,a=Math.max(0,Math.min(i,t-r))-i;e.style.setProperty(`--review-marker-offset-x`,`${a}px`)}}t();let n=typeof ResizeObserver>`u`?null:new ResizeObserver(t);n?.observe(e);for(let e of l.current.values())n?.observe(e);return window.addEventListener(`resize`,t),()=>{n?.disconnect(),window.removeEventListener(`resize`,t)}},[t,e]),(0,H.useEffect)(()=>{!i||n===null||u!==`resolved`&&u!==`moved`||l.current.get(n)?.focus({preventScroll:!0})},[i,u,n]),(0,W.jsx)(`div`,{ref:c,className:`review-comment-markers`,role:`group`,"aria-label":o.heading,children:e.map(e=>{let{root:i}=e,c=t.get(i.id);if(!c||c.status!==`resolved`&&c.status!==`moved`)return null;let u=e.replies.length>0,d=(e.unread?u?o.unreadMarkerWithRepliesLabel:o.unreadMarkerLabel:u?o.markerWithRepliesLabel:o.markerLabel).replace(`%{author}`,`@${i.author.login}`).replace(`%{count}`,(e.replies.length+1).toString()),f=i.anchor.kind===`area`?st(i.anchor,c.rect):null,p=e.participants.slice(3),m=p.length>1?p.map(({login:e})=>`@${e}`).join(`, `):d;return(0,W.jsxs)(H.Fragment,{children:[f&&(!a||n===i.id)?(0,W.jsx)(`svg`,{className:`review-comment-area`,"aria-hidden":`true`,width:`100%`,height:`100%`,children:(0,W.jsx)(`polyline`,{className:n===i.id?`review-comment-area__path review-comment-area__path--selected`:`review-comment-area__path`,points:f.path.map(e=>`${e.x},${e.y}`).join(` `),vectorEffect:`non-scaling-stroke`})}):null,(0,W.jsx)(U.Tooltip,{text:m,type:`description`,ref:e=>{e instanceof HTMLButtonElement?l.current.set(i.id,e):l.current.delete(i.id)},children:(0,W.jsx)(`button`,{type:`button`,"data-review-thread-id":i.id,className:`review-comment-marker${n===i.id?` review-comment-marker--selected`:``}${i.resolvedAt?` review-comment-marker--resolved`:``}${e.unread?` review-comment-marker--unread`:``}${r&&n!==i.id?` review-comment-marker--blocked`:``}`,style:{left:f?.point.x??c.point.x,top:f?.point.y??c.point.y},"aria-label":d,disabled:r&&n!==i.id,onClick:()=>s(e),children:(0,W.jsx)(ot,{participants:e.participants,size:`small`})})})]},i.id)})})}function lt({checked:e,onChange:t,size:n=`medium`,className:r,...i}){let{value:a,...o}=i;return(0,W.jsxs)(`label`,{className:`hub-switch hub-switch--${n}${r?` ${r}`:``}`,"data-disabled":i.disabled||void 0,children:[(0,W.jsx)(`span`,{className:`hub-switch__native-control`,children:(0,W.jsx)(U.Checkbox,{...o,value:a===void 0?void 0:String(a),role:`switch`,checked:e,onChange:e=>{i.disabled||t(e.currentTarget.checked)}})}),(0,W.jsx)(`span`,{className:`hub-switch__track`,"data-checked":e,"aria-hidden":`true`,children:(0,W.jsx)(`span`,{className:`hub-switch__thumb`})})]})}function Q(e){(e.key===` `||e.key===`Enter`)&&(e.preventDefault(),e.stopPropagation(),e.currentTarget.click())}function ut({filters:e,participants:t,showPins:r,copy:i,onFiltersChange:a,onShowPinsChange:o}){let[s,c]=(0,H.useState)(!1),l=e.currentBuildOnly||e.currentPageOnly||e.showResolved||!e.showRead||e.onlyMine||e.participant!==null||!r,u=t.find(t=>t.login===e.participant),d=e.participant===null?i.allParticipantsLabel:u?.name?`${u.name} (@${u.login})`:`@${e.participant}`;return(0,W.jsxs)(`div`,{className:`review-comment-filter-controls`,children:[(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__search`,children:[(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__search-field`,children:[(0,W.jsx)(ie,{className:`review-comment-filter-controls__search-icon`,size:16,"aria-hidden":`true`}),(0,W.jsx)(`input`,{type:`search`,className:`review-comment-filter-controls__input`,"aria-label":i.searchLabel,placeholder:i.searchPlaceholder,value:e.search,onChange:t=>a({...e,search:t.target.value})})]}),(0,W.jsx)(G,{icon:n,"aria-label":i.filterLabel,description:i.filterLabel,"aria-expanded":s,variant:`invisible`,className:`review-comment-filter-controls__button${s||l?` review-comment-filter-controls__button--active`:``}`,onClick:()=>c(e=>!e)})]}),s?(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__filters`,children:[(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__participant`,children:[(0,W.jsx)(`span`,{children:i.participantFilterLabel}),(0,W.jsxs)(U.ActionMenu,{size:`small`,selectionVariant:`single`,menuAlignment:`end`,onSelect:t=>a({...e,participant:t===``?null:t}),children:[(0,W.jsx)(U.ActionMenu.Button,{className:`review-comment-filter-controls__participant-trigger`,variant:`secondary`,size:`small`,"aria-label":`${i.participantFilterLabel}: ${d}`,children:(0,W.jsx)(`span`,{className:`review-comment-filter-controls__participant-name`,children:d})}),(0,W.jsxs)(U.ActionMenu.Overlay,{"aria-label":i.participantFilterLabel,children:[(0,W.jsx)(U.ActionMenu.Item,{value:``,selected:e.participant===null,role:`menuitemradio`,onKeyDownCapture:Q,children:i.allParticipantsLabel}),t.map(t=>(0,W.jsx)(U.ActionMenu.Item,{value:t.login,selected:e.participant===t.login,role:`menuitemradio`,onKeyDownCapture:Q,children:t.name?`${t.name} (@${t.login})`:`@${t.login}`},t.login))]})]})]}),(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,W.jsx)(`span`,{id:`review-comments-current-build`,children:i.currentBuildFilterLabel}),(0,W.jsx)(lt,{"aria-labelledby":`review-comments-current-build`,checked:e.currentBuildOnly,size:`small`,onChange:t=>a({...e,currentBuildOnly:t})})]}),(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,W.jsx)(`span`,{id:`review-comments-current-page`,children:i.currentPageFilterLabel}),(0,W.jsx)(lt,{"aria-labelledby":`review-comments-current-page`,checked:e.currentPageOnly,size:`small`,onChange:t=>a({...e,currentPageOnly:t})})]}),(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,W.jsx)(`span`,{id:`review-comments-show-resolved`,children:i.showResolvedLabel}),(0,W.jsx)(lt,{"aria-labelledby":`review-comments-show-resolved`,checked:e.showResolved,size:`small`,onChange:t=>a({...e,showResolved:t})})]}),(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,W.jsx)(`span`,{id:`review-comments-unread-only`,children:i.unreadOnlyLabel}),(0,W.jsx)(lt,{"aria-labelledby":`review-comments-unread-only`,checked:!e.showRead,size:`small`,onChange:t=>a({...e,showRead:!t})})]}),(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,W.jsx)(`span`,{id:`review-comments-only-mine`,children:i.onlyMineLabel}),(0,W.jsx)(lt,{"aria-labelledby":`review-comments-only-mine`,checked:e.onlyMine,size:`small`,onChange:t=>a({...e,onlyMine:t})})]}),(0,W.jsxs)(`div`,{className:`review-comment-filter-controls__toggle`,children:[(0,W.jsx)(`span`,{id:`review-comments-show-pins`,children:i.showPinsLabel}),(0,W.jsx)(lt,{"aria-labelledby":`review-comments-show-pins`,checked:r,size:`small`,onChange:o})]})]}):null]})}var dt=[[31536e3,`y`],[2592e3,`mo`],[604800,`w`],[86400,`d`],[3600,`h`],[60,`m`]];function ft(e){let t=window.setInterval(e,6e4);return()=>window.clearInterval(t)}function pt(){return Math.floor(Date.now()/6e4)*6e4}function mt(){return null}function ht({value:e,showTitle:t=!0}){let n=Date.parse(e),r=Number.isNaN(n)?e:new Date(n).toUTCString(),i=(0,H.useSyncExternalStore)(ft,pt,mt),a=r;if(i!==null&&!Number.isNaN(n)){let e=Math.round((i-n)/1e3),t=dt.find(([t])=>Math.abs(e)>=t);a=t?`${e<0?`in `:``}${Math.round(Math.abs(e)/t[0])}${t[1]}${e<0?``:` ago`}`:`just now`}return(0,W.jsx)(`time`,{dateTime:e,title:t?r:void 0,"aria-label":r,children:a})}function gt({thread:e,currentBuildNumber:t,resolution:n,anchorStatusLabel:r,selected:i,selectionBlocked:a,copy:o,onSelect:s,buildHref:c}){let l=(0,H.useId)(),{root:u}=e,d=u.author.name||`@${u.author.login}`,f=a&&!i,p=o.buildLabel.replace(`%{number}`,u.buildNumber.toString()),m=u.buildNumber!==t,h=e.replies.length===1?o.replyCountOneLabel:o.replyCountOtherLabel.replace(`%{count}`,e.replies.length.toString()),g=o.missingAnchorLabel;return u.resolvedAt?g=o.resolvedLabel:r===void 0?n?n.status===`resolved`?g=null:n.status===`moved`?g=o.movedAnchorLabel:n.status===`changed`?g=o.changedAnchorLabel:n.status===`route-mismatch`&&(g=o.routeMismatchLabel):g=null:g=r,(0,W.jsx)(`article`,{className:`review-comment-row${i?` review-comment-row--selected`:``}${e.unread?` review-comment-row--unread`:``}`,onClick:t=>{f||t.target instanceof Element&&t.target.closest(`a`)||s(e)},children:(0,W.jsx)(`div`,{className:`review-comment-row__layout`,children:(0,W.jsxs)(`div`,{className:`review-comment-row__content`,children:[(0,W.jsxs)(`div`,{className:`review-comment-row__copy`,children:[(0,W.jsxs)(`div`,{className:`review-comment-row__metadata`,children:[(0,W.jsxs)(`span`,{className:`review-comment-row__author-and-build`,children:[(0,W.jsx)(at,{src:u.author.avatarUrl,size:20,className:`review-comment-row__avatar`}),(0,W.jsx)(`span`,{id:`${l}-author`,className:`review-comment-row__author`,children:d}),m?(0,W.jsxs)(`span`,{className:`review-comment-row__build`,children:[`(`,(0,W.jsx)(`a`,{href:c||u.buildPath,target:c?`_blank`:void 0,rel:c?`noopener noreferrer`:void 0,children:p}),`)`]}):null]}),(0,W.jsx)(ht,{value:e.lastActivityAt})]}),(0,W.jsx)(`button`,{type:`button`,className:`review-comment-row__button`,"aria-labelledby":`${l}-author ${l}-body${e.unread?` ${l}-unread`:``}`,"aria-pressed":i,disabled:f,title:f?o.selectionBlockedLabel:void 0,children:(0,W.jsxs)(`span`,{className:`review-comment-row__body-container`,children:[e.unread?(0,W.jsx)(`span`,{role:`img`,id:`${l}-unread`,"aria-label":o.unreadLabel,title:o.unreadLabel,className:`review-comment-row__unread`}):null,(0,W.jsx)(`span`,{id:`${l}-body`,className:`review-comment-row__body`,children:u.body??o.deletedCommentLabel})]})})]}),g||e.replies.length>0?(0,W.jsxs)(`div`,{className:`review-comment-row__context`,children:[e.replies.length>0?(0,W.jsx)(`span`,{className:`review-comment-row__replies`,children:h}):null,g?(0,W.jsx)(U.Label,{size:`small`,className:`review-comment-row__status`,children:g}):null]}):null]})})})}function _t({frame:e,threads:t,currentBuildNumber:n,buildLinkOrigin:r,totalCount:i,hasThreads:a,filters:o,participants:s,resolutions:c,selectedThreadId:l,selectionBlocked:u,closeBlocked:d,showPins:f,loading:p,loadFailed:m,notice:h,copy:g,onClose:_,onFiltersChange:v,onShowPinsChange:y,onRetry:b,onSelect:x}){let S=a?g.noMatchesLabel:g.emptyLabel,C=(0,W.jsxs)(W.Fragment,{children:[h,(0,W.jsx)(ut,{filters:o,participants:s,showPins:f,copy:g,onFiltersChange:v,onShowPinsChange:y}),(0,W.jsxs)(`div`,{className:`review-comments-sidebar__body`,"aria-live":`polite`,children:[m?(0,W.jsxs)(`div`,{className:`review-comments-sidebar__state`,role:`alert`,children:[(0,W.jsx)(`span`,{children:g.loadErrorLabel}),(0,W.jsx)(U.Button,{size:`small`,onClick:b,children:g.retryLabel})]}):t.length===0&&!p?(0,W.jsx)(`div`,{className:`review-comments-sidebar__state`,children:S}):(0,W.jsx)(`div`,{className:`review-comments-sidebar__threads`,children:t.map(e=>(0,W.jsx)(gt,{thread:e,currentBuildNumber:n,buildHref:r?new URL(e.root.buildPath,r).href:void 0,resolution:c.get(e.root.id),selected:l===e.root.id,selectionBlocked:u,copy:g,onSelect:x},e.root.id))}),p?(0,W.jsxs)(`div`,{className:`review-comments-sidebar__loading`,children:[(0,W.jsx)(se,{decorative:!0,size:`small`}),(0,W.jsx)(`span`,{children:g.loadingLabel})]}):null]})]});return e?(0,W.jsx)(it,{...e,title:g.heading,closeLabel:g.closeLabel,closeDisabled:d,closeShortcut:`Shift+C`,onClose:_,headerAccessory:(0,W.jsx)(tt,{children:i}),children:C}):(0,W.jsxs)(`aside`,{className:`review-comments-sidebar`,"aria-label":g.heading,children:[(0,W.jsxs)(`header`,{className:`review-comments-sidebar__header`,children:[(0,W.jsxs)(`span`,{className:`review-comments-sidebar__heading`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`6`,children:g.heading}),(0,W.jsx)(tt,{children:i})]}),(0,W.jsx)(G,{icon:V,"aria-label":g.closeLabel,"aria-keyshortcuts":`Shift+C`,description:g.closeLabel,size:`small`,variant:`invisible`,className:`review-comments-sidebar__close`,disabled:d,onClick:_})]}),C]})}function vt({bridgeReady:e,copy:t,selectionBlocked:n,selecting:r,onCancelSelection:i,onStartAreaSelection:a,onStartElementSelection:o}){let c=(0,H.useId)(),l=!e||n,u=e?n?t.selectionBlockedLabel:t.commentMenuLabel:t.bridgeUnavailableLabel;if(r)return(0,W.jsx)(G,{icon:V,"aria-label":t.cancelSelectionLabel,description:t.cancelSelectionLabel,"aria-pressed":!0,size:`small`,variant:`default`,className:`review-comment-control__trigger`,onClick:i});let d=(0,W.jsxs)(U.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`start`,disabled:l,children:[(0,W.jsx)(U.ActionMenu.Button,{className:`review-comment-control__trigger`,variant:`secondary`,"aria-label":t.commentMenuLabel,"aria-describedby":c,leadingVisual:(0,W.jsx)(b,{size:16}),onClick:e=>{let t=e.currentTarget,n=t.closest(`.repository-workspace__content`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??window.innerHeight),i=Math.max(0,r-t.getBoundingClientRect().bottom-8);t.closest(`[data-testid="ActionMenu"]`)?.style.setProperty(`--review-comment-control-menu-height`,`${i}px`)},children:``}),(0,W.jsxs)(U.ActionMenu.Overlay,{"aria-label":t.commentMenuLabel,children:[(0,W.jsx)(U.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`element`,leadingVisual:(0,W.jsx)(s,{size:16}),"aria-keyshortcuts":`C`,onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},children:t.commentOnElementLabel}),(0,W.jsx)(U.ActionMenu.Item,{className:`review-comment-control__menu-item`,value:`area`,leadingVisual:(0,W.jsx)(_,{size:16}),"aria-keyshortcuts":`H`,onClick:a,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),a())},children:t.highlightRegionLabel})]})]});return l?(0,W.jsxs)(`div`,{title:u,children:[d,(0,W.jsx)(ce,{id:c,children:u})]}):(0,W.jsx)(U.Tooltip,{id:c,text:u,type:`description`,children:(0,W.jsx)(`div`,{children:d})})}var yt={search:``,currentBuildOnly:!1,currentPageOnly:!1,showResolved:!1,showRead:!0,onlyMine:!1,participant:null},bt={heading:`Comments`,closeLabel:`Close comments`,commentMenuLabel:`Add a comment`,commentOnElementLabel:`Comment on element`,highlightRegionLabel:`Highlight a region`,cancelSelectionLabel:`Cancel selection`,bridgeUnavailableLabel:`Adding comments needs the review bridge.`,selectionBlockedLabel:`Close or submit the open draft.`,selectionFailedLabel:`Hub could not anchor a comment to that element.`,areaTooSmallLabel:`Draw a larger region to add a comment.`,areaUnavailableLabel:`Hub could not save that region.`,searchLabel:`Search comments`,searchPlaceholder:`Search comments`,filterLabel:`Filters`,currentBuildFilterLabel:`Current build only`,currentPageFilterLabel:`Current page only`,participantFilterLabel:`Participant`,allParticipantsLabel:`All participants`,showResolvedLabel:`Show resolved`,unreadOnlyLabel:`Unread only`,onlyMineLabel:`Only your threads`,showPinsLabel:`Show pins`,sidebarShortcutLabel:`Shift+C`,loadingLabel:`Loading comments`,loadErrorLabel:`Comments could not be loaded.`,retryLabel:`Retry`,emptyLabel:`No comments have been added.`,noMatchesLabel:`No comments match these filters.`,buildLabel:`build %{number}`,movedAnchorLabel:`Moved`,changedAnchorLabel:`Context changed`,missingAnchorLabel:`Not found`,routeMismatchLabel:`Saved on another page`,resolvedLabel:`Resolved`,markerLabel:`Thread started by %{author}`,markerWithRepliesLabel:`Thread started by %{author}, %{count} comments`,unreadLabel:`Unread`,unreadMarkerLabel:`Unread thread started by %{author}`,unreadMarkerWithRepliesLabel:`Unread thread started by %{author}, %{count} comments`,replyCountOneLabel:`1 reply`,replyCountOtherLabel:`%{count} replies`,threadHeading:`Conversation`,backToCommentsLabel:`Back to comments`,resolvedByLabel:`Resolved by %{author}. Reopen this thread to reply.`,editedLabel:`Edited`,deletedCommentLabel:`Comment deleted`,addReactionLabel:`Add reaction`,reactionCountOneLabel:`%{reaction}, 1 reaction`,reactionCountOtherLabel:`%{reaction}, %{count} reactions`,reactionErrorLabel:`The reaction could not be changed.`,readErrorLabel:`Hub could not mark this conversation as read.`,markUnreadLabel:`Mark as unread`,markUnreadErrorLabel:`Hub could not mark this conversation as unread. Try again.`,reactionLabels:{"+1":`Thumbs up`,"-1":`Thumbs down`,laugh:`Laugh`,hooray:`Hooray`,confused:`Confused`,heart:`Heart`,rocket:`Rocket`,eyes:`Eyes`},commentActionsLabel:`Actions for comment by %{author}`,editLabel:`Edit`,deleteLabel:`Delete`,editCommentLabel:`Edit comment`,saveEditLabel:`Save`,savingEditLabel:`Saving comment`,cancelEditLabel:`Cancel`,editErrorLabel:`The comment could not be updated.`,deleteHeading:`Delete this comment?`,deletePromptLabel:`Deleted comment text cannot be recovered.`,confirmDeleteLabel:`Delete`,deletingLabel:`Deleting comment`,deleteErrorLabel:`The comment could not be deleted.`,replyLabel:`Reply`,replyPlaceholder:`Reply to this conversation`,replySubmitLabel:`Reply`,replySubmitTooltipMacLabel:`Reply (Cmd+Return)`,replySubmitTooltipOtherLabel:`Reply (Ctrl+Enter)`,replyingLabel:`Saving reply`,replyErrorLabel:`The reply could not be saved.`,resolveLabel:`Resolve`,resolvingLabel:`Resolving thread`,reopenLabel:`Reopen`,reopeningLabel:`Reopening thread`,resolutionErrorLabel:`The thread state could not be changed.`,resolvedReplyBlockedLabel:`Reopen this thread to reply.`,deletedReplyBlockedLabel:`Replies are closed.`,threadDiscardPromptLabel:`Your reply or edit has not been saved.`,composerHeading:`New comment`,composerLabel:`Comment`,composerPlaceholder:`Leave a review comment`,submitLabel:`Comment`,submitTooltipMacLabel:`Comment (Cmd+Return)`,submitTooltipOtherLabel:`Comment (Ctrl+Enter)`,submittingLabel:`Saving comment`,closeComposerLabel:`Cancel`,discardHeading:`Keep this draft?`,discardPromptLabel:`This comment has not been submitted.`,keepLabel:`Keep`,discardButtonLabel:`Discard`,bodyTooLongLabel:`Comments must be 10000 UTF-8 bytes or fewer.`,createErrorLabel:`The comment could not be saved.`};function xt(e,t){let n=new Map;n.set(e.login.toLowerCase(),e);for(let e of t.toReversed()){let t=e.login.toLowerCase();n.has(t)||n.set(t,e)}return Array.from(n.values())}function St(e){let t=new Map,n=new Map;for(let r of e){if(r.kind===`root`){t.set(r.id,r);continue}let e=n.get(r.rootId)??[];e.push(r),n.set(r.rootId,e)}return Array.from(t.values()).flatMap(e=>{let t=(n.get(e.id)??[]).filter(e=>e.deletedAt===null).sort((e,t)=>Date.parse(e.createdAt)-Date.parse(t.createdAt)||e.id-t.id);return e.deletedAt!==null&&t.length===0?[]:[{root:e,replies:t,participants:xt(e.author,t.map(e=>e.author)),lastActivityAt:t.at(-1)?.createdAt??e.createdAt,unread:e.viewerLastSeenActivityVersion===null||e.viewerLastSeenActivityVersionDate.parse(t.lastActivityAt)-Date.parse(e.lastActivityAt)||t.root.id-e.root.id)}var Ct=new TextEncoder;function wt(e,{prefix:t,required:n=!1}={}){return N().refine(r=>(!n||r!==``)&&(!t||r===``||r.startsWith(t))&&Ct.encode(r).length<=e)}var Tt=16384,Et=2048,Dt=2048,Ot=1024,kt=4096,At=1e3,jt=2e3,Mt=1e6,Nt=1e5,Pt=new TextEncoder,Ft=B().min(0).max(Mt),It=B().min(-Mt).max(Mt),Lt=B().min(0).max(Mt),Rt=E({x:B().min(0).max(1),y:B().min(0).max(1)}).strict(),zt=E({pathname:wt(Et,{prefix:`/`,required:!0}),search:wt(Dt,{prefix:`?`}),hash:wt(Ot,{prefix:`#`})}).strict(),Bt=E({x:Ft,y:Ft,width:Lt,height:Lt}).strict();E({x:It,y:It}).strict();var Vt=E({width:B().min(1).max(Nt),height:B().min(1).max(Nt),scrollX:Ft,scrollY:Ft}).strict(),Ht=E({schemaVersion:I(1),kind:I(`element`),route:zt,selector:wt(kt,{required:!0}),accessibleName:wt(At),tagName:wt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),selectedText:wt(jt),rect:Bt,viewport:Vt,elementOffset:Rt}).strict().refine(e=>Pt.encode(JSON.stringify(e)).length<=Tt),Ut=E({selector:wt(kt,{required:!0}),accessibleName:wt(At),tagName:wt(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),role:wt(64),textExcerpt:wt(500),rect:Bt}).strict(),Wt=E({schemaVersion:I(1),kind:I(`area`),route:zt,path:z(Rt).min(2).max(160),rect:Bt,viewport:Vt,elements:z(Ut).max(8)}).strict().refine(e=>Math.hypot(e.rect.width,e.rect.height)>=8).refine(e=>Pt.encode(JSON.stringify(e)).length<=Tt),Gt=T(`kind`,[Ht,Wt]),Kt=T(`status`,[E({commentId:B().int().positive().max(2**53-1),status:ee([`resolved`,`moved`]),rect:E({x:It,y:It,width:Lt,height:Lt}).strict(),point:E({x:It,y:It}).strict()}).strict(),E({commentId:B().int().positive().max(2**53-1),status:ee([`changed`,`missing`,`route-mismatch`])}).strict()]),qt=B().int().positive().max(2**53-1),Jt=N().refine(e=>!Number.isNaN(Date.parse(e))),Yt=Jt.nullable(),Xt=E({login:N().min(1),name:N().nullable(),avatarUrl:N().nullable()}),Zt=ee([`+1`,`-1`,`laugh`,`hooray`,`confused`,`heart`,`rocket`,`eyes`]),Qt=E({content:Zt,count:qt,viewerHasReacted:A()}),$t={id:qt,body:N().nullable(),mentions:z(E({login:N().min(1),githubId:qt})).optional(),createdAt:Jt,updatedAt:Jt,editedAt:Yt,deletedAt:Yt,author:Xt,viewerCanEdit:A(),viewerCanDelete:A(),reactions:z(Qt)},en=E({...$t,kind:I(`root`),buildNumber:qt,buildPath:N().startsWith(`/`),anchor:Gt,resolvedAt:Yt,resolvedBy:Xt.nullable(),activityVersion:qt,viewerLastSeenActivityVersion:qt.nullable()}),tn=E({...$t,kind:I(`reply`),rootId:qt}),nn=T(`kind`,[en,tn]),rn=T(`hasMore`,[E({comments:z(nn),nextCursor:N().min(1),hasMore:I(!0)}),E({comments:z(nn),nextCursor:F(),hasMore:I(!1)})]),an=E({comments:z(nn).min(1).max(2)});function on(e,t){let{root:n}=e,{filters:r}=t;if(!r.showResolved&&n.resolvedAt!==null||!r.showRead&&!e.unread||r.onlyMine&&![n,...e.replies].some(e=>e.author.login.toLowerCase()===t.viewerLogin.toLowerCase())||r.currentBuildOnly&&n.buildNumber!==t.selectedBuildNumber||r.participant!==null&&!e.participants.some(e=>e.login.toLowerCase()===r.participant?.toLowerCase())||r.currentPageOnly&&t.route!==null&&(n.anchor.route.pathname!==t.route.pathname||n.anchor.route.search!==t.route.search||n.anchor.route.hash!==t.route.hash))return!1;let i=r.search.trim().toLowerCase();if(!i)return!0;let a=n.anchor.kind===`element`?[n.anchor.accessibleName,n.anchor.selectedText,n.anchor.tagName]:n.anchor.elements.flatMap(e=>[e.accessibleName,e.textExcerpt,e.tagName,e.role]);return[n.body??``,n.author.login,n.author.name??``,n.buildNumber.toString(),...e.replies.flatMap(e=>[e.body??``,e.author.login,e.author.name??``]),...a].join(`
+`).toLowerCase().includes(i)}var sn=E({candidates:z(E({githubId:B().int().positive().max(2**53-1),login:N().min(1).max(39),avatarUrl:N().nullable()}))});async function $(e,t,n={}){let r=await fetch(e,{...n,headers:{"Content-Type":`application/json`,"X-Replica-Canvas-Token":t,...n.headers}}),i=await r.json().catch(()=>({error:K.invalidResponse}));if(!r.ok)throw Object.assign(Error(i.error||K.requestFailed),{code:i.code,statusCode:r.status,authorization:i.authorization});return i}function cn({error:e,busy:t,requested:n,onFix:r,onDismiss:i}){let a=(0,H.useId)();return(0,W.jsxs)(le,{title:K.commentingUnavailable,descriptionId:a,closeLabel:K.closeCommentingDialog,onClose:i,children:[(0,W.jsx)(`p`,{id:a,children:K.commentingDescription}),e?(0,W.jsx)(`p`,{role:`alert`,children:e}):null,(0,W.jsxs)(`div`,{className:`canvas-commenting-recovery__actions`,children:[(0,W.jsx)(U.Button,{variant:`primary`,disabled:t||n,onClick:r,children:n?K.commentingFixRequested:K.commentingFix}),(0,W.jsx)(U.Button,{variant:`subtle`,onClick:i,children:K.commentingDismiss})]})]})}function ln({cancelLabel:e,confirmLabel:t,description:n,errorLabel:r,heading:i,loading:a=!1,loadingAnnouncement:o,compact:s=!1,condensed:c=!1,onCancel:l,onConfirm:u}){let d=(0,W.jsx)(U.Button,{type:`button`,size:`small`,variant:c?`primary`:void 0,className:`review-confirmation-panel__cancel`,onClick:l,children:e}),f=(0,W.jsx)(U.Button,{type:`button`,size:`small`,variant:c?`secondary`:`primary`,className:c?void 0:`review-confirmation-panel__danger`,disabled:a,"aria-busy":a,onClick:u,children:t});return(0,W.jsxs)(`div`,{className:`review-confirmation-panel${s||c?` review-confirmation-panel--compact`:``}${c?` review-confirmation-panel--condensed`:``}`,role:`alert`,children:[(0,W.jsxs)(`div`,{className:`review-confirmation-panel__copy`,children:[(0,W.jsx)(`strong`,{children:i}),c?(0,W.jsx)(ce,{children:n}):(0,W.jsx)(`span`,{children:n})]}),r?(0,W.jsx)(`span`,{className:`review-confirmation-panel__error`,children:r}):null,(0,W.jsxs)(`div`,{className:`review-confirmation-panel__actions`,children:[c?f:d,c?d:f,a&&o?(0,W.jsx)(ce,{role:`status`,children:o}):null]})]})}function un(){return(0,H.useContext)(nt)}function dn(e){let t=e.matchAll(/(?e[1]?[e[1].toLowerCase()]:[])))}function fn({value:e,onValueChange:t,onKeyDown:n,ref:r,...i}){let a=un(),o=(0,H.useRef)(null),s=(0,H.useRef)(null),c=(0,H.useRef)(null),l=(0,H.useId)(),[u,d]=(0,H.useState)(e.length),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(0),[b,x]=(0,H.useState)(0),[S,C]=(0,H.useState)({left:0,top:0,width:0}),w=e.slice(0,u).match(/(?:^|[\s(])@([a-zA-Z0-9-]*)$/)?.[1]?.toLowerCase(),T=a!==null&&w!==void 0&&!f&&!i.disabled,E=dn(e).length>10,D=m?.source===a&&m?.failed,O=g||m?.source!==a,k=(m?.source===a?m.candidates:[]).filter(e=>e.login.toLowerCase().includes(w??``)).slice(0,8),A=Math.min(b,Math.max(0,k.length-1));(0,H.useEffect)(()=>{o.current?.setCustomValidity(E?a?.copy.limit??``:``)},[a?.copy.limit,E]),(0,H.useEffect)(()=>{if(!T||!a)return;let e=!0,t=window.setTimeout(()=>{_(!0),a.load().then(t=>{e&&h({source:a,candidates:t,failed:!1})},()=>{e&&h({source:a,candidates:[],failed:!0})}).finally(()=>{e&&_(!1)})},150);return()=>{e=!1,window.clearTimeout(t)}},[T,v,a]),(0,H.useLayoutEffect)(()=>{if(!T)return;function e(){let e=o.current?.getBoundingClientRect();e&&C({left:e.left,width:e.width,top:Math.max(4,window.innerHeight-e.bottom<224?e.top-224:e.bottom)})}return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[T]);function j(n){if(w===void 0)return;let r=u-w.length-1,i=`@${n.login} `;t(e.slice(0,r)+i+e.slice(u)),p(!0);let a=r+i.length;window.requestAnimationFrame(()=>{o.current?.focus(),o.current?.setSelectionRange(a,a),d(a)})}function M(e,t){o.current=e,typeof t==`function`?t(e):t&&(t.current=e)}return(0,W.jsxs)(`div`,{className:`mention-input`,children:[(0,W.jsx)(`textarea`,{...i,ref:e=>M(e,r),value:e,"aria-autocomplete":a?`list`:void 0,"aria-controls":T?l:void 0,"aria-activedescendant":T&&k.length?`${l}-${A}`:void 0,onChange:e=>{d(e.currentTarget.selectionStart),p(!1),x(0),t(e.currentTarget.value)},onSelect:e=>d(e.currentTarget.selectionStart),onBlur:e=>{s.current?.contains(e.relatedTarget)||p(!0)},onKeyDown:e=>{if(T&&e.key===`Escape`)e.preventDefault(),e.stopPropagation(),p(!0);else if(T&&D&&!O&&e.key===`Tab`&&!e.shiftKey)e.preventDefault(),c.current?.focus();else{if(T&&!O&&!D&&k.length){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),x((A+(e.key===`ArrowDown`?1:-1)+k.length)%k.length);return}if((e.key===`Enter`||e.key===`Tab`)&&!e.nativeEvent.isComposing&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey){e.preventDefault();let t=k[A];t&&j(t);return}}n?.(e)}}}),E&&a?.copy.limit?(0,W.jsx)(`span`,{role:`alert`,children:a.copy.limit}):null,T&&a?(0,et.createPortal)((0,W.jsx)(`div`,{ref:s,id:l,className:`mention-input__suggestions`,style:S,onBlur:e=>{e.relatedTarget!==o.current&&!e.currentTarget.contains(e.relatedTarget)&&p(!0)},onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),p(!0),o.current?.focus()):e.key===`Tab`&&e.shiftKey&&(e.preventDefault(),o.current?.focus())},children:O?(0,W.jsx)(`span`,{role:`status`,children:a.copy.loading}):D?(0,W.jsxs)(`div`,{role:`alert`,children:[a.copy.error,` `,(0,W.jsx)(`button`,{ref:c,type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{y(v+1),o.current?.focus()},children:a.copy.retry})]}):(0,W.jsxs)(`ul`,{role:`listbox`,"aria-label":a.copy.suggestions,children:[k.map((e,t)=>(0,W.jsx)(`li`,{id:`${l}-${t}`,role:`option`,"aria-selected":t===A,children:(0,W.jsxs)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>j(e),children:[`@`,e.login]})},e.githubId)),k.length?null:(0,W.jsx)(`li`,{role:`presentation`,children:a.copy.empty})]})}),document.body):null]})}function pn({anchorPoint:e,anchorRectangle:t,anchorSelector:n,layoutKey:r,preserveVerticalSide:i=!1}){let a=(0,H.useRef)(null),o=(0,H.useRef)(null),[s,c]=(0,H.useState)({left:e.x+12,top:e.y+12}),l=(0,H.useCallback)(()=>{let r=a.current,s=r?.parentElement;if(!r||!s)return;let l=r.offsetWidth,u=r.offsetHeight,d=s.clientWidth-l-8,f=s.clientHeight-u-8,p,m,h=(n?s.querySelector(n)??s.parentElement?.querySelector(n):null)?.getBoundingClientRect(),g=s.getBoundingClientRect(),_=h?{x:h.left-g.left,y:h.top-g.top,width:h.height,height:h.height}:t;if(_){let e=_.x+_.width+12,t=_.x-12-l,n=e+l<=s.clientWidth-8,r=t>=8,i=s.clientWidth-8-_.x-_.width,a=_.x-8;p=n?e:r?t:i>=a?e:t,m=_.y}else{let t=e.x+12,n=e.y+12;p=t+l<=s.clientWidth-8?t:e.x-12-l;let r=o.current,a=i&&r?.x===e.x&&r.y===e.y?r.side:n+u<=s.clientHeight-8?`below`:`above`;i&&(o.current={x:e.x,y:e.y,side:a}),m=a===`below`?n:e.y-12-u}let v={left:Math.max(8,Math.min(p,d)),top:Math.max(8,Math.min(m,f))};c(e=>e.left===v.left&&e.top===v.top?e:v)},[e,t,n,i]);return(0,H.useLayoutEffect)(()=>{l();let e=a.current,t=e?.parentElement;if(!e||!t||typeof ResizeObserver!=`function`)return;let r=new ResizeObserver(l);r.observe(e),r.observe(t);let i=n?t.querySelector(n)??t.parentElement?.querySelector(n):null;return i&&r.observe(i),window.addEventListener(`resize`,l),()=>{r.disconnect(),window.removeEventListener(`resize`,l)}},[n,r,l]),{cardRef:a,position:s}}function mn(){return typeof navigator<`u`&&/Mac/i.test(navigator.platform)}function hn(e,{allowPlainEnter:t=!1}={}){let n=e.isComposing||e.keyCode===229,r=mn()?e.metaKey&&!e.ctrlKey:e.ctrlKey&&!e.metaKey,i=t&&!e.metaKey&&!e.ctrlKey;return e.key===`Enter`&&!e.shiftKey&&!e.altKey&&!n&&!e.repeat&&(r||i)}var gn=new TextEncoder;function _n({anchorPoint:e,bodyMaximumBytes:t,copy:n,creating:r,onSubmit:i,onDiscard:a}){let o=(0,H.useId)(),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(!1),p=(0,H.useRef)(!1),{cardRef:m,position:h}=pn({anchorPoint:e,layoutKey:`${l}:${d}`,preserveVerticalSide:!0}),g=gn.encode(s).length>t,_=s.trim()!==``&&!g&&!r&&!l,v=mn()?n.submitTooltipMacLabel:n.submitTooltipOtherLabel;(0,H.useEffect)(()=>{l?m.current?.querySelector(`.review-confirmation-panel__cancel`)?.focus({preventScroll:!0}):p.current&&m.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),p.current=l},[m,l]);function y(){r||(s.trim()===``?a():u(!0))}async function b(e){e.preventDefault(),_&&(await i(s)||f(!0))}return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-hidden":`true`,className:`review-comment-composer-backdrop`,onClick:y}),(0,W.jsx)(`section`,{ref:m,role:`dialog`,"aria-labelledby":o,className:`review-comment-composer`,style:{left:h.left,top:h.top},children:(0,W.jsxs)(`form`,{className:`review-comment-composer__form`,onSubmit:e=>{b(e)},onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),l?u(!1):y())},children:[(0,W.jsxs)(`header`,{className:`review-comment-composer__header`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`6`,id:o,children:n.composerHeading}),(0,W.jsx)(G,{icon:V,"aria-label":n.closeComposerLabel,description:n.closeComposerLabel,variant:`invisible`,type:`button`,disabled:r,onClick:y})]}),(0,W.jsx)(fn,{autoFocus:!0,"aria-label":n.composerLabel,placeholder:n.composerPlaceholder,value:s,rows:4,onValueChange:e=>{c(e),u(!1),f(!1)},onKeyDown:e=>{_&&hn(e.nativeEvent)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),g?(0,W.jsx)(`span`,{role:`alert`,className:`review-comment-composer__error`,children:n.bodyTooLongLabel}):null,d?(0,W.jsx)(pe,{variant:`critical`,title:n.createErrorLabel,className:`review-comment-composer__banner`}):null,l?(0,W.jsx)(ln,{heading:n.discardHeading,description:n.discardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,condensed:!0,onCancel:()=>u(!1),onConfirm:a}):(0,W.jsxs)(`footer`,{className:`review-comment-composer__actions`,children:[(0,W.jsx)(U.Button,{type:`button`,size:`small`,disabled:r,onClick:y,children:n.closeComposerLabel}),(0,W.jsx)(U.Tooltip,{text:v,type:`description`,children:(0,W.jsx)(U.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:!_,"aria-busy":r,children:n.submitLabel})}),r?(0,W.jsx)(ce,{role:`status`,children:n.submittingLabel}):null]})]})})]})}function vn({blockedLabel:e,confirmingDiscard:t,replyDraft:n,replyBodyTooLong:r,replyFailed:i,replyDisabled:a,replying:o,submitDisabled:s=!1,copy:c,onKeepDraft:u,onDiscardDraft:d,onSubmit:f,onDraftChange:p}){let m=(0,H.useRef)(null),h=n.trim()!==``&&!r&&!a&&!o&&!s&&!t&&!e,g=mn()?c.replySubmitTooltipMacLabel:c.replySubmitTooltipOtherLabel;return(0,H.useLayoutEffect)(()=>{m.current&&(m.current.style.height=`auto`,m.current.style.height=n?`${Math.min(m.current.scrollHeight,120)}px`:`2.5rem`)},[n]),t?(0,W.jsx)(ln,{heading:c.discardHeading,description:c.threadDiscardPromptLabel,cancelLabel:c.keepLabel,confirmLabel:c.discardButtonLabel,compact:!0,onCancel:u,onConfirm:d}):e?(0,W.jsx)(`span`,{className:`review-thread-reply-form__blocked`,children:e}):(0,W.jsxs)(`form`,{className:`review-thread-reply-form`,onSubmit:e=>{e.preventDefault(),h&&f()},children:[(0,W.jsxs)(`div`,{className:`review-thread-reply-form__composer`,children:[(0,W.jsx)(fn,{ref:m,"aria-label":c.replyLabel,placeholder:c.replyPlaceholder,value:n,rows:1,disabled:a,onValueChange:p,onKeyDown:e=>{h&&hn(e.nativeEvent,{allowPlainEnter:!0})&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())}}),(0,W.jsx)(U.Tooltip,{text:g,type:`description`,children:(0,W.jsx)(`button`,{type:`submit`,className:`review-thread-reply-form__submit`,disabled:!h,"aria-label":c.replySubmitLabel,"aria-busy":o,children:(0,W.jsx)(l,{size:16})})})]}),r?(0,W.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:c.bodyTooLongLabel}):null,i?(0,W.jsx)(`span`,{role:`alert`,className:`review-thread-reply-form__error`,children:c.replyErrorLabel}):null,o?(0,W.jsx)(ce,{role:`status`,children:c.replyingLabel}):null]})}function yn({comment:e}){let t=e.body??``,n=new Set(e.mentions?.map(e=>e.login.toLowerCase())??[]),r=t.matchAll(/(?({content:e,emoji:Sn(e)}));function wn(e,t=0,n=0){if(t!==0||n!==0)return{x:t,y:n};let r=e.getBoundingClientRect();return{x:r.left+r.width/2,y:r.top+r.height/2}}function Tn({comment:e,mutation:t,actionsDisabled:n,controlsHidden:r=!1,copy:i,onAdd:a,onRemove:o,onBurst:s}){let c=(0,H.useId)(),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(!1),p=(0,H.useRef)(!1),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(`outside-bottom`),v=t!==null&&(t.kind===`add-reaction`||t.kind===`remove-reaction`)&&t.commentId===e.id,y=e.reactions.flatMap(e=>{if(!m||e.content!==m.content)return[e];let t=e.count+Number(m.viewerHasReacted)-Number(e.viewerHasReacted);return t>0?[{...e,count:t,viewerHasReacted:m.viewerHasReacted}]:[]});m?.viewerHasReacted&&!e.reactions.some(({content:e})=>e===m.content)&&y.push({content:m.content,count:1,viewerHasReacted:!0});async function b(r,i){if(n||t!==null||p.current)return;let c=e.reactions.find(e=>e.content===r)?.viewerHasReacted??!1;p.current=!0,u(!1),h({content:r,viewerHasReacted:!c});try{if(!c){let e=Cn.find(e=>e.content===r);e&&s(e.emoji,i.x,i.y)}let e=c?await o(r):await a(r);u(!e)}catch{u(!0)}finally{p.current=!1,h(null)}}function x(e,t){b(e,wn(t.currentTarget,t.clientX,t.clientY))}let S=(0,W.jsxs)(U.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:g,disabled:n,children:[(0,W.jsx)(U.ActionMenu.Button,{className:`review-comment-reactions__menu-trigger`,variant:`subtle`,"aria-label":i.addReactionLabel,"aria-describedby":c,"aria-busy":v||m!==null,leadingVisual:(0,W.jsx)(w,{size:16}),onClick:e=>{f(!0);let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0),a=Cn.length*36+16;_(rr?`outside-top`:`outside-bottom`)},children:``}),(0,W.jsx)(U.ActionMenu.Overlay,{"aria-label":i.addReactionLabel,children:Cn.map(e=>(0,W.jsx)(U.ActionMenu.Item,{value:e.content,leadingVisual:(0,W.jsx)(`span`,{className:`review-comment-reactions__picker-emoji`,children:e.emoji}),onClick:t=>x(e.content,t),onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),b(e.content,wn(t.currentTarget)))},children:i.reactionLabels[e.content]},e.content))})]});return r&&!l?null:(0,W.jsxs)(`div`,{className:`review-comment-reactions__layout`,children:[r?null:(0,W.jsxs)(`div`,{className:`review-comment-reactions`,children:[y.map(e=>{let r=Cn.find(({content:t})=>t===e.content);if(!r)return null;let a=(e.count===1?i.reactionCountOneLabel:i.reactionCountOtherLabel).replace(`%{reaction}`,i.reactionLabels[e.content]).replace(`%{count}`,e.count.toString());return(0,W.jsxs)(U.Button,{size:`small`,"aria-label":a,title:a,"aria-pressed":e.viewerHasReacted,disabled:n,"aria-busy":m?.content===e.content||v&&`content`in t&&t.content===e.content,className:e.viewerHasReacted?`review-comment-reaction--selected`:void 0,onClick:t=>x(e.content,t),children:[(0,W.jsx)(`span`,{"aria-hidden":`true`,children:r.emoji}),(0,W.jsx)(tt,{"aria-hidden":`true`,children:e.count})]},e.content)}),n?(0,W.jsxs)(`div`,{title:i.addReactionLabel,children:[S,(0,W.jsx)(ce,{id:c,children:i.addReactionLabel})]}):(0,W.jsx)(U.Tooltip,{id:c,text:i.addReactionLabel,type:`description`,className:`review-comment-reactions__tooltip${d?` review-comment-reactions__tooltip--suppressed`:``}`,children:(0,W.jsx)(`div`,{onMouseEnter:e=>{e.currentTarget.querySelector(`[aria-expanded="true"]`)||f(!1)},onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||f(!1)},children:S})})]}),l?(0,W.jsx)(`span`,{role:`alert`,className:`review-comment-reactions__error`,children:i.reactionErrorLabel}):null]})}function En({comment:e,mutation:t,copy:n,editing:r,editDraft:i,editBodyTooLong:a,editFailed:s,confirmingEditDiscard:c,saving:l,confirmingDelete:u,deleting:d,deleteFailed:f,actionsDisabled:p,onStartEdit:m,onEditDraftChange:h,onSaveEdit:g,onCancelEdit:_,onKeepEdit:v,onDiscardEdit:y,onRequestDelete:b,onCancelDelete:x,onDelete:S,onAddReaction:C,onRemoveReaction:w,onBurstReaction:T,onMarkUnread:E,markUnreadDisabled:D=!1}){let k=(0,H.useId)(),A=(0,H.useRef)(null),M=(0,H.useRef)(!1),[N,P]=(0,H.useState)(`outside-bottom`),F=e.author.name||`@${e.author.login}`,I=n.commentActionsLabel.replace(`%{author}`,`@${e.author.login}`),L=p&&(!E||D),R=!!(e.body&&e.viewerCanEdit),z=!!(e.body&&e.viewerCanDelete);return(0,H.useEffect)(()=>{c?A.current?.querySelector(`.review-confirmation-panel button`)?.focus({preventScroll:!0}):M.current&&A.current?.querySelector(`textarea`)?.focus({preventScroll:!0}),M.current=c},[c]),(0,W.jsxs)(`article`,{className:`review-thread-message`,"data-review-message-id":e.id,children:[(0,W.jsx)(bn,{visual:(0,W.jsx)(at,{src:e.author.avatarUrl,size:28}),author:F,metadata:(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(ht,{value:e.createdAt}),e.editedAt?(0,W.jsx)(`span`,{children:n.editedLabel}):null]}),children:E||R||z?L?(0,W.jsxs)(`div`,{title:I,children:[(0,W.jsx)(U.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,disabled:!0,children:(0,W.jsx)(U.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":I,"aria-describedby":k,leadingVisual:(0,W.jsx)(o,{size:16}),children:``})}),(0,W.jsx)(ce,{id:k,children:I})]}):(0,W.jsx)(U.Tooltip,{id:k,text:I,type:`description`,children:(0,W.jsx)(`div`,{children:(0,W.jsxs)(U.ActionMenu,{selectionVariant:`none`,size:`small`,menuAlignment:`end`,menuSide:N,children:[(0,W.jsx)(U.ActionMenu.Button,{className:`review-thread-message__menu-trigger`,variant:`subtle`,"aria-label":I,"aria-describedby":k,leadingVisual:(0,W.jsx)(o,{size:16}),onClick:e=>{let t=e.currentTarget.getBoundingClientRect(),n=e.currentTarget.closest(`.review-shell`)?.getBoundingClientRect(),r=Math.min(window.innerHeight,n?.bottom??1/0)-t.bottom,i=t.top-Math.max(0,n?.top??0);P(r<(E?128:88)&&i>r?`outside-top`:`outside-bottom`)},children:``}),(0,W.jsxs)(U.ActionMenu.Overlay,{"aria-label":I,children:[E?(0,W.jsx)(U.ActionMenu.Item,{value:`mark-unread`,disabled:D,leadingVisual:(0,W.jsx)(j,{size:16}),onClick:()=>{D||E()},onKeyDown:e=>{!D&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),E())},children:n.markUnreadLabel}):null,R?(0,W.jsx)(U.ActionMenu.Item,{value:`edit`,disabled:p,leadingVisual:(0,W.jsx)(re,{size:16}),onClick:m,onKeyDown:e=>{!p&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),m())},children:n.editLabel}):null,z&&(E||R)?(0,W.jsx)(`li`,{role:`separator`,className:`review-thread-message__menu-divider`}):null,z?(0,W.jsx)(U.ActionMenu.Item,{value:`delete`,disabled:p||t!==null,className:`review-thread-message__delete-item`,leadingVisual:(0,W.jsx)(O,{size:16}),onClick:b,onKeyDown:e=>{!p&&t===null&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),b())},children:n.deleteLabel}):null]})]})})}):null}),r?(0,W.jsxs)(`form`,{ref:A,className:`review-thread-message__edit`,onSubmit:e=>{e.preventDefault(),c||g()},children:[(0,W.jsx)(fn,{autoFocus:!0,"aria-label":n.editCommentLabel,value:i,rows:3,onValueChange:h}),a?(0,W.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.bodyTooLongLabel}):null,s?(0,W.jsx)(`span`,{role:`alert`,className:`review-thread-message__error`,children:n.editErrorLabel}):null,c?(0,W.jsx)(ln,{heading:n.discardHeading,description:n.threadDiscardPromptLabel,cancelLabel:n.keepLabel,confirmLabel:n.discardButtonLabel,compact:!0,onCancel:v,onConfirm:y}):(0,W.jsxs)(`div`,{className:`review-thread-message__actions`,children:[(0,W.jsx)(U.Button,{type:`button`,size:`small`,disabled:l,onClick:_,children:n.cancelEditLabel}),(0,W.jsx)(U.Button,{type:`submit`,size:`small`,variant:`primary`,disabled:i.trim()===``||a||t!==null||l,"aria-busy":l,children:n.saveEditLabel}),l?(0,W.jsx)(ce,{role:`status`,children:n.savingEditLabel}):null]})]}):u?(0,W.jsx)(ln,{heading:n.deleteHeading,description:n.deletePromptLabel,errorLabel:f?n.deleteErrorLabel:void 0,cancelLabel:n.cancelEditLabel,confirmLabel:n.confirmDeleteLabel,loading:d,loadingAnnouncement:n.deletingLabel,compact:!0,onCancel:x,onConfirm:S}):(0,W.jsx)(`p`,{className:e.body?`review-thread-message__body`:`review-thread-message__body review-thread-message__body--deleted`,children:e.body?(0,W.jsx)(yn,{comment:e}):n.deletedCommentLabel}),e.body?(0,W.jsx)(Tn,{comment:e,mutation:t,actionsDisabled:p,controlsHidden:r||u,copy:n,onAdd:C,onRemove:w,onBurst:T}):null]})}function Dn({position:e,anchored:t,className:n,style:r,...i}){return(0,W.jsx)(`section`,{...i,role:`dialog`,className:`review-thread-conversation review-thread-conversation--${t?`anchored`:`docked`}${n?` ${n}`:``}`,style:{"--review-thread-left":`${e.left}px`,"--review-thread-top":`${e.top}px`,...r}})}function On(){let e=(0,H.useRef)(null),t=(0,H.useRef)([]),n=(0,H.useRef)(new Map),[r,i]=(0,H.useState)(!1),a=(0,H.useCallback)((e,n,r)=>{if(window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)return;let a=4+Math.floor(Math.random()*5),o=performance.now();for(let i=0;i{if(!r)return;let a=e.current,o=a?.getContext(`2d`);if(!a||!o){console.error(`Emoji reaction burst could not create a canvas context.`),t.current=[];let e=requestAnimationFrame(()=>i(!1));return()=>cancelAnimationFrame(e)}let s=a,c=o,l;function u(){let e=window.devicePixelRatio||1;s.width=Math.round(window.innerWidth*e),s.height=Math.round(window.innerHeight*e),c.setTransform(e,0,0,e,0,0)}function d(e,t){let r=Math.round(t),i=`${e}_${r}`;if(n.current.has(i))return n.current.get(i)??null;let a=document.createElement(`canvas`);a.width=r*2,a.height=r*2;let o=a.getContext(`2d`);return o?(o.font=`${r}px serif`,o.textAlign=`center`,o.textBaseline=`middle`,o.fillText(e,r,r),n.current.set(i,a),a):(console.error(`Emoji reaction burst could not draw an emoji.`),n.current.set(i,null),null)}function f(e){c.clearRect(0,0,window.innerWidth,window.innerHeight);let n=[];for(let r of t.current){if(e10&&(r.opacity-=.04),r.opacity<=0)continue;let t=d(r.emoji,r.size);t&&(c.globalAlpha=r.opacity,c.drawImage(t,r.x-t.width/2,r.y-t.height/2)),n.push(r)}c.globalAlpha=1,t.current=n,n.length>0?l=requestAnimationFrame(f):i(!1)}return u(),window.addEventListener(`resize`,u),l=requestAnimationFrame(f),()=>{cancelAnimationFrame(l),window.removeEventListener(`resize`,u)}},[r]),{burst:a,canvas:r?(0,et.createPortal)((0,W.jsx)(`canvas`,{ref:e,className:`review-emoji-burst`,"aria-hidden":`true`}),document.body):null}}var kn=new TextEncoder;function An({thread:e,bodyMaximumBytes:t,mutation:n,onClose:r,onDraftStateChange:i,onReply:a,onEdit:o,onDelete:s,onResolve:c,onReopen:l}){let[u,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(``),[v,y]=(0,H.useState)(``),[b,x]=(0,H.useState)(!1),[S,C]=(0,H.useState)(!1),[w,T]=(0,H.useState)(null),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)(!1),M=u.trim()!==``||m!==null,N=kn.encode(u).length>t,P=kn.encode(g).length>t,F=e.root.resolvedAt!==null,I=e.root.deletedAt!==null||F;(0,H.useEffect)(()=>(i(M),()=>i(!1)),[M,i]);function L(){n||(u.trim()===``&&g===v?r():(C(!1),j(!0)))}function R(){d(``),h(null),_(``),y(``),C(!1),j(!1),i(!1),r()}async function z(){u.trim()===``||N||n||(await a(u)?(d(``),p(!1)):p(!0))}function B(e){d(e),p(!1),j(!1)}function ee(e){e.body&&(h(e.id),_(e.body),y(e.body),x(!1),T(null),D(!1))}function V(e){_(e),x(!1),C(!1),j(!1)}async function te(e){g.trim()===``||P||n||(await o(e,g)?(h(null),_(``),y(``),C(!1),x(!1)):x(!0))}function ne(){g===v?re():C(!0)}function re(){h(null),_(``),y(``),x(!1),C(!1),j(!1)}function ie(e){T(e),D(!1)}function ae(){T(null),D(!1)}async function oe(e){n||(await s(e)?ae():D(!0))}async function U(){if(n||M)return;let e=F?await l():await c();k(!e)}return{state:{replyDraft:u,replyFailed:f,editingCommentId:m,editDraft:g,editFailed:b,confirmingEditDiscard:S,confirmingDeleteId:w,deleteFailed:E,resolutionFailed:O,confirmingDiscard:A,draftActive:M,replyBodyTooLong:N,editBodyTooLong:P,resolved:F,replyBlocked:I},actions:{requestDismissal:L,discardAndClose:R,keepDraft:()=>j(!1),submitReply:z,changeReplyDraft:B,startEdit:ee,changeEditDraft:V,saveEdit:te,cancelEdit:ne,keepEdit:()=>C(!1),discardEdit:re,requestDelete:ie,cancelDelete:ae,deleteComment:oe,changeResolution:U}}}function jn(e){let t=e.closest(`[data-testid="ActionMenu"]`);if(!t)return;let n=e.getBoundingClientRect(),r=e.closest(`.review-shell`)?.getBoundingClientRect(),i=Math.max(0,r?.top??0),a=Math.min(window.innerHeight,r?.bottom??window.innerHeight);t.style.setProperty(`--review-thread-menu-room-top`,`${Math.max(0,n.top-i-8)}px`),t.style.setProperty(`--review-thread-menu-room-bottom`,`${Math.max(0,a-n.bottom-8)}px`)}function Mn({thread:e,anchorPoint:t,bodyMaximumBytes:n,mutation:r,copy:i,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d,onAddReaction:f,onRemoveReaction:p,onMarkRead:m,onMarkUnread:h}){let g=(0,H.useId)(),_=(0,H.useRef)(null),v=(0,H.useRef)(0),y=(0,H.useRef)(e.root.activityVersion),b=(0,H.useRef)(null),x=(0,H.useRef)(!1),S=(0,H.useRef)(!1),C=(0,H.useRef)(!1),[w,T]=(0,H.useState)(!1),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)(!1),{burst:M,canvas:N}=On(),{state:P,actions:F}=An({thread:e,bodyMaximumBytes:n,mutation:r,onClose:a,onDraftStateChange:o,onReply:s,onEdit:c,onDelete:l,onResolve:u,onReopen:d}),I={x:12,y:12},L=[e.root,...e.replies],{cardRef:R,position:z}=pn({anchorPoint:t??I,...t?{anchorSelector:`[data-review-thread-id="${e.root.id}"]`,anchorRectangle:{x:t.x-16,y:t.y-16,width:32,height:32}}:{},layoutKey:[P.confirmingDiscard,P.confirmingEditDiscard,P.replyFailed,P.editFailed,P.deleteFailed,P.resolutionFailed,P.editingCommentId,P.confirmingDeleteId,P.resolved,w,O,e.replies.length,e.participants.length,L.map(e=>e.reactions.length).join(`,`)].join(`:`)}),B=P.replyBlocked?e.root.deletedAt?i.deletedReplyBlockedLabel:e.root.resolvedBy?i.resolvedByLabel.replace(`%{author}`,e.root.resolvedBy.name||`@${e.root.resolvedBy.login}`):i.resolvedReplyBlockedLabel:null,ee=(0,H.useCallback)(()=>{R.current?.querySelector(`.review-thread-conversation__close`)?.focus({preventScroll:!0})},[R]);(0,H.useEffect)(()=>{if(P.confirmingDiscard)R.current?.querySelector(`.review-thread-conversation__footer button`)?.focus({preventScroll:!0});else if(C.current){let e=P.editingCommentId===null?`.review-thread-reply-form textarea`:`.review-thread-message__edit textarea`;R.current?.querySelector(e)?.focus({preventScroll:!0})}C.current=P.confirmingDiscard},[R,P.confirmingDiscard,P.editingCommentId]),(0,H.useEffect)(()=>{let e=document.activeElement;return _.current=e instanceof HTMLElement?e:null,ee(),()=>{_.current?.isConnected&&_.current.focus()}},[ee]),(0,H.useEffect)(()=>{let t=y.current;e.unread&&b.current!==t&&(b.current=t,x.current=!0,D(!0),m(t).then(e=>T(!e)).catch(()=>T(!0)).finally(()=>{x.current=!1,D(!1)}))},[m,e.unread]);async function te(){if(!(x.current||S.current||r!==null)){b.current=y.current,S.current=!0,j(!0),k(!1);try{let e=await h();k(!e),e&&T(!1)}catch{k(!0)}finally{S.current=!1,j(!1)}}}return(0,H.useEffect)(()=>{function e(){P.confirmingDiscard?F.keepDraft():P.confirmingEditDiscard?F.keepEdit():F.requestDismissal()}function t(t){t.key!==`Escape`||t.defaultPrevented||t.isComposing||R.current?.querySelector(`[role="menu"]`)||t.target instanceof Element&&t.target.closest(`[role="menu"], [role="dialog"], dialog`)||(t.preventDefault(),e())}function n(){let t=document.activeElement;R.current?.querySelector(`[role="menu"]`)||t instanceof Element&&(t.closest(`[role="menu"]`)||t.closest(`[role="dialog"], dialog`)&&!R.current?.contains(t))||e()}return document.addEventListener(`keydown`,t),window.addEventListener(`replica:review-dismiss`,n),()=>{document.removeEventListener(`keydown`,t),window.removeEventListener(`replica:review-dismiss`,n)}},[F,R,P.confirmingDiscard,P.confirmingEditDiscard]),(0,W.jsxs)(Dn,{ref:R,"aria-labelledby":g,anchored:!!t,position:z,onKeyDown:e=>{e.key!==`Escape`||e.defaultPrevented||e.nativeEvent.isComposing||e.target instanceof Element&&e.target.closest(`[role="menu"]`)||(e.preventDefault(),P.confirmingDiscard?F.keepDraft():P.confirmingEditDiscard?F.keepEdit():F.requestDismissal())},children:[(0,W.jsxs)(`div`,{className:`review-thread-conversation__layout`,children:[(0,W.jsxs)(`header`,{className:`review-thread-conversation__header`,children:[(0,W.jsx)(U.Heading,{as:`h2`,size:`6`,id:g,children:i.threadHeading}),(0,W.jsx)(U.Button,{size:`small`,disabled:P.draftActive||r!==null,"aria-busy":r!==null&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`),onClick:()=>{F.changeResolution()},children:P.resolved?i.reopenLabel:i.resolveLabel}),r&&`commentId`in r&&r.commentId===e.root.id&&(r.kind===`resolve`||r.kind===`reopen`)?(0,W.jsx)(ce,{role:`status`,children:P.resolved?i.reopeningLabel:i.resolvingLabel}):null,(0,W.jsx)(G,{icon:V,"aria-label":i.backToCommentsLabel,title:i.backToCommentsLabel,variant:`invisible`,className:`review-thread-conversation__close`,onClick:F.requestDismissal})]}),P.resolutionFailed?(0,W.jsx)(pe,{variant:`critical`,title:i.resolutionErrorLabel,className:`review-thread-conversation__banner`}):null,w?(0,W.jsx)(pe,{variant:`critical`,title:i.readErrorLabel,className:`review-thread-conversation__banner`}):null,O?(0,W.jsx)(pe,{variant:`critical`,title:i.markUnreadErrorLabel,className:`review-thread-conversation__banner`}):null,(0,W.jsx)(`div`,{className:`review-thread-conversation__messages`,onClickCapture:e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`button[data-testid="ActionMenu-button"]`);t&&e.currentTarget.contains(t)&&(v.current=e.currentTarget.scrollTop,jn(t))},onScroll:e=>{let t=e.currentTarget.scrollTop,n=t-v.current;if(v.current=t,n===0)return;let r=e.currentTarget.getBoundingClientRect();e.currentTarget.querySelectorAll(`[role="menu"]`).forEach(e=>{let t=e.closest(`[data-testid="ActionMenu"]`)?.querySelector(`button[data-testid="ActionMenu-button"]`);if(!t)return;let i=t.getBoundingClientRect();if(r.height>0&&(i.bottom<=r.top||i.top>=r.bottom)){let n=e.contains(document.activeElement);t.click(),n&&ee();return}let a=Number.parseFloat(e.style.top);Number.isFinite(a)&&(e.style.top=`${a-n}px`),jn(t)})},children:L.map(e=>(0,W.jsx)(En,{comment:e,mutation:r,copy:i,editing:P.editingCommentId===e.id,editDraft:P.editingCommentId===e.id?P.editDraft:``,editBodyTooLong:P.editingCommentId===e.id&&P.editBodyTooLong,editFailed:P.editingCommentId===e.id&&P.editFailed,confirmingEditDiscard:P.editingCommentId===e.id&&P.confirmingEditDiscard,saving:r?.kind===`edit`&&r.commentId===e.id,confirmingDelete:P.confirmingDeleteId===e.id,deleting:r?.kind===`delete`&&r.commentId===e.id,deleteFailed:P.confirmingDeleteId===e.id&&P.deleteFailed,actionsDisabled:r!==null&&r.kind!==`add-reaction`&&r.kind!==`remove-reaction`||P.confirmingDiscard||P.confirmingDeleteId!==null||P.replyDraft.trim()!==``||P.editingCommentId!==null&&P.editingCommentId!==e.id,onStartEdit:()=>F.startEdit(e),onEditDraftChange:F.changeEditDraft,onSaveEdit:()=>{F.saveEdit(e.id)},onCancelEdit:F.cancelEdit,onKeepEdit:F.keepEdit,onDiscardEdit:F.discardEdit,onRequestDelete:()=>F.requestDelete(e.id),onCancelDelete:F.cancelDelete,onDelete:()=>{F.deleteComment(e.id)},onAddReaction:t=>f(e.id,t),onRemoveReaction:t=>p(e.id,t),onBurstReaction:M,onMarkUnread:e.kind===`root`?()=>void te():void 0,markUnreadDisabled:E||A||r!==null},e.id))}),(0,W.jsx)(`div`,{className:`review-thread-conversation__footer${B&&!P.confirmingDiscard?` review-thread-conversation__footer--blocked`:``}`,children:(0,W.jsx)(vn,{blockedLabel:B,confirmingDiscard:P.confirmingDiscard,replyDraft:P.replyDraft,replyBodyTooLong:P.replyBodyTooLong,replyFailed:P.replyFailed,replyDisabled:r!==null||P.editingCommentId!==null,replying:r?.kind===`reply`&&r.commentId===e.root.id,copy:i,onKeepDraft:F.keepDraft,onDiscardDraft:F.discardAndClose,onSubmit:()=>{F.submitReply()},onDraftChange:F.changeReplyDraft})})]}),N]})}function Nn({selectionNotice:e,rateLimitNotice:t,composer:n,conversation:r}){return(0,W.jsxs)(W.Fragment,{children:[e||t?(0,W.jsxs)(`div`,{className:`canvas-selection-notice`,role:`alert`,children:[e?(0,W.jsx)(`div`,{children:e}):null,t?(0,W.jsx)(`div`,{children:t}):null]}):null,n?(0,W.jsx)(`div`,{className:`canvas-composer-shell`,children:(0,W.jsx)(_n,{...n})}):null,r?(0,W.jsx)(`div`,{className:`canvas-conversation-shell`,children:(0,W.jsx)(Mn,{...r},r.thread.root.id)}):null]})}function Pn({identity:e,enabled:t,ready:n,bridgeProblem:r,token:i}){let[a,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(!1),p=(0,H.useRef)(e);(0,H.useLayoutEffect)(()=>(p.current=e,()=>{p.current=``}),[e]),(0,H.useEffect)(()=>{let e=window.setTimeout(()=>{o(``),c(!1),u(!1),f(!1)},0);return()=>{window.clearTimeout(e)}},[e,t]);async function m(){let t=e;o(``),c(!0);try{await $(`/api/commenting/fix`,i,{method:`POST`}),p.current===t&&f(!0)}catch(e){p.current===t&&o(e instanceof Error?e.message:String(e))}finally{p.current===t&&c(!1)}}return{visible:t&&!n&&!l&&!!r,error:a,busy:s,requested:d,onFix:()=>void m(),onDismiss:()=>u(!0)}}function Fn({preference:e,disabled:t=!1}){let n=(0,H.useId)(),r=(0,H.useId)(),i=(0,H.useId)(),a=(0,H.useId)();return(0,W.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":n,children:[(0,W.jsx)(U.Heading,{as:`h3`,size:`subhead-medium`,id:n,children:q.settings}),(0,W.jsxs)(`div`,{className:`canvas-publish-settings__option`,children:[(0,W.jsx)(`label`,{id:r,htmlFor:i,children:q.alwaysCommit}),(0,W.jsx)(lt,{className:`canvas-publish-settings__toggle`,id:i,"aria-labelledby":r,"aria-describedby":e.error?a:void 0,checked:e.remember===!0,disabled:e.loading||e.remember===null,"aria-disabled":e.saving||t||void 0,onChange:n=>{!e.saving&&!t&&e.save(n)},size:`small`})]}),e.error?(0,W.jsxs)(`div`,{id:a,className:`canvas-publish-settings__error`,children:[(0,W.jsx)(pe,{title:e.error,variant:`critical`,layout:`compact`}),(0,W.jsx)(U.Button,{size:`small`,disabled:e.loading||e.saving,onClick:()=>void e.retry(),children:q.retrySettings})]}):null]})}function In(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ln(e){return!In(e)||typeof e.pathname!=`string`||typeof e.search!=`string`||typeof e.hash!=`string`?null:{pathname:e.pathname,search:e.search,hash:e.hash}}function Rn({config:e,frameRef:t,onRouteChange:n,status:r,onStatusChange:i,onSelectHub:a,onConnect:o,onDisconnected:s,connectionButtonRef:c,connecting:l=!1,publication:u,publicationBusy:d=!1,dirty:f=!1,onPublish:p,onRetryPublication:m,publishPreference:h,open:g,onClose:_}){let[v,y]=(0,H.useState)({identity:``,items:[]}),b=r?.prototype?.repositoryId,x=r?.prototype?.id,S=r?.state===`connected`,C=r?.hubOrigin,w=(0,H.useMemo)(()=>({load:async()=>{if(!S||!C)throw Error(K.mentionSuggestionsError);return sn.parse(await $(`/api/hub/mention-candidates?repositoryId=${b}&prototypeId=${x}`,e.token)).candidates},copy:{suggestions:K.mentionSuggestions,error:K.mentionSuggestionsError,loading:K.mentionSuggestionsLoading,empty:K.mentionSuggestionsEmpty,retry:bt.retryLabel,limit:K.mentionLimit}}),[e.token,S,C,b,x]),[T,E]=(0,H.useState)(!1),[D,O]=(0,H.useState)(yt),[k,A]=(0,H.useState)(!0),[j,N]=(0,H.useState)(null),[P,F]=(0,H.useState)(null),[I,R]=(0,H.useState)(``),[z,B]=(0,H.useState)(``),[ee,V]=(0,H.useState)(``),[te,ne]=(0,H.useState)(!1),[re,ie]=(0,H.useState)(!1),[ae,oe]=(0,H.useState)(!1),[se,ce]=(0,H.useState)(r?.discovery?.mismatch&&r.discovery.origin||r?.hubOrigin||``),[G,le]=(0,H.useState)(!1),[ue,de]=(0,H.useState)(!1),[fe,q]=(0,H.useState)(``),[me,he]=(0,H.useState)(``),[ge,_e]=(0,H.useState)(``),[ve,ye]=(0,H.useState)(!1),[be,J]=(0,H.useState)(null),[xe,Se]=(0,H.useState)(!1),[Ce,we]=(0,H.useState)(new Map),[Te,Ee]=(0,H.useState)(!1),[De,Oe]=(0,H.useState)(``),[Y,ke]=(0,H.useState)(null),[Z,je]=(0,H.useState)(null),[Me,Ne]=(0,H.useState)(null),[Pe,Fe]=(0,H.useState)(!1),[Ie,Le]=(0,H.useState)(null),Re=(0,H.useRef)(!1),ze=(0,H.useRef)(0),Be=(0,H.useRef)(!1),Ve=(0,H.useRef)(``),He=(0,H.useRef)(null),Ue=(0,H.useRef)(``),We=(0,H.useRef)(g),Ge=(0,H.useRef)(void 0),Ke=`${r?.hubOrigin??``}/${r?.repository??``}/${r?.branch??``}/${r?.state===`connected`?r.prototype?.id??``:``}`,qe=r?r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``:null,Je=(0,H.useRef)(qe),Ye=r?.state,Xe=Ye===`unavailable`||Ye===`denied`,Ze=(0,H.useRef)(Ye);(0,H.useEffect)(()=>{if(qe===null||Je.current===qe)return;let e=window.setTimeout(()=>{ce(qe),Je.current=qe},0);return()=>window.clearTimeout(e)},[qe]),(0,H.useEffect)(()=>{if(!Ye||Ze.current===Ye)return;if(Ye!==`connected`&&Ye!==`undiscovered`){Ze.current=Ye;return}let e=window.setTimeout(()=>{oe(!1),Ze.current=Ye},0);return()=>window.clearTimeout(e)},[Ye]);let Qe=Pn({identity:Ke,enabled:r?.repositoryAuthorized===!0,ready:Te,bridgeProblem:De,token:e.token}),$e=(0,H.useMemo)(()=>v.identity===Ke?v.items:[],[v,Ke]),nt=(0,H.useMemo)(()=>St($e),[$e]),at=(0,H.useMemo)(()=>{let e=new Map(nt.flatMap(e=>e.participants.map(e=>[e.login.toLowerCase(),e])));return Array.from(e.values()).sort((e,t)=>(e.name||e.login).localeCompare(t.name||t.login))},[nt]),ot=(0,H.useMemo)(()=>{let e=new Map;for(let t of nt){let n=t.root.id,r=Ce.get(n);if(r)e.set(n,{commentId:n,status:`resolved`,point:r,rect:r.rect});else if(Te){let r=t.root.anchor.route;e.set(n,{commentId:n,status:j&&(r.pathname!==j.pathname||r.search!==j.search||r.hash!==j.hash)?`route-mismatch`:`missing`})}}return e},[Te,Ce,j,nt]),lt=r?.state===`connected`?nt.find(e=>e.root.id===P):null,Q=r?.state===`connected`?r.prototype:null,ut=r?.state===`disconnected`||r?.state===`pairing`||r?.state===`unconfigured`,dt=Q?.build?.author.login,ft=dt&&/^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}(?:\[bot\])?$/i.test(dt)?`https://github.com/${encodeURIComponent(dt)}`:null,pt=Q?.build?.author.name?.trim()||(ft?dt:null)||K.unknownCommitAuthor,mt=Q?.canEdit&&Q.registered,ht=Q?.id,gt=Q?.build??null,xt=(0,H.useMemo)(()=>Q?nt.filter(e=>on(e,{filters:D,viewerLogin:Q.viewerLogin,selectedBuildNumber:gt?.number,route:j})):nt,[gt?.number,D,j,Q,nt]),Ct=xt.length,wt=xt.some(e=>e.unread),Tt=!!(gt&&r?.commitSha&&r.commitSha===gt.commitSha),Et=Z!==null||xe||Ie!==null,Dt=g&&!T,Ot=typeof document>`u`?null:document.getElementById(`canvas-review-controls`),kt=Z?Z.kind===`element`?{x:Z.rect.x-Z.viewport.scrollX+Z.rect.width*Z.elementOffset.x,y:Z.rect.y-Z.viewport.scrollY+Z.rect.height*Z.elementOffset.y}:st(Z,{x:Z.rect.x-Z.viewport.scrollX,y:Z.rect.y-Z.viewport.scrollY,width:Z.rect.width,height:Z.rect.height}).point:null;(0,H.useLayoutEffect)(()=>(Ue.current=Ke,()=>window.clearTimeout(Ge.current)),[Ke]),(0,H.useLayoutEffect)(()=>{g&&He.current?.focus({preventScroll:!0})},[g]),(0,H.useEffect)(()=>{let e=We.current;if(We.current=g,!g||e||!T)return;if(xe){_();return}let t=window.setTimeout(()=>{E(!1),F(null)},0);return()=>window.clearTimeout(t)},[T,xe,_,g]),(0,H.useEffect)(()=>{if(!g)return;function e(e){e.key!==`Escape`||e.defaultPrevented||e.target instanceof Element&&e.target.closest(`[role="dialog"], dialog, [role="menu"]`)||(e.preventDefault(),_())}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[g,_]);let At=ve&&be===Ke,jt=JSON.stringify(e.pickAndPolish||e.improvementNotesDemo?[]:nt.slice(0,200).map(({root:e})=>({id:e.id,anchor:e.anchor}))),Mt=(0,H.useCallback)(async()=>{if(!ht||Be.current)return;let t=Ke,n=ze.current;ne(!0);try{let r=[],i=null;for(let t=0;t<100;t+=1){let n=rn.parse(await $(`/api/hub/comments${i?`?cursor=${encodeURIComponent(i)}`:``}`,e.token));if(r.push(...n.comments),i=n.nextCursor,!i)break;if(t===99)throw Error(`Too many review comment pages.`)}if(Ue.current!==t||ze.current!==n)return;y({identity:t,items:r}),ie(!1),R(``)}catch(e){Ue.current===t&&ze.current===n&&(ie(!0),R(e instanceof Error?e.message:String(e)))}finally{Ue.current===t&&ze.current===n&&ne(!1)}},[e.token,ht,Ke]);(0,H.useEffect)(()=>{let e=window.setTimeout(()=>{y({identity:Ke,items:[]}),E(!1),O(yt),A(!0),N(null),F(null),Se(!1),ye(!1),J(null),q(``),he(``),Le(null),Re.current=!1,Be.current=!1,ze.current+=1,we(new Map),Ee(!1),ke(null),je(null),Ne(null),B(``),ie(!1),ht&&Mt()},0);return()=>window.clearTimeout(e)},[Ke,ht,Mt]),(0,H.useEffect)(()=>{if(!ht)return;let e=window.setInterval(()=>void Mt(),3e4);return()=>window.clearInterval(e)},[ht,Mt]),(0,H.useEffect)(()=>{if(!ht)return;let t=new AbortController,n,r=5e3;async function i(){let a=Date.now();try{let n=await fetch(`/api/hub/events`,{headers:{"X-Replica-Canvas-Token":e.token},signal:t.signal});if(!n.ok||!n.body)throw Error(`Live review connection unavailable.`);Fe(!1);let r=n.body.getReader(),i=new TextDecoder,a=``;for(;!t.signal.aborted;){let{value:e,done:t}=await r.read();if(t)throw Error(`Live review connection closed.`);a+=i.decode(e,{stream:!0});let n=a.split(`
`);a=n.pop()||``;for(let e of n)if(e.startsWith(`event: comments
`)&&Mt(),e.startsWith(`event: error
-`))throw Error(`Live review connection failed.`)}}catch{t.signal.aborted||Ie(!0)}t.signal.aborted||(Date.now()-a>=3e4&&(r=5e3),n=window.setTimeout(()=>void i(),r),r=Math.min(r*2,6e4))}return i(),()=>{t.abort(),window.clearTimeout(n)}},[qe,ht,e.token,Mt]);let Nt=(0,V.useCallback)((n,r={})=>{let i=t.current;return!i?.contentWindow||!He.current?!1:(i.contentWindow.postMessage({type:n,nonce:He.current,...r},new URL(e.previewUrl??e.prototypeUrl).origin),!0)},[e.prototypeUrl,e.previewUrl,t]),Pt=(0,V.useCallback)(t=>{e.pickAndPolish||e.improvementNotesDemo||!Ee||!Tt||Et||(F(null),Pe(null),Ae(t),_(),Nt(`replica:canvas:select`,{mode:t}))},[e.improvementNotesDemo,e.pickAndPolish,Ee,Tt,_,Et,Nt]),Ft=(0,V.useCallback)(()=>{J&&(Nt(`replica:canvas:cancel-selection`),Ae(null))},[J,Nt]),It=(0,V.useCallback)(()=>{Nt(`replica:canvas:clear-selection`),Me(null),Pe(null)},[Nt]);(0,V.useEffect)(()=>{let r=t.current;if(!r){Te(new Map),De(!1);return}let i=new URL(e.previewUrl??e.prototypeUrl).origin,a=JSON.parse(jt),o=new Set(a.map(({id:e})=>e)),s=Date.now(),c=!1;function l(){He.current=crypto.randomUUID(),s=Date.now(),c=!1,De(!1),ke(``),Te(new Map),r?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:He.current},i),u()}function u(){a.length&&r?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:He.current,anchors:a},i)}function d(t){let a=t.data;if(t.source===r?.contentWindow&&t.origin===i&&In(a)&&a.nonce===He.current){if(a.type===`replica:canvas:bridge-error`)De(!1),ke(G.commentingMissing);else if(a.type===`replica:canvas:ready`){if(a.protocolVersion!==1){c=!0,De(!1),ke(G.commentingIncompatible);return}if(!Ln(a.route))return;s=Date.now(),c=!1,De(!0),ke(``),N(Ln(a.route)),n?.(Ln(a.route),a.replaceRoute===!0)}else if(!c){if(a.type===`replica:canvas:conversation-dismiss-requested`)window.dispatchEvent(new Event(`replica:review-dismiss`));else if(a.type===`replica:canvas:resolved`){if(a.protocolVersion!==1||!Ln(a.route)||!Array.isArray(a.results)||a.results.length>200)return;s=Date.now(),De(!0),ke(``),N(Ln(a.route)),n?.(Ln(a.route),a.replaceRoute===!0);let e=new Map;for(let t of a.results){if(!In(t)||typeof t.id!=`number`||typeof t.x!=`number`||typeof t.y!=`number`||!o.has(t.id)||!Number.isFinite(t.x)||!Number.isFinite(t.y)||t.x<0||t.y<0||t.x>r.clientWidth||t.y>r.clientHeight)continue;let n=In(t.rect)&&typeof t.rect.x==`number`&&typeof t.rect.y==`number`&&typeof t.rect.width==`number`&&typeof t.rect.height==`number`&&Number.isFinite(t.rect.x)&&Number.isFinite(t.rect.y)&&Number.isFinite(t.rect.width)&&Number.isFinite(t.rect.height)&&t.rect.width>=0&&t.rect.height>=0?{x:t.rect.x,y:t.rect.y,width:t.rect.width,height:t.rect.height}:{x:t.x,y:t.y,width:0,height:0};e.set(t.id,{x:t.x,y:t.y,rect:n})}Te(e)}else if(a.type===`replica:canvas:selected`){if(e.pickAndPolish||e.improvementNotesDemo)return;let t=Gt.safeParse(a.anchor);if(!t.success){Nt(`replica:canvas:cancel-selection`),Nt(`replica:canvas:clear-selection`),Ae(null),Pe(In(a.anchor)&&a.anchor.kind===`area`?`area-unavailable`:`element-unavailable`);return}Me(t.data),Ae(null),Pe(null)}else a.type===`replica:canvas:selection-failed`&&(a.reason===`element-unavailable`||a.reason===`area-too-small`||a.reason===`area-unavailable`)?(Ae(null),Pe(a.reason)):a.type===`replica:canvas:selection-cancelled`&&Ae(null)}}}function f(){Ae(null),Me(null),Pe(null),l()}r.addEventListener(`load`,f),window.addEventListener(`message`,d),l();let p=window.setInterval(()=>{Date.now()-s>=2e4&&(De(!1),Te(new Map),ke(c?G.commentingIncompatible:G.commentingMissing)),r.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:He.current},i),u()},2e3);return()=>{r.removeEventListener(`load`,f),window.removeEventListener(`message`,d),window.clearInterval(p)}},[qe,jt,e.prototypeUrl,e.improvementNotesDemo,e.pickAndPolish,e.previewUrl,t,n,Nt]);async function Lt(t,n,r,i){let a=qe,o=i?.kind===`add-reaction`||i?.kind===`remove-reaction`||i?.kind===`mark-unread`;if(i){if(ze.current)return!1;ze.current=!0,Re(i)}o&&(Ve.current=!0,Be.current+=1),B(``);try{let i=await $(`/api/hub/comments/${t}`,e.token,{method:n,...r?{body:JSON.stringify(r)}:{}});if(We.current!==a)return!1;if(o){let e=an.parse(i);y(t=>{if(t.identity!==a)return t;let n=new Map(t.items.map(e=>[e.id,e]));for(let t of e.comments)n.set(t.id,t);return{identity:a,items:[...n.values()]}})}return o||(Ke.current=window.setTimeout(()=>void Mt(),0)),!0}catch(e){return We.current===a&&(R(e instanceof Error?e.message:String(e)),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&B(e.message)),!1}finally{i&&We.current===a&&(o&&(Ve.current=!1,Be.current+=1,Ke.current=window.setTimeout(()=>void Mt(),0)),ze.current=!1,Re(null))}}async function Rt(t){if(!gt||!X||ze.current)return!1;let n=qe;ze.current=!0,Re({kind:`create`}),B(``);try{let r=an.parse(await $(`/api/hub/comments`,e.token,{method:`POST`,body:JSON.stringify({review_comment:{build_number:gt.number,body:t,anchor:X}})}));if(We.current!==n)return!1;let i=r.comments.find(e=>e.kind===`root`);return i?(y(e=>{if(e.identity!==n)return e;let t=new Map(e.items.map(e=>[e.id,e]));for(let e of r.comments)t.set(e.id,e);return{identity:n,items:[...t.values()]}}),It(),F(i.id),!0):!1}catch(e){return We.current===n&&(R(e instanceof Error?e.message:String(e)),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&B(e.message)),!1}finally{We.current===n&&(ze.current=!1,Re(null))}}function zt(){Et||(T?(F(null),E(!1)):(E(!0),g&&_()))}let Bt=r?.repository&&r.branch?`https://github.com/${r.repository.split(`/`).map(e=>encodeURIComponent(e)).join(`/`)}/tree/${encodeURIComponent(r.branch)}`:null,Vt=r?.branch&&Bt?(0,U.jsxs)(`a`,{className:`canvas-hub-publication__branch`,href:Bt,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open ${r.branch} on GitHub`,children:[(0,U.jsx)(M,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`span`,{children:r.branch})]}):r?.branch?(0,U.jsxs)(`span`,{className:`canvas-hub-publication__branch`,children:[(0,U.jsx)(M,{size:16,"aria-hidden":`true`}),(0,U.jsx)(`span`,{children:r.branch})]}):null,Ht=(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-origin-title`,children:`Hub`}),r&&r.state!==`unconfigured`?(0,U.jsx)(`div`,{className:`canvas-hub-origin`,children:r.hubOrigin?(0,U.jsx)(`a`,{href:Q?new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}`,r.hubOrigin).href:r.hubOrigin,target:`_blank`,rel:`noopener noreferrer`,children:r.hubOrigin}):(0,U.jsx)(`span`,{children:`URL unavailable`})}):null,oe||r?.state===`disconnected`||r?.state===`unconfigured`?(0,U.jsxs)(`form`,{className:`canvas-hub-origin-form`,onSubmit:e=>{e.preventDefault(),!(W||de)&&(ue(!0),se(!0),R(``),a(ce).then(()=>{se(!1)}).catch(e=>R(e.message)).finally(()=>ue(!1)))},children:[(0,U.jsxs)(`div`,{className:`canvas-hub-origin-field`,children:[(0,U.jsxs)(`label`,{children:[G.hubUrl,(0,U.jsx)(`input`,{type:`url`,required:!0,value:ce,placeholder:`https://hub.example.com`,disabled:W||de,onChange:e=>le(e.target.value)})]}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,className:`canvas-icon-button`,leadingVisual:(0,U.jsx)(L,{size:16}),"aria-label":G.resetHubUrl,title:G.resetHubUrl,disabled:W||de,"aria-busy":de,onClick:()=>{fe(!0),R(``),$(`/api/hub/discovery`,e.token,{method:`POST`,body:`{}`}).then(async e=>{if(e.discovery?.state!==`valid`||!e.discovery.origin)throw Error(e.discovery?.message||G.resetHubUnavailable);le(e.discovery.origin),await i()}).catch(e=>R(e.message)).finally(()=>fe(!1))},children:(0,U.jsx)(`span`,{className:`visually-hidden`,children:G.resetHubUrl})})]}),(0,U.jsx)(`p`,{children:G.hubHttpsHint}),(0,U.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,U.jsx)(H.Button,{type:`submit`,size:`small`,disabled:W||de,children:`Save Hub`}),oe&&r?.state!==`unconfigured`&&r?.state!==`disconnected`?(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,disabled:W||de,onClick:()=>se(!1),children:`Cancel`}):null]})]}):null]});return(0,U.jsxs)(it,{source:w,children:[$e.visible?(0,U.jsx)(cn,{...$e}):null,Q&&Ot&&!e.pickAndPolish&&!e.improvementNotesDemo?(0,tt.createPortal)((0,U.jsxs)(`div`,{className:`canvas-review-controls review-shell__comment-actions`,role:`group`,"aria-label":bt.heading,children:[(0,U.jsx)(vt,{bridgeReady:Ee&&Tt,copy:bt,selectionBlocked:Et,selecting:J!==null,onCancelSelection:Ft,onStartAreaSelection:()=>Pt(`area`),onStartElementSelection:()=>Pt(`element`)}),(0,U.jsx)(H.Tooltip,{text:Et?bt.selectionBlockedLabel:`${bt.heading} (${bt.sidebarShortcutLabel})`,type:`description`,children:(0,U.jsxs)(H.Button,{className:`canvas-comments-toggle review-shell__comments-toggle`,variant:`secondary`,size:`small`,"aria-label":`${bt.heading}, ${Ct}${wt?`, ${bt.unreadLabel}`:``}`,"aria-expanded":T,"aria-keyshortcuts":`Shift+C`,disabled:!gt||Et,onClick:zt,children:[(0,U.jsx)(nt,{children:Ct}),wt?(0,U.jsx)(`span`,{className:`canvas-comments-unread-badge review-shell__unread-badge`,"aria-hidden":`true`}):null]})})]}),Ot):null,k&&xt.length&&Ee?(0,U.jsx)(`div`,{className:`canvas-marker-layer`,children:(0,U.jsx)(lt,{threads:xt,resolutions:st,selectedThreadId:P,selectionBlocked:Se,focusSelectedMarker:!1,showAreaHighlightsOnlyWhenSelected:!0,copy:bt,onSelect:e=>F(e.root.id)})}):null,(0,U.jsxs)(at,{className:`canvas-hub-panel`,contentClassName:`canvas-hub-content`,title:`Replica Hub`,label:`Hub`,open:Dt,closeLabel:`Close Hub`,closeRef:Ue,onClose:_,children:[I?(0,U.jsx)(`p`,{role:`alert`,children:I}):null,ee?(0,U.jsx)(`p`,{role:`alert`,children:ee}):null,r?null:(0,U.jsx)(`p`,{children:`Checking Hub connection…`}),!ut&&!Ze&&r?.message?(0,U.jsx)(`p`,{role:`status`,children:r.message}):null,Ze?(0,U.jsxs)(`div`,{className:`canvas-hub-status`,children:[(0,U.jsx)(me,{variant:`warning`,layout:`compact`,title:r?.message||Y.hubUnavailable}),(0,U.jsx)(H.Button,{variant:`primary`,size:`small`,disabled:d,"aria-busy":d,leadingVisual:d?(0,U.jsx)(L,{size:16}):void 0,onClick:m||(()=>void i()),children:Y.retry})]}):null,!ut&&!Ze&&u&&p&&m?(0,U.jsx)(je,{publication:u,busy:d,dirty:f,onPublish:p,onRetry:m}):null,ut?(0,U.jsxs)(`section`,{className:`canvas-hub-connection`,children:[(0,U.jsx)(`p`,{children:G.connectionBeforePublishing}),(0,U.jsx)(H.Button,{ref:c,variant:`primary`,onClick:o,disabled:l,children:l?G.connectionOpeningBrowser:G.connectToHub})]}):null,!ut&&(!oe&&(r?.discovery?.mismatch||[`invalid`,`unreachable`].includes(r?.discovery?.state||``))||r?.state===`unconfigured`)?(0,U.jsxs)(`div`,{className:`canvas-hub-settings`,children:[!oe&&r?.discovery?.mismatch?(0,U.jsx)(`p`,{role:`alert`,children:`The repository configuration differs from your selected Hub. Your connection has not changed. Disconnect Hub before selecting another URL.`}):null,!oe&&[`invalid`,`unreachable`].includes(r?.discovery?.state||``)?(0,U.jsx)(`p`,{role:`alert`,children:r?.discovery?.message}):null,r?.state===`unconfigured`?(0,U.jsx)(`p`,{children:`Enter your Hub URL to connect.`}):null]}):null,r?.state===`undiscovered`&&!u?(0,U.jsxs)(`p`,{children:[`Connected to `,r.repository,`. Hub has not discovered`,` `,r.branch||`a prototype branch`,`. Your repository connection is ready. Push a named branch to make its Builds and reviews available.`]}):null,Q?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`section`,{className:u&&u.kind!==`ready`&&p&&m?`canvas-hub-publication canvas-hub-publication--after-status`:`canvas-hub-publication`,"aria-label":`Prototype`,children:mt&&At?(0,U.jsxs)(`form`,{className:`canvas-hub-publication__form`,onSubmit:t=>{t.preventDefault(),$(`/api/hub/metadata`,e.token,{method:`PATCH`,body:JSON.stringify({name:pe,description:he,startPage:_e})}).then(async()=>{be(!1),await i()}).catch(e=>R(e.message))},children:[(0,U.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,U.jsxs)(`label`,{className:`canvas-hub-publication__name-field`,children:[(0,U.jsx)(`span`,{className:`visually-hidden`,children:`Name`}),(0,U.jsx)(`input`,{required:!0,maxLength:255,value:pe,onChange:e=>K(e.target.value)})]}),(0,U.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),Vt,(0,U.jsxs)(`label`,{className:`canvas-hub-publication__description-field`,children:[(0,U.jsx)(`span`,{className:`visually-hidden`,children:`Description`}),(0,U.jsx)(`textarea`,{value:he,placeholder:`Add a description`,onChange:e=>ge(e.target.value)})]}),(0,U.jsxs)(`label`,{className:`canvas-hub-publication__start-page-field`,children:[G.startPage,(0,U.jsx)(`input`,{value:_e,placeholder:`/`,"aria-describedby":`canvas-start-page-hint`,onChange:e=>ve(e.target.value)})]}),(0,U.jsx)(`p`,{id:`canvas-start-page-hint`,className:`canvas-hub-publication__hint`,children:G.startPageHint}),(0,U.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,U.jsx)(H.Button,{type:`submit`,size:`small`,children:`Save metadata`}),(0,U.jsx)(H.Button,{type:`button`,size:`small`,variant:`subtle`,onClick:()=>be(!1),children:`Cancel`})]})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-large`,children:Q.name||r?.branch}),(0,U.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),Vt,Q.description?(0,U.jsx)(`p`,{className:`canvas-hub-publication__description`,children:Q.description}):null,(0,U.jsxs)(`p`,{className:`canvas-hub-publication__description canvas-hub-publication__start-page`,children:[G.startPage,`: `,(0,U.jsx)(`code`,{children:Q.startPage||`/`})]}),mt?(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:()=>{K(Q.name||``),ge(Q.description||``),ve(Q.startPage||``),q(qe),be(!0)},children:G.editDetails}):null]})}),(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-build-title`,children:[(0,U.jsx)(H.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-build-title`,children:G.latestBuild}),Q.build?(0,U.jsxs)(`div`,{className:`canvas-hub-build`,children:[(0,U.jsxs)(`div`,{className:`canvas-hub-build__identity`,children:[(0,U.jsx)(`a`,{href:Q.build.url,target:`_blank`,rel:`noopener noreferrer`,children:G.buildTitle(Q.build.number)}),(0,U.jsx)(`code`,{title:Q.build.commitSha,"aria-label":`${G.buildCommit} ${Q.build.commitSha}`,children:Q.build.commitSha.slice(0,7)})]}),(0,U.jsx)(`p`,{children:ft?(0,U.jsx)(`a`,{className:`canvas-hub-build__author`,href:ft,target:`_blank`,rel:`noopener noreferrer`,children:pt}):(0,U.jsx)(`span`,{children:pt})}),r?.commitSha&&r.commitSha!==Q.build.commitSha?(0,U.jsx)(`p`,{className:`canvas-hub-build__notice`,children:`Local checkout differs from this Build`}):null]}):(0,U.jsxs)(`p`,{children:[`No successful imported Build yet. Current Build: `,Q.buildState||`none`,`.`]}),Q.build&&r?.hubOrigin?(0,U.jsx)(`a`,{className:`canvas-hub-build__history`,href:new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}/builds`,r.hubOrigin).href,target:`_blank`,rel:`noopener noreferrer`,children:G.showBuildHistory}):null]})]}):null,ut?null:(0,U.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-origin-title`,children:[Ht,r?.hubOrigin&&[`connected`,`undiscovered`,`pairing`,`denied`,`unavailable`].includes(r.state)?(0,U.jsx)(`div`,{className:`canvas-hub-disconnect`,children:(0,U.jsx)(H.Button,{size:`small`,variant:`subtle`,onClick:()=>{te(``),$(`/api/hub/disconnect`,e.token,{method:`POST`,body:`{}`}).then(async()=>{le(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),se(!0),await i(),s?.()}).catch(e=>{te(G.disconnectFailed(r.hubOrigin||``,e.message)),le(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),se(!0)})},children:`Disconnect Hub`})}):null]}),Q?.registered&&Q.build&&h?(0,U.jsx)(Fn,{preference:h,disabled:d}):null]}),Q?(0,U.jsx)(_t,{frame:{open:T,className:`canvas-comments-sidebar-shell`,contentClassName:`canvas-comments-sidebar-content`},threads:xt,currentBuildNumber:gt?.number||0,buildLinkOrigin:r?.hubOrigin,totalCount:xt.length,hasThreads:rt.length>0,filters:D,participants:ot,resolutions:st,selectedThreadId:P,selectionBlocked:Et,closeBlocked:Se,showPins:k,loading:ne,loadFailed:ie,notice:Fe||gt&&!Tt?(0,U.jsxs)(`div`,{className:`canvas-comments-live-notices`,children:[Fe?(0,U.jsx)(`p`,{className:`canvas-comments-live-status`,role:`status`,children:`Live updates paused; checking every 30 seconds.`}):null,gt&&!Tt?(0,U.jsxs)(`p`,{className:`canvas-comments-live-status`,children:[`New comments are available when the local checkout matches Build #`,gt.number,`.`]}):null]}):null,copy:bt,onClose:zt,onFiltersChange:O,onShowPinsChange:A,onRetry:()=>void Mt(),onSelect:e=>F(e.root.id)}):null,(0,U.jsx)(Nn,{selectionNotice:Ne?Ne===`area-too-small`?bt.areaTooSmallLabel:Ne===`area-unavailable`?bt.areaUnavailableLabel:bt.selectionFailedLabel:null,rateLimitNotice:z&&!Dt?z:null,composer:X&&kt?{anchorPoint:kt,bodyMaximumBytes:1e4,copy:bt,creating:Le?.kind===`create`,onSubmit:Rt,onDiscard:It}:null,conversation:Z?{thread:Z,anchorPoint:we.get(Z.root.id)??null,bodyMaximumBytes:1e4,mutation:Le,copy:bt,onClose:()=>F(null),onDraftStateChange:Ce,onReply:e=>Lt(`${Z.root.id}/replies`,`POST`,{review_comment:{body:e}},{kind:`reply`,commentId:Z.root.id}),onEdit:(e,t)=>Lt(`${e}`,`PATCH`,{review_comment:{body:t}},{kind:`edit`,commentId:e}),onDelete:e=>Lt(`${e}`,`DELETE`,void 0,{kind:`delete`,commentId:e}),onResolve:()=>Lt(`${Z.root.id}/resolution`,`POST`,void 0,{kind:`resolve`,commentId:Z.root.id}),onReopen:()=>Lt(`${Z.root.id}/resolution`,`DELETE`,void 0,{kind:`reopen`,commentId:Z.root.id}),onAddReaction:(e,t)=>Lt(`${e}/reactions`,`POST`,{review_comment_reaction:{content:t,activity_version:Z.root.activityVersion}},{kind:`add-reaction`,commentId:e,content:t}),onRemoveReaction:(e,t)=>Lt(`${e}/reactions/${encodeURIComponent(t)}`,`DELETE`,{review_comment_reaction:{activity_version:Z.root.activityVersion}},{kind:`remove-reaction`,commentId:e,content:t}),onMarkRead:e=>Lt(`${Z.root.id}/read`,`POST`,{review_thread_read:{activity_version:e}}),onMarkUnread:()=>Lt(`${Z.root.id}/read`,`DELETE`,void 0,{kind:`mark-unread`,commentId:Z.root.id})}:null})]})}function zn(e,t,n){function r(e,t,n){return{kind:e,title:t,detail:n}}if(!e||!t)return n.kind===`unknown`?r(`retry`,J.unavailable,n.detail):r(`checking`,J.checking,J.checkingDetail);if(!e.stats.branch)return r(`restricted`,J.restricted,n.detail);if(t.repository&&t.repository!==e.stats.repository||t.branch&&t.branch!==e.stats.branch)return r(`retry`,J.unavailable,J.changedDetail);if(t.discovery?.state===`local`||e.stats.repository?.startsWith(`local/`))return r(`restricted`,J.restricted,J.local);if(t.registrationReason===`branch_not_reviewable`||e.stats.branch===t.discovery?.defaultBranch)return r(`restricted`,J.restricted,Y.registrationReasons.get(`branch_not_reviewable`).description);if([`disconnected`,`pairing`,`unconfigured`].includes(t.state))return r(`connect`,J.connect,J.connectDetail);if([`denied`,`unavailable`].includes(t.state))return r(`retry`,J.unavailable,t.message||J.unavailableDetail);if(t.repository!==e.stats.repository||t.branch!==e.stats.branch)return r(`retry`,J.unavailable,J.unavailableDetail);let i=t.prototype;if(t.state===`connected`&&i?.branch===e.stats.branch&&i.registered&&i.published&&i.build&&Number.isSafeInteger(i.build.number)&&i.build.number>0)return r(`ready`,J.ready,J.readyDetail);if(t.state===`connected`&&(!i||i.branch!==e.stats.branch||typeof i.published!=`boolean`||i.published))return r(`retry`,J.unavailable,J.unavailableDetail);let a=t.state===`connected`?i?.canEdit:t.canPublish;if(a===!1)return r(`restricted`,J.restricted,J.publishDenied);let o=e.stats.remoteBranch,s=t.state===`undiscovered`&&t.repositoryAuthorized===!0&&!i&&(!t.commitSha||t.commitSha===e.stats.commitSha)&&o?.repository===e.stats.repository&&o?.branch===e.stats.branch&&o?.commitSha===e.stats.commitSha&&(o?.state===`absent`||o?.state===`present`&&e.publishRequest?.commitSha===e.stats.commitSha&&([`requested`,`in_progress`].includes(e.publishRequest?.state??``)||e.publishRequest?.state===`idle`&&e.publishRequest.remoteState===`absent`))&&![`loading`,`unknown`,`detached`,`workflow_missing`].includes(n.kind),c=a===void 0&&s;if(a!==!0&&!c)return r(`retry`,J.unavailable,J.permissionUnknown);let l=t.registrationReason||i?.registrationReason;if(n.error&&(l!==`remote_branch_missing`||!s)){let e=[`successful_build_required`,`already_registered`].includes(l||``),t=[`write_access_required`,`repository_mismatch`,`branch_not_reviewable`,`remote_branch_missing`,`branch_authorship_required`].includes(l||``);return{...r(e?`progress`:t?`restricted`:`retry`,n.error.title,n.error.description),...e?{publication:{...n,action:`retry`,label:Y.retry}}:{}}}if(n.kind===`detached`)return r(`restricted`,J.restricted,n.detail);if(n.action===`retry`)return r(`retry`,J.unavailable,n.detail);if(n.kind===`loading`)return r(`checking`,J.checking,n.detail);let u=c?`${J.publishDetail} ${J.publishPermissionUnverified}`:J.publishDetail,d=s&&l===`remote_branch_missing`?{...n,error:void 0}:n;return n.action===`publish`?{...r(`publish`,J.publish,u),publication:d}:{...r(`progress`,J.preparing,u),publication:d}}function Bn({open:e,onToggle:t,buttonRef:n}){return(0,U.jsx)(W,{icon:ne,"aria-label":G.controls,description:G.controls,ref:n,size:`small`,variant:`default`,className:`canvas-controls-toggle`,"aria-expanded":e,onClick:t})}function Vn({toolbarRef:e,config:t,onPublish:n,publishButtonRef:r,hubButtonRef:i,titleButtonRef:a,onBuildDetails:o,publishing:s,state:c,prototypeName:l,hubOpen:u,onHub:d,publication:f,onControls:p,controlsOpen:m,controlsButtonRef:h,onShare:g,shareButtonRef:_}){let y=c?.publishStatus??{state:`unavailable`,detail:G.statusUnavailable},b=l?.trim()||c?.stats.branch||c?.name||t.name,x=c?[b,c.stats.repository,c.stats.commitSha?.slice(0,7),c.stats.workingTree===`changed`?G.workingTreeChanged:G.workingTreeClean,c.stats.urlHost].filter(Boolean).join(` · `):b,S=s||(f?f.action===`none`:y.state===`requested`||y.state===`in_progress`||y.state===`published`),C=s||(f?f.kind===`requested`||f.kind===`queued`||f.kind===`building`||f.kind===`importing`||f.kind===`awaiting_build`||f.kind===`registration`:y.state===`requested`||y.state===`in_progress`),w=!C&&(f?f.kind===`ready`:y.state===`published`),T=(0,U.jsx)(H.Button,{type:`button`,ref:r,className:`canvas-publish-button`,variant:`secondary`,size:`small`,leadingVisual:C?(0,U.jsx)(L,{size:16}):Hn(y.state),disabled:S&&!w,"aria-busy":C,title:w?void 0:f?.detail||y.detail,onClick:S||w?void 0:n,children:f?.label||G.publishLabels[y.state]});return(0,U.jsxs)(`header`,{ref:e,className:`canvas-toolbar`,children:[(0,U.jsx)(H.Button,{type:`button`,className:`canvas-title`,ref:a,variant:`subtle`,size:`small`,title:x,disabled:!c,onClick:o,children:b}),(0,U.jsx)(`div`,{id:`canvas-review-controls`,className:`canvas-review-controls-slot`}),t.pickAndPolish||t.improvementNotesDemo?(0,U.jsx)(`div`,{id:`canvas-improvement-controls`}):null,p?(0,U.jsx)(Bn,{buttonRef:h,open:m,onToggle:p}):null,d?(0,U.jsx)(H.Button,{type:`button`,ref:i,size:`small`,variant:`secondary`,className:`canvas-toolbar-compact-button`,leadingVisual:(0,U.jsx)(ie,{size:16}),"aria-label":G.editDetails,title:G.editDetails,"aria-expanded":u,onClick:d,children:(0,U.jsx)(`span`,{className:`canvas-toolbar-button-label`,children:G.editDetails})}):null,(0,U.jsxs)(`div`,{className:`canvas-publish-share`,role:`group`,"aria-label":q.group,children:[w?(0,U.jsx)(H.Tooltip,{ref:r,text:Y.alreadyPublished,type:`description`,children:T}):T,g?(0,U.jsx)(W,{ref:_,icon:v,size:`small`,"aria-label":q.title,description:q.title,onClick:g}):null]})]})}function Hn(e){return e===`published`?(0,U.jsx)(oe,{size:16}):e===`failed`||e===`in_progress`||e===`requested`?(0,U.jsx)(L,{size:16}):(0,U.jsx)(D,{size:16})}function Un(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>Ye(e,t)))}}var Wn={bridgeUnavailable:`The prototype bridge is not ready on this page.`,routeChanged:`The prototype route changed. Inspect the live canvas again.`,reloaded:`The prototype reloaded before confirming the click. Inspect the live canvas and retry.`,unconfirmed:`The prototype did not confirm the click. Check its bridge and retry.`,clickFailed:`The target could not be clicked.`,addressUnavailable:`The canvas address field is unavailable.`,unknownAction:`Unknown canvas action.`,replyRejected:`The live canvas rejected the action reply. Check its transport diagnostics.`,actionInterrupted:`The canvas changed before the action could run. Inspect the live canvas and retry.`,statusInterrupted:`The canvas changed while collecting Controls status. Inspect the live canvas and retry.`};function Gn(e){let{token:t,prototypeUrl:n,previewUrl:r,cancelClick:i}=e,a=(0,V.useRef)(e),o=(0,V.useRef)(null);(0,V.useLayoutEffect)(()=>{a.current=e}),(0,V.useEffect)(()=>{o.current??=crypto.randomUUID();let e={"X-Replica-Renderer-Id":o.current},s=!1,c=!1,l=new AbortController,u=new URL(r??n).origin;async function d(e){let t=a.current.frameRef.current,n=a.current.liveRoute;if(!t?.contentWindow||!n)throw Error(Wn.bridgeUnavailable);if(e.route.pathname!==n.pathname||e.route.search!==n.search||e.route.hash!==n.hash)throw Error(Wn.routeChanged);let r=crypto.randomUUID();return await new Promise((n,a)=>{function o(){window.clearTimeout(c),window.removeEventListener(`message`,l),i.current===s&&(i.current=null)}function s(){o(),a(Error(Wn.reloaded))}let c=window.setTimeout(()=>{o(),a(Error(Wn.unconfirmed))},2e3);function l(i){let s=i.data;i.source===t?.contentWindow&&i.origin===u&&s&&typeof s==`object`&&`type`in s&&s.type===`replica:canvas:click-result`&&`nonce`in s&&s.nonce===r&&(o(),`clicked`in s&&s.clicked===!0?n({clicked:!0,route:e.route}):a(Error(Wn.clickFailed)))}i.current=s,window.addEventListener(`message`,l),t.contentWindow.postMessage({type:`replica:canvas:click`,nonce:r,...e},u)})}async function f(e){let t=a.current.frameRef.current,r=crypto.randomUUID(),i=Date.now()+e,o=await new Promise((n,o)=>{function s(){window.clearTimeout(d),window.removeEventListener(`message`,p),t?.removeEventListener(`load`,m),l.signal.removeEventListener(`abort`,c)}function c(){s(),o(Error(Wn.statusInterrupted))}let d=window.setTimeout(()=>{if(s(),a.current.liveRoute)o(Error(Wn.bridgeUnavailable));else{let e=new URL(a.current.navigation.entries[a.current.navigation.index]);e.protocol=new URL(u).protocol,e.host=new URL(u).host,n({status:`pending`,url:e.href,error:``,controls:[]})}},e+1500),f=!1;function p(e){let i=e.data;e.source===t?.contentWindow&&t===a.current.frameRef.current&&e.origin===u&&i&&typeof i==`object`&&`type`in i&&(i.type===`replica:canvas:ready`&&!f&&(f=!0,m()),i.type===`replica:controls:status-result`&&`nonce`in i&&i.nonce===r&&`value`in i&&(s(),n(i.value)))}function m(){t===a.current.frameRef.current&&t?.contentWindow?.postMessage({type:`replica:controls:status`,nonce:r,timeoutMs:Math.max(0,i-Date.now())},u)}window.addEventListener(`message`,p),t?.addEventListener(`load`,m),l.signal.addEventListener(`abort`,c),m()});if(!o||typeof o!=`object`||!(`url`in o)||typeof o.url!=`string`||!(`status`in o)||typeof o.status!=`string`||!(`error`in o)||typeof o.error!=`string`||!(`controls`in o)||!Array.isArray(o.controls))throw Error(Wn.bridgeUnavailable);let s=new URL(o.url);if(s.origin!==u)throw Error(Wn.routeChanged);let c=new URL(n);s.protocol=c.protocol,s.host=c.host;let d=await p(i);return!d&&a.current.controlsConnection===void 0?{...o,url:s.href}:{...d?Un(d,d.loading,s.href):{status:`pending`,url:s.href,error:``,controls:[]},runtime:{status:o.status,error:o.error,controls:o.controls}}}function p(e){let t=a.current.controlsConnection;if(!t)return Promise.resolve(null);let n=t.getSnapshot,r=t.subscribe,i=n();return!i.loading||e<=Date.now()?Promise.resolve(i):new Promise(t=>{let i={};function a(e){window.clearTimeout(c),i.unsubscribe?.(),l.signal.removeEventListener(`abort`,s),t(e)}function o(){let e=n();e.loading||a(e)}function s(){a(null)}let c=window.setTimeout(()=>a(n()),e-Date.now());i.unsubscribe=r(o),l.signal.addEventListener(`abort`,s,{once:!0}),o()})}async function m(){if(!(s||c)){s=!0;try{let{command:r,prototypeUrl:i}=await $(`/api/agent/next`,t,{headers:{...e,"X-Replica-Prototype-Url":n}});if(!c&&i&&i!==n){window.location.reload();return}if(!r)return;let o;try{if(await $(`/api/agent/progress`,t,{method:`POST`,headers:e,body:JSON.stringify({id:r.id,stage:`handler started`})}),c)throw Error(Wn.actionInterrupted);let n;if(r.type===`inspect`){let{appearance:e,navigation:t,liveRoute:r,addressRef:i}=a.current,o=i.current?.value;if(o===void 0)throw Error(Wn.addressUnavailable);n={address:t.entries[t.index],addressDraft:o,appearance:e,canGoBack:t.index>0,canGoForward:t.indexvoid m(),300);return()=>{c=!0,l.abort(),window.clearInterval(h),i.current?.()}},[n,r,t,i])}function Kn(e,t,n){let r=t?.repository===e?.stats.repository&&t?.branch===e?.stats.branch,i=!e?.stats.branch&&!!e?.stats.branchError,a=i?void 0:t?.branch,o=!!(e&&!i&&(t?.repository&&t.repository!==e.stats.repository||t?.branch&&t.branch!==e.stats.branch||t?.commitSha&&t.commitSha!==e.stats.commitSha)),s=!!(n.kind===`ready`&&r&&t?.state===`connected`&&t.prototype?.published&&t.prototype.build?.commitSha===e?.stats.commitSha);return{state:e&&{...e,publishStatus:!s&&[`requested`,`in_progress`].includes(e.publishStatus?.state??``)||t?.state===`connected`&&!r?e.publishStatus:s&&t?.prototype?.build?{state:`published`,detail:G.hubBuildImported,versionCount:t.prototype.versionCount,lastUpdatedAt:t.prototype.build.publishedAt,run:{url:t.prototype.build.url,actor:t.prototype.build.author.login||t.prototype.build.author.name?{login:t.prototype.build.author.login||void 0,name:t.prototype.build.author.name||void 0,avatarUrl:t.prototype.build.author.avatarUrl||void 0}:null}}:{state:t?.state===`connected`?`not_published`:`unavailable`,detail:t?.state===`connected`?G.hubBuildMissing:G.hubPublicationUnavailable},stats:{...e.stats,branch:a||e.stats.branch,branchError:a&&a!==e.stats.branch?null:e.stats.branchError,repository:t?.repository||e.stats.repository,commitSha:e.stats.commitSha,comparison:o?{branch:null,source:null,behind:null,error:G.comparisonNeedsRefresh}:e.stats.comparison,publishedUrl:s?t?.prototype?.build?.url:void 0}},hubPublished:s,comparisonOutdated:o}}function qn(e,t){let n;function r(e,t,r,i=`none`){return{kind:e,detail:t,label:r,action:i,...n?{error:n}:{}}}if(!e)return r(`loading`,Y.initial,Y.checking);let{stats:i}=e,a=i.remoteBranch;if(!a||a.state===`loading`)return r(`loading`,Y.checkingRemote,Y.checking);if(!i.branch||a.state===`detached`)return r(`detached`,Y.detached,Y.retry,`retry`);if(a.repository!==i.repository||a.branch!==i.branch||a.commitSha!==i.commitSha)return r(`unknown`,Y.changed,Y.retry,`retry`);if(a.state===`unknown`)return r(`unknown`,Y.unknown(a.error),Y.retry,`retry`);let o=t?.state===`connected`?t.prototype:void 0,s=o?.build?.commitSha===i.commitSha&&o?.branch===i.branch,c=e.publishRequest,l=t?.state===`connected`&&t.repository===i.repository&&t.branch===i.branch&&(!t.commitSha||t.commitSha===i.commitSha)&&t.prototype?.branch===i.branch&&t.prototype.build?.commitSha===i.commitSha?t.prototype.build:null,u=!!(l&&(c?.commitSha!==i.commitSha||c.buildNumber===void 0||typeof c.buildNumber==`number`&&l.number>c.buildNumber)),d=u&&o?.registered&&o.published,f=t!==null&&t.repository===i.repository&&(!t.branch||t.branch===i.branch)&&(!t.commitSha||t.commitSha===i.commitSha);if(t&&f&&(t.state===`connected`||t.state===`undiscovered`)&&!o?.registered&&(!o||o.branch===i.branch)){let e=t.registrationReason||o?.registrationReason,r=i.branch===t.discovery?.defaultBranch;if(e||t.registrationError||o?.canRegister===!1||r){let i=e||(r?`branch_not_reviewable`:o?.canEdit===!1?`write_access_required`:o?.canRegister===!1&&a.state===`absent`?`remote_branch_missing`:void 0);n=i&&Y.registrationReasons.get(i)||{title:Y.registrationErrorTitle,description:t.registrationError||Y.registrationDenied}}}if(c?.state===`requested`&&(!c.commitSha||c.commitSha===i.commitSha)&&(a.state===`absent`||a.remoteSha!==i.commitSha)&&!u){let e=Date.now()-Date.parse(c.requestedAt||``);if(Number.isFinite(e)&&e<6e5)return r(`requested`,Y.pending,Y.awaitingCopilot)}if(!t)return r(`loading`,Y.checkingHub,Y.checking);if(t.state===`disconnected`||t.state===`pairing`||t.state===`unconfigured`)return r(`disconnected`,t.message||Y.disconnected,Y.connect);if(t.state===`denied`||t.state===`unavailable`)return{...r(`unknown`,t.message||Y.hubUnavailable,Y.retry,`retry`),error:{title:Y.hubUnavailableTitle,description:t.message||Y.hubUnavailable}};if(!f)return r(`unknown`,Y.staleHub,Y.retry,`retry`);if(!i.replicaWorkflowExists)return r(`workflow_missing`,Y.workflowMissing,Y.retry,`retry`);if(c?.state===`failed`&&!d&&(!c.commitSha||c.commitSha===i.commitSha))return r(`failed`,c.error||Y.dispatchFailed,Y.retryPublish,`publish`);if(a.state===`absent`)return r(`unpublished`,Y.absent,Y.publishBranch,`publish`);if(a.remoteSha!==i.commitSha)return r(`needs_push`,Y.needsPush,Y.publishChanges,`publish`);if(s){if(!o.registered)return r(`registration`,t.registrationError||(o.canEdit&&o.canRegister?Y.needsRegistration:Y.registrationDenied),t.registrationError?Y.registrationFailed:Y.registration);if(o.published&&u)return r(`ready`,Y.ready,Y.published)}if(o?.currentBuild?.commitSha===i.commitSha&&o.branch===i.branch&&o.currentBuild.state===`failed`)return r(`failed`,Y.importFailed,Y.retryPublish,`publish`);let p=i.workflow;if(!p||p.state===`unavailable`)return r(`unknown`,p?.detail||Y.workflowUnavailable,Y.retry,`retry`);let m=p.run;if(m&&(m.headSha!==i.commitSha||m.headBranch!==i.branch))return r(`unknown`,Y.staleWorkflow,Y.retry,`retry`);if(c?.commitSha===i.commitSha&&c.workflowRunId!=null&&m?.databaseId===c.workflowRunId&&!u)return r(`awaiting_build`,Y.noBuild,Y.awaitingBuild);let h;if(p.state===`in_progress`&&m){let e=[`queued`,`waiting`,`pending`,`requested`].includes(m.status||``);h=r(e?`queued`:`building`,e?Y.workflowQueued:Y.workflowBuilding,e?Y.queued:Y.building)}else h=p.state===`failed`&&m?r(`failed`,Y.workflowFailed(m.conclusion),Y.retryPublish,`publish`):p.state===`succeeded`&&m?r(`importing`,Y.importing,Y.awaitingHub):r(`awaiting_build`,Y.noBuild,Y.awaitingBuild);return m?.url?.startsWith(`https://github.com/`)&&(h.runUrl=m.url),h}function Jn({token:e,state:t,hubStatus:n,error:r,setError:i,refresh:a,refreshHub:o,preferenceSaving:s=!1}){let[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(null),m=(0,V.useRef)(!1),[h,g]=(0,V.useState)(null),[_,v]=(0,V.useState)(``),[y,b]=(0,V.useState)(!1),x=!t&&r?{kind:`unknown`,action:`retry`,label:Y.retry,detail:r}:qn(t,n),S=`${t?.stats.repository}/${t?.stats.branch}/${t?.stats.commitSha}`,C=f?.identity===S&&x.action===`publish`?{...x,kind:`failed`,detail:f.message,label:Y.retryPublish}:x.kind===`ready`&&t?.stats.workingTree===`changed`?{...x,kind:`needs_push`,action:`publish`,label:Y.publishChanges,detail:Y.localChanges}:x,w=Kn(t,n,x);(0,V.useEffect)(()=>{w.comparisonOutdated&&a(!0)},[w.comparisonOutdated,n?.branch,n?.commitSha,n?.repository,a]);async function T(){if(!y){b(!0);try{await Promise.all([a(!0),o()])}finally{b(!1)}}}async function E(){s||(C.action===`retry`?await T():C.action===`none`||m.current||h||await D())}async function D(){if(!(s||m.current)){m.current=!0,d(!0),i(``),v(``);try{let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});t.workingTree===`unavailable`||t.workingTree===`changed`&&!t.remember?g({preparation:t}):(g(null),await O(t,t.workingTree===`changed`?`commit-changes`:`committed-only`))}catch(e){let t=e instanceof Error?e.message:String(e);i(t),v(t)}finally{m.current=!1,d(!1)}}}async function O(r,s,c){if(s===`committed-only`&&n?.state===`connected`&&n.repository===r.target.repository&&n.branch===r.target.branch&&n.prototype?.registered&&n.prototype.published&&n.prototype.build?.commitSha===r.target.commitSha&&t?.stats.remoteBranch?.state===`present`&&t.stats.remoteBranch.remoteSha===r.target.commitSha)g(null);else{p(null),v(``),i(``);try{let t=await $(`/api/publish`,e,{method:`POST`,body:JSON.stringify({target:r.target,workingTree:r.workingTree,mode:s,remember:c})});g(null),l(t.message),await o(),await a(!1)}catch(e){let t=e instanceof Error?e.message:String(e);p({message:t,identity:S}),i(t),v(t)}}}async function k(e,t){if(!(s||!h||m.current)){if(h.preparation.workingTree===`unavailable`&&e!==`committed-only`)v(K.checkFailed);else{m.current=!0,d(!0);try{await O(h.preparation,e,t)}finally{m.current=!1,d(!1)}}}}return{publication:C,presentedState:w.state,busy:u||y||s,notice:c,publishDialog:h,publishDialogError:_,closePublishDialog:()=>g(null),choosePublish:k,retryPublishCheck:D,publish:E,retry:T}}var Yn=`replica:controls`;function Xn(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&Ce(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||Ce({[r.id]:r.value}))}catch{return!1}}function Zn(e){return Array.isArray(e)&&e.length<=100&&e.every(e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&`scope`in e&&typeof e.scope==`string`&&e.scope.length>0&&e.scope.length<=64&&`error`in e&&typeof e.error==`string`&&e.error.length>0&&e.error.length<=500)}function Qn(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.runtimeAvailable!=`boolean`||t.reconnectRequired!==void 0&&typeof t.reconnectRequired!=`boolean`||t.status===`ready`&&(!t.runtimeAvailable||!t.scopes?.length)||t.error!==void 0&&(typeof t.error!=`string`||t.error.length>1e3)||t.scopeErrors!==void 0&&!Zn(t.scopeErrors)||![`ready`,`no-controls`,`missing-runtime`,`unsupported-runtime`,`invalid-config`].includes(t.status)||!Array.isArray(t.scopes)||t.scopes.length>100||t.status!==`ready`&&t.scopes.length>0)return!1;try{let e=new Set;for(let n of t.scopes){if(We(n.declaration),e.has(n.declaration.scope)||(e.add(n.declaration.scope),n.fingerprint!==JSON.stringify(n.declaration)||!Number.isSafeInteger(n.snapshot.revision)||n.snapshot.revision<0))return!1;let t=n.snapshot;if(!t.values||!t.visible||!t.groups||!t.actions)return!1;function r(e,t){return typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}if(!r(t.values,n.declaration.controls.filter(e=>e.type!==`button`).map(e=>e.id))||!r(t.visible,n.declaration.controls.map(e=>e.id))||!r(t.groups,(n.declaration.groups??[]).map(e=>e.id))||!r(t.actions,n.declaration.controls.filter(e=>e.type===`button`).map(e=>e.id))||Object.values(t.groups).some(e=>typeof e!=`boolean`))return!1;if(t.bindings!==void 0){if(!t.bindings||typeof t.bindings!=`object`||Array.isArray(t.bindings))return!1;for(let[e,r]of Object.entries(t.bindings))if(!n.declaration.controls.some(t=>t.id===e)||!r||typeof r.error!=`string`||r.error.length>500||typeof r.busy!=`boolean`||r.available!==void 0&&typeof r.available!=`boolean`)return!1}for(let e of n.declaration.controls){if(typeof t.visible[e.id]!=`boolean`)return!1;if(e.type===`button`){let n=t.actions[e.id];if(!n||typeof n.available!=`boolean`||typeof n.busy!=`boolean`)return!1}else if(Be(e,t.values[e.id]))return!1}}return!0}catch{return!1}}function $n(){return{runtimeAvailable:!1,status:`missing-runtime`,scopes:[],scopeErrors:[],loading:!0,notice:``,error:``,storageError:``,resetting:!1}}var er=class{frame;origin;api;surface;epoch=``;sequence=-1;state=$n();listeners=new Set;pending=new Map;saved;storageReady=!1;restored=new Set;preparing=new Set;persisted=new Map;cachedScopes=new Map;retryState;resetForIdentity=!1;fromFrameUrl=!1;requests=new AbortController;poll;deadline;saveQueue=Promise.resolve();editQueue=Promise.resolve();stopped=!0;constructor(e,t,n,r=`canvas`){this.frame=e,this.origin=t,this.api=n,this.surface=r}getSnapshot=()=>this.state;getControlValues=()=>{let e=structuredClone(this.saved?.scopes??{}),t=new Map(this.cachedScopes);for(let e of this.state.scopes)t.set(e.declaration.scope,e);for(let[n,r]of t)e[n]=Ze(r);return e};subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});publish(e){this.state={...this.state,...e},this.state.hasResettableValues=Object.values(this.getControlValues()).some(e=>Object.keys(e).length>0);for(let e of[...this.listeners])e()}hasBindingError(e,t){return this.state.scopes.some(n=>(!e||n.declaration.scope===e)&&Object.entries(n.snapshot.bindings??{}).some(([e,n])=>(!t||e===t)&&!!n.error))}checkSaved(e){let t=e,n=/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;if(!t||typeof t!=`object`||typeof t.identity!=`string`||!t.identity||t.identity.length>128||!t.scopes||typeof t.scopes!=`object`||Array.isArray(t.scopes)||t.storageError!==void 0&&(typeof t.storageError!=`string`||t.storageError.length>1e3)||t.notice!==void 0&&(typeof t.notice!=`string`||t.notice.length>1e3)||new Blob([JSON.stringify(t)]).size>27e4)throw Error(`Invalid controls storage response.`);for(let[e,r]of Object.entries(t.scopes)){if(!n.test(e)||!r||typeof r!=`object`||Array.isArray(r))throw Error(`Invalid controls storage scope.`);for(let[e,t]of Object.entries(r))if(!n.test(e)||!(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))throw Error(`Invalid saved control value.`)}}start=e=>{this.fromFrameUrl=e?.type===`load`&&this.sequence>=0;let t=[...this.pending.values()].some(e=>e.action);this.stop(),this.requests=new AbortController,this.stopped=!1,this.epoch=crypto.randomUUID(),this.sequence=-1,this.saved=void 0,this.storageReady=!1,this.restored.clear(),this.preparing.clear(),this.persisted.clear(),this.editQueue=Promise.resolve(),this.cachedScopes.clear(),this.retryState=void 0,this.resetForIdentity=!1,this.state=$n(),t&&(this.state.notice=`The preview reconnected during an action. Its outcome is unknown; it was not replayed.`),this.publish({});let n=this.epoch;window.addEventListener(`message`,this.receive),this.frame.addEventListener(`load`,this.start);let r=()=>{this.storageReady&&(this.surface===`canvas`&&this.frame.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:n},this.origin),this.send(`hello`).catch(()=>{}))};r(),this.poll=setInterval(()=>{this.state.status===`missing-runtime`&&r()},1e3),this.deadline=setTimeout(()=>{this.state.loading&&this.publish({loading:!1,error:this.surface===`build`?`Build Controls did not connect. Reload the preview or check its definitions.`:G.controlsLocalConnectionFailed})},6e3),this.api().then(e=>{if(!(this.epoch!==n||this.stopped)){if(this.checkSaved(e),this.saved=e,this.retryState?.identity===e.identity)for(let[e,t]of this.retryState.scopes)this.restored.add(`${e}:${t.fingerprint}`),this.cachedScopes.set(e,t);else this.retryState?.identity&&(this.resetForIdentity=!0,this.publish({notice:`The checkout identity changed. Controls will use this branch's saved values or defaults.`}));this.retryState=void 0,this.storageReady=!0,this.publish({storageError:e.storageError||``,notice:e.notice||this.state.notice}),this.prepare(this.state),r()}}).catch(e=>{this.epoch!==n||this.stopped||(this.storageReady=!0,this.publish({storageError:this.surface===`build`?e instanceof Error?e.message:`Control settings could not be read from the URL.`:G.controlsLocalStorageFailed}),this.prepare(this.state),r())})};retry=()=>{let e={identity:this.saved?.identity,scopes:new Map(this.cachedScopes)};this.start(),this.retryState=e};stop=()=>{this.stopped=!0,this.requests.abort(),clearInterval(this.poll),clearTimeout(this.deadline),window.removeEventListener(`message`,this.receive),this.frame.removeEventListener(`load`,this.start);for(let e of this.pending.values())clearTimeout(e.timer),e.reject(Error(`The preview navigated. The command outcome is unknown; it will not be replayed.`));this.pending.clear()};receive=e=>{if(this.stopped||e.source!==this.frame.contentWindow||e.origin!==this.origin||!Xn(e.data))return;let t=e.data;if(t.epoch!==this.epoch||!Qn(t.state)||!Number.isSafeInteger(t.sequence)||(t.sequence??-1)<0||t.type!==`snapshot`&&t.type!==`reply`)return;let n=this.pending.get(t.requestId);if(t.type!==`reply`||n){if((t.sequence??-1)>this.sequence){if(t.type===`snapshot`&&t.controlQuery!==void 0&&this.saved){let e=De(t.controlQuery),n=this.saved.identity,r=this.epoch;this.stop();let i=new AbortController;this.requests=i,this.publish({loading:!0}),this.api({method:`POST`,signal:i.signal,body:JSON.stringify({identity:n,replace:!0,scopes:e.scopes})}).then(()=>{this.epoch!==r||i.signal.aborted||(this.start(),e.notice&&this.publish({notice:e.notice}))}).catch(e=>{this.epoch!==r||i.signal.aborted||this.publish({loading:!1,storageError:e instanceof Error?e.message:`Controls history could not be restored.`})});return}if(t.controlQuery!==void 0&&this.saved){let e=this.epoch,n=this.requests,r=De(t.controlQuery);this.saved.scopes=r.scopes,this.restored.clear(),this.persisted.clear(),this.cachedScopes.clear(),this.publish({notice:r.notice,loading:!0}),this.api({method:`POST`,signal:n.signal,body:JSON.stringify({identity:this.saved.identity,replace:!0,scopes:r.scopes})}).catch(t=>{this.epoch!==e||this.stopped||n.signal.aborted||this.publish({storageError:t instanceof Error?t.message:`Controls history could not be restored.`})})}this.sequence=t.sequence;let e=t.state.status;this.publish({...t.state,scopeErrors:t.state.scopeErrors??[],reconnectRequired:t.state.reconnectRequired===!0,status:e,error:t.state.error||(this.state.status===`missing-runtime`&&t.state.status!==`missing-runtime`?``:this.state.error),loading:!this.storageReady||this.state.resetting||this.preparing.size>0||this.state.loading&&e===`missing-runtime`}),this.prepare(this.state)}n&&(this.pending.delete(t.requestId),clearTimeout(n.timer),t.error?n.reject(Error(t.error)):n.resolve(this.state))}};send(e,t){let n=crypto.randomUUID(),r={protocol:Yn,version:1,epoch:this.epoch,requestId:n,type:e,...t?{command:t}:{},...e===`hello`?{controlQuery:Ee(this.saved?.scopes??{}),fromFrameUrl:this.fromFrameUrl}:{}};return Xn(r)?new Promise((i,a)=>{let o=setTimeout(()=>{this.pending.delete(n),a(Error(`The command timed out. Its outcome is unknown; it will not be retried automatically.`))},e===`hello`?1200:3e4);this.pending.set(n,{resolve:i,reject:a,timer:o,action:t?.operation===`action`}),this.frame.contentWindow?.postMessage(r,this.origin)}):Promise.reject(Error(`The controls command is invalid or exceeds the size limit.`))}async prepare(e){if(!this.saved&&!this.state.storageError||this.state.resetting||e.reconnectRequired)return;let t=this.epoch;if(this.resetForIdentity&&(e.status===`ready`||e.status===`no-controls`)){this.resetForIdentity=!1,this.publish({loading:!0,resetting:!0});try{await this.send(`command`,{operation:`reset-all`,contexts:e.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch{this.epoch===t&&this.publish({error:`The checkout changed, but runtime defaults could not be restored. Reload the preview before saving.`,storageError:`Saving is paused until the new checkout's runtime reconnects.`,loading:!1});return}finally{this.epoch===t&&this.publish({resetting:!1})}return this.epoch!==t||this.stopped?void 0:this.prepare(this.state)}for(let n of e.scopes){let e=n.declaration.scope,r=`${e}:${n.fingerprint}`;if(!this.preparing.has(r)){if(!this.restored.has(r)){this.preparing.add(r),this.publish({loading:!0});try{let i=this.saved?.scopes&&Object.hasOwn(this.saved.scopes,e)?this.saved.scopes[e]:{},a=Object.fromEntries(n.declaration.controls.filter(e=>e.type!==`button`).map(e=>[e.id,structuredClone(e.default)])),o=!1;for(let[e,t]of Object.entries(i)){let r=n.declaration.controls.find(t=>t.id===e);!r||Be(r,t)?o=!0:a[e]=t}if(Object.keys(a).length&&await this.send(`command`,{operation:`restore`,scope:e,fingerprint:n.fingerprint,revision:this.state.scopes.find(e=>e.fingerprint===n.fingerprint)?.snapshot.revision,values:a}),this.stopped||this.epoch!==t)return;this.restored.add(r),o&&this.publish({notice:this.surface===`build`?`Some URL control settings no longer match this page. Defaults were used.`:`Some saved controls no longer match this declaration and were discarded.`})}catch(n){if(this.epoch!==t||this.stopped)return;this.hasBindingError(e)||this.publish({error:n instanceof Error?n.message:`Saved controls could not be restored.`}),this.restored.add(r)}finally{this.epoch===t&&this.preparing.delete(r)}}if(this.epoch===t&&!this.stopped){let t=this.state.scopes.find(t=>t.declaration.scope===e);t&&(this.cachedScopes.set(e,t),this.persist(t))}}}this.epoch===t&&!this.stopped&&this.state.status!==`missing-runtime`&&this.publish({loading:this.preparing.size>0})}persist(e){if(!this.saved||this.state.storageError)return;let t=Ze(e),n=JSON.stringify(t);if(this.persisted.get(e.declaration.scope)===n)return;this.persisted.set(e.declaration.scope,n);let r=this.saved.identity,i=this.epoch,a=this.requests.signal;this.saveQueue=this.saveQueue.catch(()=>{}).then(async()=>{if(!(this.epoch!==i||this.stopped))try{if(await this.api({method:`POST`,signal:a,body:JSON.stringify({identity:r,scope:e.declaration.scope,values:t})}),this.epoch===i&&!this.stopped){let t=await this.api();if(this.checkSaved(t),this.epoch!==i||this.stopped)return;this.saved=t,await this.send(`command`,{operation:`url`,scope:e.declaration.scope,query:Ee(t.scopes)})}}catch(e){this.epoch===i&&!this.stopped&&this.publish({storageError:this.surface===`build`&&e instanceof Error?`${e.message} Changes remain in memory and are not in the URL.`:`Controls could not be saved. Changes remain in memory; use Retry to reconnect storage.`})}})}async command(e,t,n,r){if(this.state.loading||this.state.resetting||this.stopped)return;let i=this.epoch,a=this.state.scopes.find(e=>e.declaration.scope===t);if(!a){this.publish({error:`This controls scope is no longer active.`});return}let o=()=>this.applyCommand(e,t,a.fingerprint,i,n,r);if(e!==`update`)return o();let s=this.editQueue.catch(()=>{}).then(o);return this.editQueue=s.then(()=>{}),s}async applyCommand(e,t,n,r,i,a){if(this.epoch!==r||this.stopped||this.state.resetting)return;let o=this.state.scopes.find(e=>e.declaration.scope===t);if(!o||o.fingerprint!==n)this.publish({error:`The controls scope or declaration changed. The command was not applied.`});else{this.publish({error:``});try{if(this.state.reconnectRequired)throw Error(`Reconnect controls before sending more commands.`);if(e===`update`||e===`action`){let t=o.declaration.controls.find(e=>e.id===i);if(!t||!o.snapshot.visible[t.id])throw Error(`This control is unknown or hidden.`);if(e===`update`){let e=Be(t,a);if(e)throw Error(`Control "${t.id}": ${e}`)}else if(t.type!==`button`||!o.snapshot.actions[t.id]?.available||o.snapshot.actions[t.id]?.busy)throw Error(`This action is unavailable or busy.`)}let n=await this.send(`command`,{operation:e,scope:t,fingerprint:o.fingerprint,revision:o.snapshot.revision,...i?{id:i}:{},...e===`update`?{value:a}:{}});if(e===`update`&&i)return{value:n.scopes.find(e=>e.declaration.scope===t)?.snapshot.values[i]}}catch(e){!this.stopped&&this.epoch===r&&!this.hasBindingError(t,i)&&this.publish({error:e instanceof Error?e.message:`Controls command failed.`})}}}async resetAll(){if(this.state.resetting||this.stopped)return;let e=this.epoch;this.publish({resetting:!0});try{let t=``;await this.editQueue.catch(()=>{});let n=this.state.runtimeAvailable&&(this.state.status===`ready`||this.state.status===`no-controls`);if(n)try{await this.send(`command`,{operation:`reset-all`,contexts:this.state.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch(e){t=e instanceof Error?e.message:`Some app defaults could not be restored.`}if(this.epoch!==e||this.stopped)return;if(!this.saved){let e=await this.api();this.checkSaved(e),this.saved=e}await this.saveQueue.catch(()=>{}),await this.api({method:`POST`,signal:this.requests.signal,body:JSON.stringify({identity:this.saved.identity,reset:!0})}),this.saved.scopes={},await this.send(`command`,{operation:`url`,query:``}),this.cachedScopes.clear(),this.persisted.clear(),this.publish({storageError:``,error:this.hasBindingError()?``:t,notice:n?``:`Saved controls were cleared. Runtime defaults could not be restored until the preview reconnects.`})}catch(t){this.epoch===e&&this.publish({storageError:t instanceof Error?t.message:`Reset could not be saved.`})}finally{this.epoch===e&&this.publish({resetting:!1,loading:!1})}}};function tr(e,t=()=>window.location.href,n=e=>{window.history.replaceState(window.history.state,``,e),window.dispatchEvent(new Event(we))}){return r=>Promise.resolve().then(()=>{r?.signal?.throwIfAborted();let i=De(new URL(t()).search);if(!r)return{identity:e,...i};if(r.method!==`POST`||typeof r.body!=`string`)throw Error(`Invalid URL controls request.`);let a=JSON.parse(r.body);if(!a||typeof a!=`object`||!(`identity`in a)||a.identity!==e)throw Error(`The controls URL identity changed.`);let o=i.scopes;if(`reset`in a&&a.reset===!0)o={};else if(`replace`in a&&a.replace===!0&&`scopes`in a){if(!a.scopes||typeof a.scopes!=`object`||Array.isArray(a.scopes))throw Error(`Invalid controls history settings.`);let e={};for(let[t,n]of Object.entries(a.scopes)){if(!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(t)||!Ce(n))throw Error(`Invalid controls history settings.`);e[t]=n}o=De(Ee(e)).scopes}else{if(!(`scope`in a)||typeof a.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(a.scope)||!(`values`in a)||!Ce(a.values))throw Error(`Invalid URL control settings.`);o={...o,[a.scope]:a.values}}let s=Oe(t(),Ee(o));s!==t()&&n(s)})}function nr({frameRef:e,prototypeUrl:t,previewUrl:n,address:r,replaceAddress:i}){let[a,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(null),l=(0,V.useRef)({address:r,replaceAddress:i});return(0,V.useLayoutEffect)(()=>{l.current={address:r,replaceAddress:i}},[r,i]),(0,V.useEffect)(()=>{if(!e.current)return;let r=new er(e.current,new URL(n??t).origin,tr(`prototype:${new URL(t).origin}`,()=>l.current.address,e=>{l.current.address=e,l.current.replaceAddress(e)}));o(r);let i=r.subscribe(()=>c(r.getSnapshot()));return r.start(),()=>{i(),r.stop()}},[t,n,e]),{connection:a,state:s}}function rr({token:e,status:t,onStatusChange:n,onSelectHub:r}){let[i,a]=(0,V.useState)(!1),[o,s]=(0,V.useState)(!1),[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(!1),[f,p]=(0,V.useState)(null),m=(0,V.useRef)(!1),h=(0,V.useRef)(!1),g=t?.state===`connected`||t?.state===`undiscovered`,_=t?.state===`disconnected`||t?.state===`pairing`||t?.state===`unconfigured`,v=g?null:t?.pairing||(f?.repository===t?.repository&&f?.hubOrigin===t?.hubOrigin?f?.pairing:null),y=v?.verificationUrl;(0,V.useEffect)(()=>{let e=window.setTimeout(()=>{g?(a(!1),p(null),l(``)):_&&t?.repository&&!m.current&&(m.current=!0,a(!0))},0);return()=>window.clearTimeout(e)},[g,_,t?.repository]),(0,V.useEffect)(()=>{if(!y||u)return;let t=!1,r=!1;async function i(){if(!r){r=!0;try{let r=await $(`/api/hub/poll`,e,{method:`POST`,body:`{}`});if(t)return;r.status!==`pending`&&(p(null),r.status!==`approved`&&l(G.connectionApprovalExpired),await n())}catch(e){t||(l(e instanceof Error?e.message:String(e)),d(!0))}finally{r=!1}}}let a=window.setInterval(()=>void i(),3e3);return()=>{t=!0,window.clearInterval(a)}},[y,u,e,n,t?.repository,t?.hubOrigin]);async function b(i){if(m.current=!0,!h.current){if(!t?.repository)l(G.connectionRepositoryRequired);else if(!t.hubOrigin&&!i)l(G.connectionHubRequired);else{h.current=!0,s(!0),l(``),d(!1);try{!t.hubOrigin&&i&&await r(i);let a=await $(`/api/hub/connect`,e,{method:`POST`,body:`{}`});p({repository:t.repository,hubOrigin:new URL(a.verificationUrl).origin,pairing:a}),a.browserError&&l(G.connectionBrowserFailed(a.browserError)),await n()}catch(e){l(e instanceof Error?e.message:String(e))}finally{h.current=!1,s(!1)}}}}function x(){a(!0),t?.hubOrigin&&b()}return{open:i,close:()=>a(!1),show:()=>a(!0),showAndConnect:x,connect:b,connecting:o,error:c,pairing:v}}function ir({token:e,onStatus:t,onError:n}){let[r,i]=(0,V.useState)(null),a=(0,V.useRef)(0),o=(0,V.useRef)(0),s=(0,V.useRef)(!1),c=(0,V.useCallback)(async(r,c=!1)=>{if(s.current||c&&o.current>0)return;o.current+=1;let l=++a.current;try{let o=r===`open`||r===`interaction`,c=await $(o?r===`open`?`/api/hub/open`:`/api/hub/activity`:`/api/hub/status`,e,o?{method:`POST`,body:`{}`}:{});if(l!==a.current||s.current)return;i(c);let u=c.prototype?.startPageImportError||c.localStartPageError;u&&n(u),t(c)}catch(e){if(l!==a.current||s.current)return;let t=e instanceof Error?e.message:String(e);i(e=>({state:`unavailable`,repository:e?.repository,branch:e?.branch,hubOrigin:e?.hubOrigin,message:G.hubStatusUnavailable(t)})),n(t)}finally{--o.current}},[e,t,n]),l=(0,V.useCallback)(async t=>{s.current=!0,a.current+=1,i(null);try{await $(`/api/hub/origin`,e,{method:`POST`,body:JSON.stringify({origin:t})})}finally{s.current=!1,await c()}},[e,c]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void c(`open`),0),t=window.setInterval(()=>void c(void 0,!0),15e3);function n(){c(`interaction`)}return window.addEventListener(`focus`,n),()=>{a.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]);async function u(){let t=await $(`/api/hub/discovery`,e,{method:`POST`,body:`{}`});if(t.discovery?.state!==`valid`||!t.discovery.origin)throw Error(t.discovery?.message||G.resetHubUnavailable);return await c(),t.discovery.origin}return{status:r,refresh:c,select:l,reset:u}}function ar({prototypeUrl:e,previewUrl:t,shellRef:n,cancelClick:r}){let[{key:i,ref:a},o]=(0,V.useState)(()=>({key:0,ref:(0,V.createRef)()})),[s,c]=(0,V.useState)({input:e,url:e}),[l,u]=(0,V.useState)({input:e,entries:[e],index:0}),[d,f]=(0,V.useState)(()=>window.matchMedia?.(`(prefers-color-scheme: dark)`)?.matches?`dark`:`light`),[p,m]=(0,V.useState)(null),h=(0,V.useRef)(null),g=l.input===e?l:{input:e,entries:[e],index:0},_=g.entries[g.index],v=(0,V.useCallback)(()=>r.current?.(),[r]),y=(0,V.useCallback)(t=>{if(new URL(t).origin!==new URL(e).origin)throw Error(G.startPageOrigin);u(e=>{let n=[...e.entries];return n[e.index]=t,{...e,entries:n}})},[e]),b=(0,V.useCallback)(t=>{if(h.current===e)return;h.current=e;let n=new URL(e),r=t.state===`connected`&&(t.prototype?.startPageSet??t.prototype?.startPage!==void 0)?t.prototype?.startPage:t.localStartPage;if(n.pathname!==`/`||n.search||n.hash||!r)return;let i=new URL(r,n);if(i.origin!==n.origin)throw Error(G.startPageOrigin);c({input:e,url:i.href}),u({input:e,entries:[i.href],index:0})},[e]);function x(){v(),m(null),c({input:e,url:_}),o(e=>({key:e.key+1,ref:(0,V.createRef)()}))}function S(t){t===_?x():(u(n=>{let r=n.input===e?n:g;return{...r,entries:[...r.entries.slice(0,r.index+1),t],index:r.index+1}}),c({input:e,url:t}))}function C(t){let n=g.entries[t];n&&(u({...g,index:t}),c({input:e,url:n}))}let w=(0,V.useCallback)((t,n=!1)=>{m(t);let r=new URL(e);r.pathname=t.pathname,r.search=t.search,r.hash=t.hash,u(t=>{let i=t.input===e?t:{input:e,entries:[e],index:0},a=new URL(i.entries[i.index]),o=[...a.searchParams].filter(([e])=>e.startsWith(`rc.`));for(let e of[r,a])for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);if(a.pathname===r.pathname&&a.searchParams.toString()===r.searchParams.toString()&&a.hash===r.hash)return i;for(let[e,t]of o)r.searchParams.append(e,t);let s=r.href;if(n){let e=[...i.entries];return e[i.index]=s,{...i,entries:e}}return{...i,entries:[...i.entries.slice(0,i.index+1),s],index:i.index+1}})},[e]);(0,V.useEffect)(()=>{let e=a.current;if(!e)return;function t(){v(),m(null)}return e.addEventListener(`load`,t),()=>{v(),e.removeEventListener(`load`,t)}},[v,a]),(0,V.useEffect)(()=>{let r=a.current;if(!r)return;let i=new URL(t??e).origin,o=crypto.randomUUID();function s(){let e=n.current?.closest(`.canvas-base`);e&&r?.contentWindow?.postMessage({type:`replica:canvas:theme`,nonce:o,accent:window.getComputedStyle(e).getPropertyValue(`--hub-accent`).trim()},i)}function c(e){e.source===r?.contentWindow&&e.origin===i&&e.data?.type===`replica:canvas:ready`&&s()}return r.addEventListener(`load`,s),window.addEventListener(`message`,c),s(),()=>{r.removeEventListener(`load`,s),window.removeEventListener(`message`,c)}},[d,e,t,a,n]);let T=new URL(s.input===e?s.url:e);if(t){let e=new URL(t);T.protocol=e.protocol,T.host=e.host}return{frameRef:a,frameKey:i,source:T.href,navigation:g,address:_,replaceAddress:y,appearance:d,setAppearance:f,liveRoute:p,initialize:b,reportRoute:w,reload:x,navigate:S,travel:C}}function or(e){let[t,n]=(0,V.useState)(null),[r,i]=(0,V.useState)(``),a=(0,V.useRef)(null),o=(0,V.useRef)(0),s=(0,V.useRef)(0),c=(0,V.useCallback)(async(t,r=!1)=>{if(r&&s.current>0)return;s.current+=1;let c=++o.current;try{let r=await $(t?`/api/refresh`:`/api/state`,e,t?{method:`POST`,body:`{}`}:{});if(c!==o.current)return;a.current=r,n(r),i(``)}catch(e){if(c!==o.current)return;n(t=>t&&{...t,stats:{...t.stats,remoteBranch:{state:`unknown`,repository:t.stats.repository||null,branch:t.stats.branch||null,commitSha:t.stats.commitSha||null,error:sr(e)}}}),i(sr(e))}finally{--s.current}},[e]);return(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void c(!0),0),t=window.setInterval(()=>{let e=a.current?.publishStatus?.state,t=a.current?.publishRequest,n=e===`requested`||e===`in_progress`||t?.state===`requested`||!!t?.requestedAt&&(e===`not_published`||e===`unavailable`);c(n,!0)},15e3);function n(){c(!0)}return window.addEventListener(`focus`,n),()=>{o.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]),{state:t,error:r,setError:i,refresh:c}}function sr(e){return e instanceof Error?e.message:String(e)}function cr({token:e,enabled:t,repository:n,branch:r,commitSha:i,publicationRevision:a}){let o=`${n}/${r}/${i}/${a}`,[s,c]=(0,V.useState)(null),[l,u]=(0,V.useState)(!1),[d,f]=(0,V.useState)(!1),p=(0,V.useRef)(null),m=(0,V.useRef)(0),h=t&&s?.identity===o?s:null,g=(0,V.useCallback)(async()=>{if(!t)return;let i=++m.current;u(!0);try{if(await p.current,i!==m.current)return;let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});if(i!==m.current)return;if(t.target.repository!==n||t.target.branch!==r)throw Error(K.preferenceTargetChanged);if(typeof t.remember!=`boolean`)throw Error(K.invalidPreference);c({identity:o,preparation:t,error:``})}catch(e){i===m.current&&c({identity:o,preparation:null,error:e instanceof Error?e.message:String(e)})}finally{i===m.current&&u(!1)}},[t,e,n,r,o]);(0,V.useEffect)(()=>{let e=window.setTimeout(()=>void g(),0);return()=>{m.current+=1,window.clearTimeout(e)}},[g]);async function _(n){if(!t||!h?.preparation||l||p.current)return;f(!0);let r=m.current,i=h.preparation,a=(async()=>{try{if((await $(`/api/publish/preference`,e,{method:`POST`,body:JSON.stringify({target:i.target,remember:n})})).remember!==n)throw Error(K.invalidPreference);r===m.current&&c({identity:o,preparation:{...i,remember:n},error:``})}catch(e){r===m.current&&c({identity:o,preparation:i,error:e instanceof Error?e.message:String(e)})}})();p.current=a;try{await a}finally{p.current=null,f(!1)}}return{remember:h?.preparation?.remember??null,loading:l||!h,saving:d,error:h?.error||``,save:_,retry:g}}function lr(e,t,n){let r=n?.included,i=n?.error,a=n?.revision,o=(0,V.useMemo)(()=>{if(r!==void 0)return{identity:e,revision:a,included:r,error:i??``,pending:!1};let t=!1,n=``;if(e)try{let n=localStorage.getItem(`replica:share-controls:v1:${e}`);if(n!==null&&n!==`true`&&n!==`false`)throw Error(`Invalid saved share preference.`);t=n===`true`}catch{n=`The share preference could not be read. Control settings are off by default.`}return{identity:e,revision:a,included:t,error:n,pending:!1}},[e,a,r,i]),[s,c]=(0,V.useState)(o),l=s.identity===e&&s.revision===a?s:o,u=``,d=``;if(l.included)try{u=Ee(t)}catch(e){d=e instanceof Error?e.message:`Control settings could not be shared.`}return{included:l.included,query:u,error:d||l.error,blocked:!!d,...n?{pending:l.pending}:{},onChange:t=>{if(n){c({identity:e,revision:a,included:t,error:``,pending:!0});function r(n){c(r=>r.identity===e&&r.revision===a&&r.included===t?{...r,error:n,pending:!1}:r)}n.onChange(t).then(()=>r(``),e=>r(e instanceof Error?e.message:`This preference could not be saved. It will only apply while this page is open.`));return}let r=``;if(e)try{localStorage.setItem(`replica:share-controls:v1:${e}`,String(t))}catch{r=`This preference could not be saved. It will only apply while this page is open.`}c({identity:e,revision:a,included:t,error:r,pending:!1})}}}function ur({token:e,state:t,hubStatus:n}){let[r,i]=(0,V.useState)(null),a=!!(r&&(r.stale||r.repository!==void 0&&r.repository!==t?.stats.repository||r.branch!==void 0&&r.branch!==t?.stats.branch||n?.hubOrigin!==void 0&&r.hubOrigin!==void 0&&r.hubOrigin!==n.hubOrigin||r.token!==e));(0,V.useEffect)(()=>{if(!r||r.stale)return;let e=r.repository??t?.stats.repository,o=r.branch??t?.stats.branch,s=r.hubOrigin??n?.hubOrigin;if(!a&&e===r.repository&&o===r.branch&&s===r.hubOrigin)return;let c=window.setTimeout(()=>{i(t=>t&&{...t,repository:e,branch:o,hubOrigin:s,stale:a,connecting:!a&&t.connecting})},0);return()=>window.clearTimeout(c)},[r,a,t?.stats.repository,t?.stats.branch,n?.hubOrigin]);function o(){i({repository:t?.stats.repository,branch:t?.stats.branch,hubOrigin:n?.hubOrigin,token:e,connecting:!1,stale:!1})}function s(e){i(t=>t&&{...t,connecting:e})}return{intent:r,targetChanged:a,begin:o,close:()=>i(null),setConnecting:s}}var dr={open:!1,context:null,links:[],loading:!1,busy:!1,stale:!0,error:``,notice:``,created:null};function fr({token:e,hubStatus:t,prototypeState:n}){let[r,i]=(0,V.useState)(dr),a=(0,V.useRef)(r);a.current=r;let o=(0,V.useRef)(0),s=(0,V.useRef)(!1),c=(0,V.useRef)(!1),l=(0,V.useRef)(!1),u=(0,V.useRef)(!1),d=(0,V.useRef)(null),f=`${t?.hubOrigin}/${t?.repository}/${t?.branch}/${t?.state}`,p=(0,V.useRef)(f);p.current=f;let m=(0,V.useCallback)(()=>{!u.current||s.current||c.current||l.current||!d.current||(u.current=!1,d.current())},[]);(0,V.useLayoutEffect)(()=>{o.current+=1,i(e=>e.open?{...dr,open:!0,error:q.stale}:dr)},[f,e]),(0,V.useEffect)(()=>()=>{o.current+=1,u.current=!1},[]),(0,V.useEffect)(()=>{let e=t?.prototype;e&&e.canManageShareLinks!==!0&&a.current.context?.prototype.canManageShareLinks===!0&&(o.current+=1,i(t=>t.open&&t.context?.prototype.id===e.id?{...dr,open:!0,stale:!1,context:{...t.context,prototype:{...t.context.prototype,canManageShareLinks:e.canManageShareLinks}}}:t))},[t?.prototype]),(0,V.useEffect)(()=>{t?.prototype?.publicSharingEnabled===!1&&(o.current+=1,i(e=>e.open?{...dr,open:!0,sharingDisabled:!0,error:q.disabled,context:e.context?{...e.context,prototype:{...e.context.prototype,publicSharingEnabled:!1}}:null}:dr))},[t?.prototype?.publicSharingEnabled]);let h=(0,V.useCallback)((t,n)=>$(`/api/hub/share-links/${t}`,e,{method:`POST`,body:JSON.stringify(n)}),[e]),g=(0,V.useCallback)(e=>{e instanceof Error&&`code`in e&&(e.code===`public_sharing_disabled`||e.code===`public_sharing_changed`||e.code===`creator_access_changed`)&&(o.current+=1,i(t=>({...t,busy:!1,loading:!1,stale:!0,sharingDisabled:e.code===`public_sharing_disabled`,links:[],created:null,authorization:void 0})))},[]),_=(0,V.useCallback)(async(e=a.current.context)=>{if(!e||!e.prototype.canManageShareLinks||e.prototype.publicSharingEnabled===!1||c.current)return;c.current=!0;let t=o.current,n=p.current;i(e=>({...e,loading:!0,stale:!0,error:``}));try{let r=new Map,a=new Set,s=null;do{let i=await h(`list`,{target:e.target,...s?{cursor:s}:{}});if(t!==o.current||n!==p.current)return;for(let e of i.shareLinks)r.set(e.id,e);if(s=i.nextCursor,s){if(a.has(s))throw Error(q.paginationFailed);a.add(s)}}while(s);i(e=>({...e,links:[...r.values()],created:e.created?r.get(e.created.id)??null:null,loading:u.current,stale:u.current,sharingDisabled:!1}))}catch(e){t===o.current&&n===p.current&&(i(t=>({...t,loading:!1,stale:!0,error:e instanceof Error?e.message:q.failed})),g(e))}finally{c.current=!1,m()}},[h,m,g]),v=(0,V.useCallback)(async()=>{if(s.current||l.current||c.current){u.current=!0,i(e=>({...e,open:!0,stale:!0,loading:!0}));return}l.current=!0;let e=++o.current,r=p.current;i({...dr,open:!0,loading:!0});let a=t?.repository===n?.stats.repository&&t?.branch===n?.stats.branch,d=``;if(!t||[`disconnected`,`pairing`,`unconfigured`].includes(t.state)?d=q.disconnected:[`unavailable`,`denied`].includes(t.state)?d=q.unavailable:(t.state!==`connected`||!a)&&(d=q.branch),d)i({...dr,open:!0,error:d}),l.current=!1;else try{let t=await h(`context`,{});if(e!==o.current||r!==p.current)return;i(e=>({...e,context:t,loading:!1,stale:t.prototype.canManageShareLinks===!0})),await _(t)}catch(t){e===o.current&&r===p.current&&i(e=>({...e,loading:!1,error:t instanceof Error?t.message:q.failed}))}finally{l.current=!1,m()}},[t,n,_,h,m]);d.current=v;let y=(0,V.useCallback)(async(e,t)=>{let n=a.current;if(s.current||l.current||c.current||u.current||n.stale||!n.context||n.context.prototype.canManageShareLinks!==!0||n.sharingDisabled||n.context.prototype.publicSharingEnabled===!1)return!1;s.current=!0;let r=o.current;i(e=>({...e,busy:!0,error:``,notice:``}));try{let a=await h(e,{target:n.context.target,...t});return r===o.current&&(i(n=>({...n,notice:e===`delete`?q.deleted:``,authorization:void 0,created:`id`in a?a:e===`delete`&&`id`in t&&n.created?.id===t.id?null:n.created,links:e===`delete`&&`id`in t?n.links.filter(e=>e.id!==t.id):n.links})),await _(n.context),!0)}catch(e){if(r!==o.current)return!1;let t=e instanceof Error&&`code`in e&&e.code===`fresh_authorization_required`&&`authorization`in e&&e.authorization&&typeof e.authorization==`object`&&`url`in e.authorization&&typeof e.authorization.url==`string`&&`expiresAt`in e.authorization&&typeof e.authorization.expiresAt==`string`?{url:e.authorization.url,expiresAt:e.authorization.expiresAt}:void 0,n=e instanceof Error&&(!(`statusCode`in e)||`code`in e&&e.code===`share_delivery_unknown`);return i(r=>({...r,stale:!0,authorization:t,error:n?q.unknown:e instanceof Error?e.message:q.failed})),g(e),!1}finally{s.current=!1,r===o.current&&i(e=>({...e,busy:!1})),m()}},[_,h,m,g]),b=(0,V.useCallback)(async e=>{let t=a.current;if(!t.context||l.current||c.current||u.current)throw Error(q.stale);let n=o.current,r=await h(`controls-preference`,{target:t.context.target,included:e});if(n!==o.current)throw Error(q.stale);if(r.included!==e)throw Error(`The share preference could not be saved.`)},[h]),x=(0,V.useCallback)(async(e,t)=>{let n=a.current;if(!n.context||n.stale||l.current||c.current||u.current)return;let r=o.current;try{await h(`open`,{target:n.context.target,id:e,...t?{controlsQuery:t}:{}})}catch(e){r===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:q.failed})),g(e))}},[h,g]),S=(0,V.useCallback)(async()=>{let e=a.current;if(!e.context||!e.authorization||e.busy)return;let t=o.current;try{await h(`authorize`,{target:e.context.target}),t===o.current&&i(e=>({...e,notice:q.authorizationRetry}))}catch(e){t===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:q.failed})),g(e))}},[h,g]);return(0,V.useEffect)(()=>{if(!r.open||!r.context)return;function e(){s.current||_()}let t=window.setInterval(e,3e4);return window.addEventListener(`focus`,e),()=>{window.clearInterval(t),window.removeEventListener(`focus`,e)}},[r.open,r.context,_]),{state:r,open:v,close:()=>{u.current=!1,i(e=>({...e,open:!1}))},refresh:()=>r.context&&!r.sharingDisabled&&r.context.prototype.publicSharingEnabled!==!1?_():v(),create:(e,t)=>y(`create`,{label:e,expiration:t,buildNumber:r.context?.prototype.build?.number}),remove:e=>y(`delete`,{id:e}),openLink:x,setControlPreference:b,authorize:S}}var pr=`modulepreload`,mr=function(e){return`/assets/`+e},hr={},gr=function(e){return e.pathname.endsWith(`.css`)},_r=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},vr=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=mr(t,n);let r=s(t),i=gr(r);return _r(hr,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:pr,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},yr=(0,V.lazy)(()=>vr(()=>import(`./renderer-improvement-notes-prototype.js`).then(e=>e.t).then(e=>({default:e.ImprovementNotesPrototype})),__vite__mapDeps([0,1,2,3,4]))),br=(0,V.lazy)(()=>vr(()=>import(`./renderer-prototype-canvas-thread-sample.js`).then(e=>({default:e.PrototypeCanvasThreadSample})),__vite__mapDeps([5,1,2,4,3])));function xr({config:e}){let t=(0,V.useRef)(null),n=(0,V.useRef)(null),r=(0,V.useRef)(null),i=(0,V.useRef)(null),a=(0,V.useRef)(null),o=(0,V.useRef)(null),s=(0,V.useRef)(null),c=(0,V.useRef)(null),l=(0,V.useRef)(null),u=(0,V.useRef)(null),[d,f]=(0,V.useState)(!1),[p,m]=(0,V.useState)({position:null,collapsed:!1,collapsedGroups:{}}),[h,g]=(0,V.useState)(!1),[_,v]=(0,V.useState)(!1),y=(0,V.useCallback)(()=>{g(!1),o.current?.focus()},[]),{frameRef:b,frameKey:x,source:S,navigation:C,address:w,replaceAddress:T,appearance:E,setAppearance:D,liveRoute:O,initialize:k,reportRoute:A,reload:j,navigate:M,travel:N}=ar({prototypeUrl:e.prototypeUrl,previewUrl:e.previewUrl,shellRef:t,cancelClick:u}),P=nr({...e,frameRef:b,address:w,replaceAddress:T}),F=P.state;Gn({...e,frameRef:b,addressRef:r,appearance:E,navigation:C,liveRoute:O,cancelClick:u,reload:j,controlsConnection:P.connection});let{state:I,error:L,setError:R,refresh:z}=or(e.token),B=ir({token:e.token,onStatus:k,onError:R}),ee=rr({token:e.token,status:B.status,onStatusChange:B.refresh,onSelectHub:B.select}),te=fr({token:e.token,hubStatus:B.status,prototypeState:I}),ne=ur({token:e.token,state:I,hubStatus:B.status}),re=cr({token:e.token,enabled:h&&B.status?.state===`connected`&&B.status.prototype?.registered===!0&&!!B.status.prototype.build&&B.status.repository===I?.stats.repository&&B.status.branch===I?.stats.branch,repository:I?.stats.repository,branch:I?.stats.branch,commitSha:I?.stats.commitSha,publicationRevision:I?.publishRequest?.requestedAt}),ie=Jn({token:e.token,state:I,hubStatus:B.status,error:L,setError:R,refresh:z,refreshHub:B.refresh,preferenceSaving:re.saving}),ae=zn(I,B.status,ie.publication),oe=te.state.context,se=lr(oe?`${oe.hubOrigin}:${oe.prototype.repositoryId}:${oe.prototype.id}`:void 0,P.connection?.getControlValues()??{},{included:oe?.controlSettingsIncluded??!1,error:oe?.controlSettingsError,revision:oe?.target,onChange:te.setControlPreference});(0,V.useLayoutEffect)(()=>{document.body.classList.remove(`renderer-loading`);let e=t.current,r=n.current;if(!e||!r)return;function i(){let t=r?.getBoundingClientRect().height;t&&e?.style.setProperty(`--canvas-toolbar-height`,`${t}px`)}let a=new ResizeObserver(i);return a.observe(r),i(),()=>a.disconnect()},[]);function ce(){ee.close(),ae.kind===`ready`?te.open():ne.begin()}return(0,U.jsxs)(H.ThemeProvider,{colorMode:E,className:`canvas-base`,children:[(0,U.jsxs)(`main`,{ref:t,className:`canvas-shell${te.state.open?` canvas-shell--inactive`:``}`,inert:te.state.open,"aria-hidden":te.state.open?!0:void 0,children:[(0,U.jsx)(Ne,{address:w,addressRef:r,canGoBack:C.index>0,canGoForward:C.indexN(C.index-1),onForward:()=>N(C.index+1),onNavigate:M,onOpenTab:async()=>{await $(`/api/prototype/open`,e.token,{method:`POST`,body:JSON.stringify({url:w})})},onReload:j}),(0,U.jsx)(Vn,{toolbarRef:n,config:e,state:ie.presentedState,prototypeName:B.status?.state===`connected`&&B.status.prototype?.name||void 0,publishing:ie.busy,publication:ie.publication,publishButtonRef:i,hubButtonRef:o,titleButtonRef:c,onBuildDetails:()=>v(!0),controlsButtonRef:l,controlsOpen:d,onControls:()=>f(!d),onPublish:()=>void ie.publish(),onShare:ce,shareButtonRef:a,hubOpen:h,onHub:()=>{g(!h),B.refresh(`interaction`)}}),(0,U.jsx)(`iframe`,{ref:b,className:`prototype-frame`,title:G.prototypeFrameTitle(e.name),src:S,style:{colorScheme:E,backgroundColor:`var(--hub-canvas-default)`}},x),(0,U.jsx)(Rn,{config:e,frameRef:b,onRouteChange:A,status:B.status,onStatusChange:B.refresh,onSelectHub:B.select,onConnect:ee.showAndConnect,onDisconnected:ee.show,connectionButtonRef:s,connecting:ee.connecting,publication:ie.publication,publicationBusy:ie.busy,dirty:I?.stats.workingTree===`changed`,onPublish:()=>void ie.publish(),onRetryPublication:()=>void ie.retry(),publishPreference:re,open:h,onClose:y}),e.improvementThreadsSample?(0,U.jsx)(V.Suspense,{fallback:(0,U.jsx)(`p`,{role:`status`,children:G.improvementNotesLoading}),children:(0,U.jsx)(br,{})}):e.pickAndPolish||e.improvementNotesDemo?(0,U.jsx)(V.Suspense,{fallback:(0,U.jsx)(`p`,{className:`visually-hidden`,role:`status`,children:G.improvementNotesLoading}),children:(0,U.jsx)(yr,{canvas:{token:e.token,frameRef:b,prototypeUrl:e.prototypeUrl,previewUrl:e.previewUrl,branch:I?.stats.branch??e.name,hubOpen:h,onOpenNotes:()=>g(!1),onNavigate:M}})}):null,d&&P.connection&&F?(0,U.jsx)(et,{state:F,connection:P.connection,layout:p,onLayoutChange:m,diagnosisTarget:w,onDiagnose:()=>$(`/api/controls/diagnose`,e.token,{method:`POST`,body:JSON.stringify({status:F.status,runtimeAvailable:F.runtimeAvailable,reconnectRequired:F.reconnectRequired===!0,hasError:!!F.error||Un(F,F.loading,w).controls.some(e=>e.visible&&!!e.error),hasStorageError:!!F.storageError,previewUrl:w})})}):null]}),(0,U.jsx)(`div`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:L||ie.notice}),(0,U.jsx)(Me,{hub:B,connection:ee,publication:ie,sharing:te,shareIntent:ne,controlSettings:se,readiness:ae,state:I,hubOpen:h,buildDetailsOpen:_,onCloseBuildDetails:()=>v(!1),shareButtonRef:a,hubButtonRef:o,connectionButtonRef:s,publishButtonRef:i,titleButtonRef:c})]})}var Sr=document.querySelector(`#root`);if(!Sr)throw Error(`Replica prototype renderer root is missing.`);(0,se.createRoot)(Sr).render((0,U.jsx)(xr,{config:window.__REPLICA_CANVAS__}));export{$ as a,zt as c,ot as d,at as f,W as h,pn as i,bt as l,ue as m,bn as n,Kt as o,nt as p,vn as r,Gt as s,Dn as t,st as u};
\ No newline at end of file
+`))throw Error(`Live review connection failed.`)}}catch{t.signal.aborted||Fe(!0)}t.signal.aborted||(Date.now()-a>=3e4&&(r=5e3),n=window.setTimeout(()=>void i(),r),r=Math.min(r*2,6e4))}return i(),()=>{t.abort(),window.clearTimeout(n)}},[Ke,ht,e.token,Mt]);let Nt=(0,H.useCallback)((n,r={})=>{let i=t.current;return!i?.contentWindow||!Ve.current?!1:(i.contentWindow.postMessage({type:n,nonce:Ve.current,...r},new URL(e.previewUrl??e.prototypeUrl).origin),!0)},[e.prototypeUrl,e.previewUrl,t]),Pt=(0,H.useCallback)(t=>{e.pickAndPolish||e.improvementNotesDemo||!Te||!Tt||Et||(F(null),Ne(null),ke(t),_(),Nt(`replica:canvas:select`,{mode:t}))},[e.improvementNotesDemo,e.pickAndPolish,Te,Tt,_,Et,Nt]),Ft=(0,H.useCallback)(()=>{Y&&(Nt(`replica:canvas:cancel-selection`),ke(null))},[Y,Nt]),It=(0,H.useCallback)(()=>{Nt(`replica:canvas:clear-selection`),je(null),Ne(null)},[Nt]);(0,H.useEffect)(()=>{let r=t.current;if(!r){we(new Map),Ee(!1);return}let i=new URL(e.previewUrl??e.prototypeUrl).origin,a=JSON.parse(jt),o=new Set(a.map(({id:e})=>e)),s=Date.now(),c=!1;function l(){Ve.current=crypto.randomUUID(),s=Date.now(),c=!1,Ee(!1),Oe(``),we(new Map),r?.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:Ve.current},i),u()}function u(){a.length&&r?.contentWindow?.postMessage({type:`replica:canvas:resolve`,nonce:Ve.current,anchors:a},i)}function d(t){let a=t.data;if(t.source===r?.contentWindow&&t.origin===i&&In(a)&&a.nonce===Ve.current){if(a.type===`replica:canvas:bridge-error`)Ee(!1),Oe(K.commentingMissing);else if(a.type===`replica:canvas:ready`){if(a.protocolVersion!==1){c=!0,Ee(!1),Oe(K.commentingIncompatible);return}if(!Ln(a.route))return;s=Date.now(),c=!1,Ee(!0),Oe(``),N(Ln(a.route)),n?.(Ln(a.route),a.replaceRoute===!0)}else if(!c){if(a.type===`replica:canvas:conversation-dismiss-requested`)window.dispatchEvent(new Event(`replica:review-dismiss`));else if(a.type===`replica:canvas:resolved`){if(a.protocolVersion!==1||!Ln(a.route)||!Array.isArray(a.results)||a.results.length>200)return;s=Date.now(),Ee(!0),Oe(``),N(Ln(a.route)),n?.(Ln(a.route),a.replaceRoute===!0);let e=new Map;for(let t of a.results){if(!In(t)||typeof t.id!=`number`||typeof t.x!=`number`||typeof t.y!=`number`||!o.has(t.id)||!Number.isFinite(t.x)||!Number.isFinite(t.y)||t.x<0||t.y<0||t.x>r.clientWidth||t.y>r.clientHeight)continue;let n=In(t.rect)&&typeof t.rect.x==`number`&&typeof t.rect.y==`number`&&typeof t.rect.width==`number`&&typeof t.rect.height==`number`&&Number.isFinite(t.rect.x)&&Number.isFinite(t.rect.y)&&Number.isFinite(t.rect.width)&&Number.isFinite(t.rect.height)&&t.rect.width>=0&&t.rect.height>=0?{x:t.rect.x,y:t.rect.y,width:t.rect.width,height:t.rect.height}:{x:t.x,y:t.y,width:0,height:0};e.set(t.id,{x:t.x,y:t.y,rect:n})}we(e)}else if(a.type===`replica:canvas:selected`){if(e.pickAndPolish||e.improvementNotesDemo)return;let t=Gt.safeParse(a.anchor);if(!t.success){Nt(`replica:canvas:cancel-selection`),Nt(`replica:canvas:clear-selection`),ke(null),Ne(In(a.anchor)&&a.anchor.kind===`area`?`area-unavailable`:`element-unavailable`);return}je(t.data),ke(null),Ne(null)}else a.type===`replica:canvas:selection-failed`&&(a.reason===`element-unavailable`||a.reason===`area-too-small`||a.reason===`area-unavailable`)?(ke(null),Ne(a.reason)):a.type===`replica:canvas:selection-cancelled`&&ke(null)}}}function f(){ke(null),je(null),Ne(null),l()}r.addEventListener(`load`,f),window.addEventListener(`message`,d),l();let p=window.setInterval(()=>{Date.now()-s>=2e4&&(Ee(!1),we(new Map),Oe(c?K.commentingIncompatible:K.commentingMissing)),r.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:Ve.current},i),u()},2e3);return()=>{r.removeEventListener(`load`,f),window.removeEventListener(`message`,d),window.clearInterval(p)}},[Ke,jt,e.prototypeUrl,e.improvementNotesDemo,e.pickAndPolish,e.previewUrl,t,n,Nt]);async function Lt(t,n,r,i){let a=Ke,o=i?.kind===`add-reaction`||i?.kind===`remove-reaction`||i?.kind===`mark-unread`;if(i){if(Re.current)return!1;Re.current=!0,Le(i)}o&&(Be.current=!0,ze.current+=1),B(``);try{let i=await $(`/api/hub/comments/${t}`,e.token,{method:n,...r?{body:JSON.stringify(r)}:{}});if(Ue.current!==a)return!1;if(o){let e=an.parse(i);y(t=>{if(t.identity!==a)return t;let n=new Map(t.items.map(e=>[e.id,e]));for(let t of e.comments)n.set(t.id,t);return{identity:a,items:[...n.values()]}})}return o||(Ge.current=window.setTimeout(()=>void Mt(),0)),!0}catch(e){return Ue.current===a&&(R(e instanceof Error?e.message:String(e)),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&B(e.message)),!1}finally{i&&Ue.current===a&&(o&&(Be.current=!1,ze.current+=1,Ge.current=window.setTimeout(()=>void Mt(),0)),Re.current=!1,Le(null))}}async function Rt(t){if(!gt||!Z||Re.current)return!1;let n=Ke;Re.current=!0,Le({kind:`create`}),B(``);try{let r=an.parse(await $(`/api/hub/comments`,e.token,{method:`POST`,body:JSON.stringify({review_comment:{build_number:gt.number,body:t,anchor:Z}})}));if(Ue.current!==n)return!1;let i=r.comments.find(e=>e.kind===`root`);return i?(y(e=>{if(e.identity!==n)return e;let t=new Map(e.items.map(e=>[e.id,e]));for(let e of r.comments)t.set(e.id,e);return{identity:n,items:[...t.values()]}}),It(),F(i.id),!0):!1}catch(e){return Ue.current===n&&(R(e instanceof Error?e.message:String(e)),e instanceof Error&&`statusCode`in e&&e.statusCode===429&&B(e.message)),!1}finally{Ue.current===n&&(Re.current=!1,Le(null))}}function zt(){Et||(T?(F(null),E(!1)):(E(!0),g&&_()))}let Bt=r?.repository&&r.branch?`https://github.com/${r.repository.split(`/`).map(e=>encodeURIComponent(e)).join(`/`)}/tree/${encodeURIComponent(r.branch)}`:null,Vt=r?.branch&&Bt?(0,W.jsxs)(`a`,{className:`canvas-hub-publication__branch`,href:Bt,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`Open ${r.branch} on GitHub`,children:[(0,W.jsx)(M,{size:16,"aria-hidden":`true`}),(0,W.jsx)(`span`,{children:r.branch})]}):r?.branch?(0,W.jsxs)(`span`,{className:`canvas-hub-publication__branch`,children:[(0,W.jsx)(M,{size:16,"aria-hidden":`true`}),(0,W.jsx)(`span`,{children:r.branch})]}):null,Ht=(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(U.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-origin-title`,children:`Hub`}),r&&r.state!==`unconfigured`?(0,W.jsx)(`div`,{className:`canvas-hub-origin`,children:r.hubOrigin?(0,W.jsx)(`a`,{href:Q?new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}`,r.hubOrigin).href:r.hubOrigin,target:`_blank`,rel:`noopener noreferrer`,children:r.hubOrigin}):(0,W.jsx)(`span`,{children:`URL unavailable`})}):null,ae||r?.state===`disconnected`||r?.state===`unconfigured`?(0,W.jsxs)(`form`,{className:`canvas-hub-origin-form`,onSubmit:e=>{e.preventDefault(),!(G||ue)&&(le(!0),oe(!0),R(``),a(se).then(()=>{oe(!1)}).catch(e=>R(e.message)).finally(()=>le(!1)))},children:[(0,W.jsxs)(`div`,{className:`canvas-hub-origin-field`,children:[(0,W.jsxs)(`label`,{children:[K.hubUrl,(0,W.jsx)(`input`,{type:`url`,required:!0,value:se,placeholder:`https://hub.example.com`,disabled:G||ue,onChange:e=>ce(e.target.value)})]}),(0,W.jsx)(U.Button,{type:`button`,size:`small`,variant:`subtle`,className:`canvas-icon-button`,leadingVisual:(0,W.jsx)(L,{size:16}),"aria-label":K.resetHubUrl,title:K.resetHubUrl,disabled:G||ue,"aria-busy":ue,onClick:()=>{de(!0),R(``),$(`/api/hub/discovery`,e.token,{method:`POST`,body:`{}`}).then(async e=>{if(e.discovery?.state!==`valid`||!e.discovery.origin)throw Error(e.discovery?.message||K.resetHubUnavailable);ce(e.discovery.origin),await i()}).catch(e=>R(e.message)).finally(()=>de(!1))},children:(0,W.jsx)(`span`,{className:`visually-hidden`,children:K.resetHubUrl})})]}),(0,W.jsx)(`p`,{children:K.hubHttpsHint}),(0,W.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,W.jsx)(U.Button,{type:`submit`,size:`small`,disabled:G||ue,children:`Save Hub`}),ae&&r?.state!==`unconfigured`&&r?.state!==`disconnected`?(0,W.jsx)(U.Button,{type:`button`,size:`small`,variant:`subtle`,disabled:G||ue,onClick:()=>oe(!1),children:`Cancel`}):null]})]}):null]});return(0,W.jsxs)(rt,{source:w,children:[Qe.visible?(0,W.jsx)(cn,{...Qe}):null,Q&&Ot&&!e.pickAndPolish&&!e.improvementNotesDemo?(0,et.createPortal)((0,W.jsxs)(`div`,{className:`canvas-review-controls review-shell__comment-actions`,role:`group`,"aria-label":bt.heading,children:[(0,W.jsx)(vt,{bridgeReady:Te&&Tt,copy:bt,selectionBlocked:Et,selecting:Y!==null,onCancelSelection:Ft,onStartAreaSelection:()=>Pt(`area`),onStartElementSelection:()=>Pt(`element`)}),(0,W.jsx)(U.Tooltip,{text:Et?bt.selectionBlockedLabel:`${bt.heading} (${bt.sidebarShortcutLabel})`,type:`description`,children:(0,W.jsxs)(U.Button,{className:`canvas-comments-toggle review-shell__comments-toggle`,variant:`secondary`,size:`small`,"aria-label":`${bt.heading}, ${Ct}${wt?`, ${bt.unreadLabel}`:``}`,"aria-expanded":T,"aria-keyshortcuts":`Shift+C`,disabled:!gt||Et,onClick:zt,children:[(0,W.jsx)(tt,{children:Ct}),wt?(0,W.jsx)(`span`,{className:`canvas-comments-unread-badge review-shell__unread-badge`,"aria-hidden":`true`}):null]})})]}),Ot):null,k&&xt.length&&Te?(0,W.jsx)(`div`,{className:`canvas-marker-layer`,children:(0,W.jsx)(ct,{threads:xt,resolutions:ot,selectedThreadId:P,selectionBlocked:xe,focusSelectedMarker:!1,showAreaHighlightsOnlyWhenSelected:!0,copy:bt,onSelect:e=>F(e.root.id)})}):null,(0,W.jsxs)(it,{className:`canvas-hub-panel`,contentClassName:`canvas-hub-content`,title:`Replica Hub`,label:`Hub`,open:Dt,closeLabel:`Close Hub`,closeRef:He,onClose:_,children:[I?(0,W.jsx)(`p`,{role:`alert`,children:I}):null,ee?(0,W.jsx)(`p`,{role:`alert`,children:ee}):null,r?null:(0,W.jsx)(`p`,{children:`Checking Hub connection…`}),!ut&&!Xe&&r?.message?(0,W.jsx)(`p`,{role:`status`,children:r.message}):null,Xe?(0,W.jsxs)(`div`,{className:`canvas-hub-status`,children:[(0,W.jsx)(pe,{variant:`warning`,layout:`compact`,title:r?.message||X.hubUnavailable}),(0,W.jsx)(U.Button,{variant:`primary`,size:`small`,disabled:d,"aria-busy":d,leadingVisual:d?(0,W.jsx)(L,{size:16}):void 0,onClick:m||(()=>void i()),children:X.retry})]}):null,!ut&&!Xe&&u&&p&&m?(0,W.jsx)(Ae,{publication:u,busy:d,dirty:f,onPublish:p,onRetry:m}):null,ut?(0,W.jsxs)(`section`,{className:`canvas-hub-connection`,children:[(0,W.jsx)(`p`,{children:K.connectionBeforePublishing}),(0,W.jsx)(U.Button,{ref:c,variant:`primary`,onClick:o,disabled:l,children:l?K.connectionOpeningBrowser:K.connectToHub})]}):null,!ut&&(!ae&&(r?.discovery?.mismatch||[`invalid`,`unreachable`].includes(r?.discovery?.state||``))||r?.state===`unconfigured`)?(0,W.jsxs)(`div`,{className:`canvas-hub-settings`,children:[!ae&&r?.discovery?.mismatch?(0,W.jsx)(`p`,{role:`alert`,children:`The repository configuration differs from your selected Hub. Your connection has not changed. Disconnect Hub before selecting another URL.`}):null,!ae&&[`invalid`,`unreachable`].includes(r?.discovery?.state||``)?(0,W.jsx)(`p`,{role:`alert`,children:r?.discovery?.message}):null,r?.state===`unconfigured`?(0,W.jsx)(`p`,{children:`Enter your Hub URL to connect.`}):null]}):null,r?.state===`undiscovered`&&!u?(0,W.jsxs)(`p`,{children:[`Connected to `,r.repository,`. Hub has not discovered`,` `,r.branch||`a prototype branch`,`. Your repository connection is ready. Push a named branch to make its Builds and reviews available.`]}):null,Q?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`section`,{className:u&&u.kind!==`ready`&&p&&m?`canvas-hub-publication canvas-hub-publication--after-status`:`canvas-hub-publication`,"aria-label":`Prototype`,children:mt&&At?(0,W.jsxs)(`form`,{className:`canvas-hub-publication__form`,onSubmit:t=>{t.preventDefault(),$(`/api/hub/metadata`,e.token,{method:`PATCH`,body:JSON.stringify({name:fe,description:me,startPage:ge})}).then(async()=>{ye(!1),await i()}).catch(e=>R(e.message))},children:[(0,W.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,W.jsxs)(`label`,{className:`canvas-hub-publication__name-field`,children:[(0,W.jsx)(`span`,{className:`visually-hidden`,children:`Name`}),(0,W.jsx)(`input`,{required:!0,maxLength:255,value:fe,onChange:e=>q(e.target.value)})]}),(0,W.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),Vt,(0,W.jsxs)(`label`,{className:`canvas-hub-publication__description-field`,children:[(0,W.jsx)(`span`,{className:`visually-hidden`,children:`Description`}),(0,W.jsx)(`textarea`,{value:me,placeholder:`Add a description`,onChange:e=>he(e.target.value)})]}),(0,W.jsxs)(`label`,{className:`canvas-hub-publication__start-page-field`,children:[K.startPage,(0,W.jsx)(`input`,{value:ge,placeholder:`/`,"aria-describedby":`canvas-start-page-hint`,onChange:e=>_e(e.target.value)})]}),(0,W.jsx)(`p`,{id:`canvas-start-page-hint`,className:`canvas-hub-publication__hint`,children:K.startPageHint}),(0,W.jsxs)(`div`,{className:`canvas-hub-form-actions`,children:[(0,W.jsx)(U.Button,{type:`submit`,size:`small`,children:`Save metadata`}),(0,W.jsx)(U.Button,{type:`button`,size:`small`,variant:`subtle`,onClick:()=>ye(!1),children:`Cancel`})]})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`canvas-hub-publication__title`,children:[(0,W.jsx)(U.Heading,{as:`h3`,size:`subhead-large`,children:Q.name||r?.branch}),(0,W.jsx)(`span`,{className:`canvas-hub-publication__status`,children:Q.published?`Published`:Q.registered?`Registered`:`Not registered`})]}),Vt,Q.description?(0,W.jsx)(`p`,{className:`canvas-hub-publication__description`,children:Q.description}):null,(0,W.jsxs)(`p`,{className:`canvas-hub-publication__description canvas-hub-publication__start-page`,children:[K.startPage,`: `,(0,W.jsx)(`code`,{children:Q.startPage||`/`})]}),mt?(0,W.jsx)(U.Button,{size:`small`,variant:`subtle`,onClick:()=>{q(Q.name||``),he(Q.description||``),_e(Q.startPage||``),J(Ke),ye(!0)},children:K.editDetails}):null]})}),(0,W.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-build-title`,children:[(0,W.jsx)(U.Heading,{as:`h3`,size:`subhead-medium`,id:`canvas-hub-build-title`,children:K.latestBuild}),Q.build?(0,W.jsxs)(`div`,{className:`canvas-hub-build`,children:[(0,W.jsxs)(`div`,{className:`canvas-hub-build__identity`,children:[(0,W.jsx)(`a`,{href:Q.build.url,target:`_blank`,rel:`noopener noreferrer`,children:K.buildTitle(Q.build.number)}),(0,W.jsx)(`code`,{title:Q.build.commitSha,"aria-label":`${K.buildCommit} ${Q.build.commitSha}`,children:Q.build.commitSha.slice(0,7)})]}),(0,W.jsx)(`p`,{children:ft?(0,W.jsx)(`a`,{className:`canvas-hub-build__author`,href:ft,target:`_blank`,rel:`noopener noreferrer`,children:pt}):(0,W.jsx)(`span`,{children:pt})}),r?.commitSha&&r.commitSha!==Q.build.commitSha?(0,W.jsx)(`p`,{className:`canvas-hub-build__notice`,children:`Local checkout differs from this Build`}):null]}):(0,W.jsxs)(`p`,{children:[`No successful imported Build yet. Current Build: `,Q.buildState||`none`,`.`]}),Q.build&&r?.hubOrigin?(0,W.jsx)(`a`,{className:`canvas-hub-build__history`,href:new URL(`/repositories/${Q.repositoryId}/prototypes/${Q.id}/builds`,r.hubOrigin).href,target:`_blank`,rel:`noopener noreferrer`,children:K.showBuildHistory}):null]})]}):null,ut?null:(0,W.jsxs)(`section`,{className:`canvas-hub-section`,"aria-labelledby":`canvas-hub-origin-title`,children:[Ht,r?.hubOrigin&&[`connected`,`undiscovered`,`pairing`,`denied`,`unavailable`].includes(r.state)?(0,W.jsx)(`div`,{className:`canvas-hub-disconnect`,children:(0,W.jsx)(U.Button,{size:`small`,variant:`subtle`,onClick:()=>{V(``),$(`/api/hub/disconnect`,e.token,{method:`POST`,body:`{}`}).then(async()=>{ce(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),oe(!0),await i(),s?.()}).catch(e=>{V(K.disconnectFailed(r.hubOrigin||``,e.message)),ce(r.discovery?.mismatch&&r.discovery.origin||r.hubOrigin||``),oe(!0)})},children:`Disconnect Hub`})}):null]}),Q?.registered&&Q.build&&h?(0,W.jsx)(Fn,{preference:h,disabled:d}):null]}),Q?(0,W.jsx)(_t,{frame:{open:T,className:`canvas-comments-sidebar-shell`,contentClassName:`canvas-comments-sidebar-content`},threads:xt,currentBuildNumber:gt?.number||0,buildLinkOrigin:r?.hubOrigin,totalCount:xt.length,hasThreads:nt.length>0,filters:D,participants:at,resolutions:ot,selectedThreadId:P,selectionBlocked:Et,closeBlocked:xe,showPins:k,loading:te,loadFailed:re,notice:Pe||gt&&!Tt?(0,W.jsxs)(`div`,{className:`canvas-comments-live-notices`,children:[Pe?(0,W.jsx)(`p`,{className:`canvas-comments-live-status`,role:`status`,children:`Live updates paused; checking every 30 seconds.`}):null,gt&&!Tt?(0,W.jsxs)(`p`,{className:`canvas-comments-live-status`,children:[`New comments are available when the local checkout matches Build #`,gt.number,`.`]}):null]}):null,copy:bt,onClose:zt,onFiltersChange:O,onShowPinsChange:A,onRetry:()=>void Mt(),onSelect:e=>F(e.root.id)}):null,(0,W.jsx)(Nn,{selectionNotice:Me?Me===`area-too-small`?bt.areaTooSmallLabel:Me===`area-unavailable`?bt.areaUnavailableLabel:bt.selectionFailedLabel:null,rateLimitNotice:z&&!Dt?z:null,composer:Z&&kt?{anchorPoint:kt,bodyMaximumBytes:1e4,copy:bt,creating:Ie?.kind===`create`,onSubmit:Rt,onDiscard:It}:null,conversation:lt?{thread:lt,anchorPoint:Ce.get(lt.root.id)??null,bodyMaximumBytes:1e4,mutation:Ie,copy:bt,onClose:()=>F(null),onDraftStateChange:Se,onReply:e=>Lt(`${lt.root.id}/replies`,`POST`,{review_comment:{body:e}},{kind:`reply`,commentId:lt.root.id}),onEdit:(e,t)=>Lt(`${e}`,`PATCH`,{review_comment:{body:t}},{kind:`edit`,commentId:e}),onDelete:e=>Lt(`${e}`,`DELETE`,void 0,{kind:`delete`,commentId:e}),onResolve:()=>Lt(`${lt.root.id}/resolution`,`POST`,void 0,{kind:`resolve`,commentId:lt.root.id}),onReopen:()=>Lt(`${lt.root.id}/resolution`,`DELETE`,void 0,{kind:`reopen`,commentId:lt.root.id}),onAddReaction:(e,t)=>Lt(`${e}/reactions`,`POST`,{review_comment_reaction:{content:t,activity_version:lt.root.activityVersion}},{kind:`add-reaction`,commentId:e,content:t}),onRemoveReaction:(e,t)=>Lt(`${e}/reactions/${encodeURIComponent(t)}`,`DELETE`,{review_comment_reaction:{activity_version:lt.root.activityVersion}},{kind:`remove-reaction`,commentId:e,content:t}),onMarkRead:e=>Lt(`${lt.root.id}/read`,`POST`,{review_thread_read:{activity_version:e}}),onMarkUnread:()=>Lt(`${lt.root.id}/read`,`DELETE`,void 0,{kind:`mark-unread`,commentId:lt.root.id})}:null})]})}function zn(e,t,n){function r(e,t,n){return{kind:e,title:t,detail:n}}if(!e||!t)return n.kind===`unknown`?r(`retry`,Y.unavailable,n.detail):r(`checking`,Y.checking,Y.checkingDetail);if(!e.stats.branch)return r(`restricted`,Y.restricted,n.detail);if(t.repository&&t.repository!==e.stats.repository||t.branch&&t.branch!==e.stats.branch)return r(`retry`,Y.unavailable,Y.changedDetail);if(t.discovery?.state===`local`||e.stats.repository?.startsWith(`local/`))return r(`restricted`,Y.restricted,Y.local);if(t.registrationReason===`branch_not_reviewable`||e.stats.branch===t.discovery?.defaultBranch)return r(`restricted`,Y.restricted,X.registrationReasons.get(`branch_not_reviewable`).description);if([`disconnected`,`pairing`,`unconfigured`].includes(t.state))return r(`connect`,Y.connect,Y.connectDetail);if([`denied`,`unavailable`].includes(t.state))return r(`retry`,Y.unavailable,t.message||Y.unavailableDetail);if(t.repository!==e.stats.repository||t.branch!==e.stats.branch)return r(`retry`,Y.unavailable,Y.unavailableDetail);let i=t.prototype;if(t.state===`connected`&&i?.branch===e.stats.branch&&i.registered&&i.published&&i.build&&Number.isSafeInteger(i.build.number)&&i.build.number>0)return r(`ready`,Y.ready,Y.readyDetail);if(t.state===`connected`&&(!i||i.branch!==e.stats.branch||typeof i.published!=`boolean`||i.published))return r(`retry`,Y.unavailable,Y.unavailableDetail);let a=t.state===`connected`?i?.canEdit:t.canPublish;if(a===!1)return r(`restricted`,Y.restricted,Y.publishDenied);let o=e.stats.remoteBranch,s=t.state===`undiscovered`&&t.repositoryAuthorized===!0&&!i&&(!t.commitSha||t.commitSha===e.stats.commitSha)&&o?.repository===e.stats.repository&&o?.branch===e.stats.branch&&o?.commitSha===e.stats.commitSha&&(o?.state===`absent`||o?.state===`present`&&e.publishRequest?.commitSha===e.stats.commitSha&&([`requested`,`in_progress`].includes(e.publishRequest?.state??``)||e.publishRequest?.state===`idle`&&e.publishRequest.remoteState===`absent`))&&![`loading`,`unknown`,`detached`,`workflow_missing`].includes(n.kind),c=a===void 0&&s;if(a!==!0&&!c)return r(`retry`,Y.unavailable,Y.permissionUnknown);let l=t.registrationReason||i?.registrationReason;if(n.error&&(l!==`remote_branch_missing`||!s)){let e=[`successful_build_required`,`already_registered`].includes(l||``),t=[`write_access_required`,`repository_mismatch`,`branch_not_reviewable`,`remote_branch_missing`,`branch_authorship_required`].includes(l||``);return{...r(e?`progress`:t?`restricted`:`retry`,n.error.title,n.error.description),...e?{publication:{...n,action:`retry`,label:X.retry}}:{}}}if(n.kind===`detached`)return r(`restricted`,Y.restricted,n.detail);if(n.action===`retry`)return r(`retry`,Y.unavailable,n.detail);if(n.kind===`loading`)return r(`checking`,Y.checking,n.detail);let u=c?`${Y.publishDetail} ${Y.publishPermissionUnverified}`:Y.publishDetail,d=s&&l===`remote_branch_missing`?{...n,error:void 0}:n;return n.action===`publish`?{...r(`publish`,Y.publish,u),publication:d}:{...r(`progress`,Y.preparing,u),publication:d}}function Bn({open:e,onToggle:t,buttonRef:n}){return(0,W.jsx)(G,{icon:te,"aria-label":K.controls,description:K.controls,ref:n,size:`small`,variant:`default`,className:`canvas-controls-toggle`,"aria-expanded":e,onClick:t})}function Vn({toolbarRef:e,improvementControlsRef:t,config:n,onPublish:r,publishButtonRef:i,hubButtonRef:a,titleButtonRef:o,onBuildDetails:s,publishing:c,state:l,prototypeName:u,hubOpen:d,onHub:f,publication:p,onControls:m,controlsOpen:h,controlsButtonRef:g,onShare:_,shareButtonRef:y}){let b=l?.publishStatus??{state:`unavailable`,detail:K.statusUnavailable},x=u?.trim()||l?.stats.branch||l?.name||n.name,S=l?[x,l.stats.repository,l.stats.commitSha?.slice(0,7),l.stats.workingTree===`changed`?K.workingTreeChanged:K.workingTreeClean,l.stats.urlHost].filter(Boolean).join(` · `):x,C=c||(p?p.action===`none`:b.state===`requested`||b.state===`in_progress`||b.state===`published`),w=c||(p?p.kind===`requested`||p.kind===`queued`||p.kind===`building`||p.kind===`importing`||p.kind===`awaiting_build`||p.kind===`registration`:b.state===`requested`||b.state===`in_progress`),T=!w&&(p?p.kind===`ready`:b.state===`published`),E=(0,W.jsx)(U.Button,{type:`button`,ref:i,className:`canvas-publish-button`,variant:`secondary`,size:`small`,leadingVisual:w?(0,W.jsx)(L,{size:16}):Hn(b.state),disabled:C&&!T,"aria-busy":w,title:T?void 0:p?.detail||b.detail,onClick:C||T?void 0:r,children:p?.label||K.publishLabels[b.state]});return(0,W.jsxs)(`header`,{ref:e,className:`canvas-toolbar`,children:[(0,W.jsx)(U.Button,{type:`button`,className:`canvas-title`,ref:o,variant:`subtle`,size:`small`,title:S,disabled:!l,onClick:s,children:x}),(0,W.jsx)(`div`,{id:`canvas-review-controls`,className:`canvas-review-controls-slot`}),n.pickAndPolish||n.improvementNotesDemo?(0,W.jsx)(`div`,{ref:t,id:`canvas-improvement-controls`}):null,m?(0,W.jsx)(Bn,{buttonRef:g,open:h,onToggle:m}):null,f?(0,W.jsx)(U.Button,{type:`button`,ref:a,size:`small`,variant:`secondary`,className:`canvas-toolbar-compact-button`,leadingVisual:(0,W.jsx)(re,{size:16}),"aria-label":K.editDetails,title:K.editDetails,"aria-expanded":d,onClick:f,children:(0,W.jsx)(`span`,{className:`canvas-toolbar-button-label`,children:K.editDetails})}):null,(0,W.jsxs)(`div`,{className:`canvas-publish-share`,role:`group`,"aria-label":J.group,children:[T?(0,W.jsx)(U.Tooltip,{ref:i,text:X.alreadyPublished,type:`description`,children:E}):E,_?(0,W.jsx)(G,{ref:y,icon:v,size:`small`,"aria-label":J.title,description:J.title,onClick:_}):null]})]})}function Hn(e){return e===`published`?(0,W.jsx)(ae,{size:16}):e===`failed`||e===`in_progress`||e===`requested`?(0,W.jsx)(L,{size:16}):(0,W.jsx)(D,{size:16})}function Un(e,t,n){return{status:t?`pending`:e.status,url:n,error:t?``:e.error??``,controls:t?[]:e.scopes.flatMap(e=>e.declaration.controls.map(t=>Je(e,t)))}}var Wn={bridgeUnavailable:`The prototype bridge is not ready on this page.`,routeChanged:`The prototype route changed. Inspect the live canvas again.`,reloaded:`The prototype reloaded before confirming the click. Inspect the live canvas and retry.`,unconfirmed:`The prototype did not confirm the click. Check its bridge and retry.`,clickFailed:`The target could not be clicked.`,addressUnavailable:`The canvas address field is unavailable.`,unknownAction:`Unknown canvas action.`,replyRejected:`The live canvas rejected the action reply. Check its transport diagnostics.`,actionInterrupted:`The canvas changed before the action could run. Inspect the live canvas and retry.`,statusInterrupted:`The canvas changed while collecting Controls status. Inspect the live canvas and retry.`};function Gn(e){let{token:t,prototypeUrl:n,previewUrl:r,cancelClick:i}=e,a=(0,H.useRef)(e),o=(0,H.useRef)(null);(0,H.useLayoutEffect)(()=>{a.current=e}),(0,H.useEffect)(()=>{o.current??=crypto.randomUUID();let e={"X-Replica-Renderer-Id":o.current},s=!1,c=!1,l=new AbortController,u=new URL(r??n).origin;async function d(e){let t=a.current.frameRef.current,n=a.current.liveRoute;if(!t?.contentWindow||!n)throw Error(Wn.bridgeUnavailable);if(e.route.pathname!==n.pathname||e.route.search!==n.search||e.route.hash!==n.hash)throw Error(Wn.routeChanged);let r=crypto.randomUUID();return await new Promise((n,a)=>{function o(){window.clearTimeout(c),window.removeEventListener(`message`,l),i.current===s&&(i.current=null)}function s(){o(),a(Error(Wn.reloaded))}let c=window.setTimeout(()=>{o(),a(Error(Wn.unconfirmed))},2e3);function l(i){let s=i.data;i.source===t?.contentWindow&&i.origin===u&&s&&typeof s==`object`&&`type`in s&&s.type===`replica:canvas:click-result`&&`nonce`in s&&s.nonce===r&&(o(),`clicked`in s&&s.clicked===!0?n({clicked:!0,route:e.route}):a(Error(Wn.clickFailed)))}i.current=s,window.addEventListener(`message`,l),t.contentWindow.postMessage({type:`replica:canvas:click`,nonce:r,...e},u)})}async function f(e){let t=a.current.frameRef.current,r=crypto.randomUUID(),i=Date.now()+e,o=await new Promise((n,o)=>{function s(){window.clearTimeout(d),window.removeEventListener(`message`,p),t?.removeEventListener(`load`,m),l.signal.removeEventListener(`abort`,c)}function c(){s(),o(Error(Wn.statusInterrupted))}let d=window.setTimeout(()=>{if(s(),a.current.liveRoute)o(Error(Wn.bridgeUnavailable));else{let e=new URL(a.current.navigation.entries[a.current.navigation.index]);e.protocol=new URL(u).protocol,e.host=new URL(u).host,n({status:`pending`,url:e.href,error:``,controls:[]})}},e+1500),f=!1;function p(e){let i=e.data;e.source===t?.contentWindow&&t===a.current.frameRef.current&&e.origin===u&&i&&typeof i==`object`&&`type`in i&&(i.type===`replica:canvas:ready`&&!f&&(f=!0,m()),i.type===`replica:controls:status-result`&&`nonce`in i&&i.nonce===r&&`value`in i&&(s(),n(i.value)))}function m(){t===a.current.frameRef.current&&t?.contentWindow?.postMessage({type:`replica:controls:status`,nonce:r,timeoutMs:Math.max(0,i-Date.now())},u)}window.addEventListener(`message`,p),t?.addEventListener(`load`,m),l.signal.addEventListener(`abort`,c),m()});if(!o||typeof o!=`object`||!(`url`in o)||typeof o.url!=`string`||!(`status`in o)||typeof o.status!=`string`||!(`error`in o)||typeof o.error!=`string`||!(`controls`in o)||!Array.isArray(o.controls))throw Error(Wn.bridgeUnavailable);let s=new URL(o.url);if(s.origin!==u)throw Error(Wn.routeChanged);let c=new URL(n);s.protocol=c.protocol,s.host=c.host;let d=await p(i);return!d&&a.current.controlsConnection===void 0?{...o,url:s.href}:{...d?Un(d,d.loading,s.href):{status:`pending`,url:s.href,error:``,controls:[]},runtime:{status:o.status,error:o.error,controls:o.controls}}}function p(e){let t=a.current.controlsConnection;if(!t)return Promise.resolve(null);let n=t.getSnapshot,r=t.subscribe,i=n();return!i.loading||e<=Date.now()?Promise.resolve(i):new Promise(t=>{let i={};function a(e){window.clearTimeout(c),i.unsubscribe?.(),l.signal.removeEventListener(`abort`,s),t(e)}function o(){let e=n();e.loading||a(e)}function s(){a(null)}let c=window.setTimeout(()=>a(n()),e-Date.now());i.unsubscribe=r(o),l.signal.addEventListener(`abort`,s,{once:!0}),o()})}async function m(){if(!(s||c)){s=!0;try{let{command:r,prototypeUrl:i}=await $(`/api/agent/next`,t,{headers:{...e,"X-Replica-Prototype-Url":n}});if(!c&&i&&i!==n){window.location.reload();return}if(!r)return;let o;try{if(await $(`/api/agent/progress`,t,{method:`POST`,headers:e,body:JSON.stringify({id:r.id,stage:`handler started`})}),c)throw Error(Wn.actionInterrupted);let n;if(r.type===`inspect`){let{appearance:e,navigation:t,liveRoute:r,addressRef:i}=a.current,o=i.current?.value;if(o===void 0)throw Error(Wn.addressUnavailable);n={address:t.entries[t.index],addressDraft:o,appearance:e,canGoBack:t.index>0,canGoForward:t.indexvoid m(),300);return()=>{c=!0,l.abort(),window.clearInterval(h),i.current?.()}},[n,r,t,i])}function Kn(e,t,n){let r=t?.repository===e?.stats.repository&&t?.branch===e?.stats.branch,i=!e?.stats.branch&&!!e?.stats.branchError,a=i?void 0:t?.branch,o=!!(e&&!i&&(t?.repository&&t.repository!==e.stats.repository||t?.branch&&t.branch!==e.stats.branch||t?.commitSha&&t.commitSha!==e.stats.commitSha)),s=!!(n.kind===`ready`&&r&&t?.state===`connected`&&t.prototype?.published&&t.prototype.build?.commitSha===e?.stats.commitSha);return{state:e&&{...e,publishStatus:!s&&[`requested`,`in_progress`].includes(e.publishStatus?.state??``)||t?.state===`connected`&&!r?e.publishStatus:s&&t?.prototype?.build?{state:`published`,detail:K.hubBuildImported,versionCount:t.prototype.versionCount,lastUpdatedAt:t.prototype.build.publishedAt,run:{url:t.prototype.build.url,actor:t.prototype.build.author.login||t.prototype.build.author.name?{login:t.prototype.build.author.login||void 0,name:t.prototype.build.author.name||void 0,avatarUrl:t.prototype.build.author.avatarUrl||void 0}:null}}:{state:t?.state===`connected`?`not_published`:`unavailable`,detail:t?.state===`connected`?K.hubBuildMissing:K.hubPublicationUnavailable},stats:{...e.stats,branch:a||e.stats.branch,branchError:a&&a!==e.stats.branch?null:e.stats.branchError,repository:t?.repository||e.stats.repository,commitSha:e.stats.commitSha,comparison:o?{branch:null,source:null,behind:null,error:K.comparisonNeedsRefresh}:e.stats.comparison,publishedUrl:s?t?.prototype?.build?.url:void 0}},hubPublished:s,comparisonOutdated:o}}function qn(e,t){let n;function r(e,t,r,i=`none`){return{kind:e,detail:t,label:r,action:i,...n?{error:n}:{}}}if(!e)return r(`loading`,X.initial,X.checking);let{stats:i}=e,a=i.remoteBranch;if(!a||a.state===`loading`)return r(`loading`,X.checkingRemote,X.checking);if(!i.branch||a.state===`detached`)return r(`detached`,X.detached,X.retry,`retry`);if(a.repository!==i.repository||a.branch!==i.branch||a.commitSha!==i.commitSha)return r(`unknown`,X.changed,X.retry,`retry`);if(a.state===`unknown`)return r(`unknown`,X.unknown(a.error),X.retry,`retry`);let o=t?.state===`connected`?t.prototype:void 0,s=o?.build?.commitSha===i.commitSha&&o?.branch===i.branch,c=e.publishRequest,l=t?.state===`connected`&&t.repository===i.repository&&t.branch===i.branch&&(!t.commitSha||t.commitSha===i.commitSha)&&t.prototype?.branch===i.branch&&t.prototype.build?.commitSha===i.commitSha?t.prototype.build:null,u=!!(l&&(c?.commitSha!==i.commitSha||c.buildNumber===void 0||typeof c.buildNumber==`number`&&l.number>c.buildNumber)),d=u&&o?.registered&&o.published,f=t!==null&&t.repository===i.repository&&(!t.branch||t.branch===i.branch)&&(!t.commitSha||t.commitSha===i.commitSha);if(t&&f&&(t.state===`connected`||t.state===`undiscovered`)&&!o?.registered&&(!o||o.branch===i.branch)){let e=t.registrationReason||o?.registrationReason,r=i.branch===t.discovery?.defaultBranch;if(e||t.registrationError||o?.canRegister===!1||r){let i=e||(r?`branch_not_reviewable`:o?.canEdit===!1?`write_access_required`:o?.canRegister===!1&&a.state===`absent`?`remote_branch_missing`:void 0);n=i&&X.registrationReasons.get(i)||{title:X.registrationErrorTitle,description:t.registrationError||X.registrationDenied}}}if(c?.state===`requested`&&(!c.commitSha||c.commitSha===i.commitSha)&&(a.state===`absent`||a.remoteSha!==i.commitSha)&&!u){let e=Date.now()-Date.parse(c.requestedAt||``);if(Number.isFinite(e)&&e<6e5)return r(`requested`,X.pending,X.awaitingCopilot)}if(!t)return r(`loading`,X.checkingHub,X.checking);if(t.state===`disconnected`||t.state===`pairing`||t.state===`unconfigured`)return r(`disconnected`,t.message||X.disconnected,X.connect);if(t.state===`denied`||t.state===`unavailable`)return{...r(`unknown`,t.message||X.hubUnavailable,X.retry,`retry`),error:{title:X.hubUnavailableTitle,description:t.message||X.hubUnavailable}};if(!f)return r(`unknown`,X.staleHub,X.retry,`retry`);if(!i.replicaWorkflowExists)return r(`workflow_missing`,X.workflowMissing,X.retry,`retry`);if(c?.state===`failed`&&!d&&(!c.commitSha||c.commitSha===i.commitSha))return r(`failed`,c.error||X.dispatchFailed,X.retryPublish,`publish`);if(a.state===`absent`)return r(`unpublished`,X.absent,X.publishBranch,`publish`);if(a.remoteSha!==i.commitSha)return r(`needs_push`,X.needsPush,X.publishChanges,`publish`);if(s){if(!o.registered)return r(`registration`,t.registrationError||(o.canEdit&&o.canRegister?X.needsRegistration:X.registrationDenied),t.registrationError?X.registrationFailed:X.registration);if(o.published&&u)return r(`ready`,X.ready,X.published)}if(o?.currentBuild?.commitSha===i.commitSha&&o.branch===i.branch&&o.currentBuild.state===`failed`)return r(`failed`,X.importFailed,X.retryPublish,`publish`);let p=i.workflow;if(!p||p.state===`unavailable`)return r(`unknown`,p?.detail||X.workflowUnavailable,X.retry,`retry`);let m=p.run;if(m&&(m.headSha!==i.commitSha||m.headBranch!==i.branch))return r(`unknown`,X.staleWorkflow,X.retry,`retry`);if(c?.commitSha===i.commitSha&&c.workflowRunId!=null&&m?.databaseId===c.workflowRunId&&!u)return r(`awaiting_build`,X.noBuild,X.awaitingBuild);let h;if(p.state===`in_progress`&&m){let e=[`queued`,`waiting`,`pending`,`requested`].includes(m.status||``);h=r(e?`queued`:`building`,e?X.workflowQueued:X.workflowBuilding,e?X.queued:X.building)}else h=p.state===`failed`&&m?r(`failed`,X.workflowFailed(m.conclusion),X.retryPublish,`publish`):p.state===`succeeded`&&m?r(`importing`,X.importing,X.awaitingHub):r(`awaiting_build`,X.noBuild,X.awaitingBuild);return m?.url?.startsWith(`https://github.com/`)&&(h.runUrl=m.url),h}function Jn({token:e,state:t,hubStatus:n,error:r,setError:i,refresh:a,refreshHub:o,preferenceSaving:s=!1}){let[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),m=(0,H.useRef)(!1),[h,g]=(0,H.useState)(null),[_,v]=(0,H.useState)(``),[y,b]=(0,H.useState)(!1),x=!t&&r?{kind:`unknown`,action:`retry`,label:X.retry,detail:r}:qn(t,n),S=`${t?.stats.repository}/${t?.stats.branch}/${t?.stats.commitSha}`,C=f?.identity===S&&x.action===`publish`?{...x,kind:`failed`,detail:f.message,label:X.retryPublish}:x.kind===`ready`&&t?.stats.workingTree===`changed`?{...x,kind:`needs_push`,action:`publish`,label:X.publishChanges,detail:X.localChanges}:x,w=Kn(t,n,x);(0,H.useEffect)(()=>{w.comparisonOutdated&&a(!0)},[w.comparisonOutdated,n?.branch,n?.commitSha,n?.repository,a]);async function T(){if(!y){b(!0);try{await Promise.all([a(!0),o()])}finally{b(!1)}}}async function E(){s||(C.action===`retry`?await T():C.action===`none`||m.current||h||await D())}async function D(){if(!(s||m.current)){m.current=!0,d(!0),i(``),v(``);try{let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});t.workingTree===`unavailable`||t.workingTree===`changed`&&!t.remember?g({preparation:t}):(g(null),await O(t,t.workingTree===`changed`?`commit-changes`:`committed-only`))}catch(e){let t=e instanceof Error?e.message:String(e);i(t),v(t)}finally{m.current=!1,d(!1)}}}async function O(r,s,c){if(s===`committed-only`&&n?.state===`connected`&&n.repository===r.target.repository&&n.branch===r.target.branch&&n.prototype?.registered&&n.prototype.published&&n.prototype.build?.commitSha===r.target.commitSha&&t?.stats.remoteBranch?.state===`present`&&t.stats.remoteBranch.remoteSha===r.target.commitSha)g(null);else{p(null),v(``),i(``);try{let t=await $(`/api/publish`,e,{method:`POST`,body:JSON.stringify({target:r.target,workingTree:r.workingTree,mode:s,remember:c})});g(null),l(t.message),await o(),await a(!1)}catch(e){let t=e instanceof Error?e.message:String(e);p({message:t,identity:S}),i(t),v(t)}}}async function k(e,t){if(!(s||!h||m.current)){if(h.preparation.workingTree===`unavailable`&&e!==`committed-only`)v(q.checkFailed);else{m.current=!0,d(!0);try{await O(h.preparation,e,t)}finally{m.current=!1,d(!1)}}}}return{publication:C,presentedState:w.state,busy:u||y||s,notice:c,publishDialog:h,publishDialogError:_,closePublishDialog:()=>g(null),choosePublish:k,retryPublishCheck:D,publish:E,retry:T}}var Yn=`replica:controls`;function Xn(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;try{let n=JSON.stringify(e);if(!(typeof n==`string`&&new Blob([n]).size<=512e3&&Object.keys(e).every(e=>[`protocol`,`version`,`epoch`,`requestId`,`type`,`sequence`,`state`,`error`,`command`,`controlQuery`,`fromFrameUrl`].includes(e))&&(t.error===void 0||typeof t.error==`string`&&t.error.length<=1e3)&&(t.controlQuery===void 0||[`hello`,`snapshot`,`reply`].includes(t.type)&&typeof t.controlQuery==`string`&&new Blob([t.controlQuery]).size<=8192)&&(t.fromFrameUrl===void 0||t.type===`hello`&&typeof t.fromFrameUrl==`boolean`)&&t.protocol===`replica:controls`&&t.version===1&&typeof t.epoch==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.epoch)&&typeof t.requestId==`string`&&/^[a-zA-Z0-9-]{1,100}$/.test(t.requestId)&&[`hello`,`snapshot`,`command`,`reply`].includes(t.type)))return!1;if(t.type!==`command`)return t.command===void 0;let r=t.command;if(!r||typeof r!=`object`||Array.isArray(r))return!1;if(r.operation===`url`)return Object.keys(r).every(e=>[`operation`,`query`,`scope`].includes(e))&&(r.scope===void 0||typeof r.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope))&&typeof r.query==`string`&&new Blob([r.query]).size<=8192&&[...new URLSearchParams(r.query).keys()].every(e=>/^rc\.[a-zA-Z][a-zA-Z0-9_-]{0,63}\.[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e));if(r.operation===`reset-all`)return Object.keys(r).every(e=>[`operation`,`contexts`].includes(e))&&Array.isArray(r.contexts)&&r.contexts.length<=100&&new Set(r.contexts.map(e=>e?.scope)).size===r.contexts.length&&r.contexts.every(e=>typeof e==`object`&&!!e&&Object.keys(e).length===3&&typeof e.scope==`string`&&/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(e.scope)&&typeof e.fingerprint==`string`&&Number.isSafeInteger(e.revision)&&e.revision>=0);let i=[`operation`,`scope`,`fingerprint`,`revision`];return typeof r.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.scope)||typeof r.fingerprint!=`string`||!Number.isSafeInteger(r.revision)||r.revision===void 0||r.revision<0?!1:r.operation===`restore`?Object.keys(r).every(e=>[...i,`values`].includes(e))&&Se(r.values):r.operation===`reset`?Object.keys(r).every(e=>i.includes(e)):r.operation!==`action`&&r.operation!==`update`||typeof r.id!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(r.id)?!1:Object.keys(r).every(e=>[...i,`id`,...r.operation===`update`?[`value`]:[]].includes(e))&&(r.operation===`action`||Se({[r.id]:r.value}))}catch{return!1}}function Zn(e){return Array.isArray(e)&&e.length<=100&&e.every(e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&`scope`in e&&typeof e.scope==`string`&&e.scope.length>0&&e.scope.length<=64&&`error`in e&&typeof e.error==`string`&&e.error.length>0&&e.error.length<=500)}function Qn(e){if(!e||typeof e!=`object`)return!1;let t=e;if(typeof t.runtimeAvailable!=`boolean`||t.reconnectRequired!==void 0&&typeof t.reconnectRequired!=`boolean`||t.status===`ready`&&(!t.runtimeAvailable||!t.scopes?.length)||t.error!==void 0&&(typeof t.error!=`string`||t.error.length>1e3)||t.scopeErrors!==void 0&&!Zn(t.scopeErrors)||![`ready`,`no-controls`,`missing-runtime`,`unsupported-runtime`,`invalid-config`].includes(t.status)||!Array.isArray(t.scopes)||t.scopes.length>100||t.status!==`ready`&&t.scopes.length>0)return!1;try{let e=new Set;for(let n of t.scopes){if(Ue(n.declaration),e.has(n.declaration.scope)||(e.add(n.declaration.scope),n.fingerprint!==JSON.stringify(n.declaration)||!Number.isSafeInteger(n.snapshot.revision)||n.snapshot.revision<0))return!1;let t=n.snapshot;if(!t.values||!t.visible||!t.groups||!t.actions)return!1;function r(e,t){return typeof e==`object`&&!Array.isArray(e)&&Object.keys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}if(!r(t.values,n.declaration.controls.filter(e=>e.type!==`button`).map(e=>e.id))||!r(t.visible,n.declaration.controls.map(e=>e.id))||!r(t.groups,(n.declaration.groups??[]).map(e=>e.id))||!r(t.actions,n.declaration.controls.filter(e=>e.type===`button`).map(e=>e.id))||Object.values(t.groups).some(e=>typeof e!=`boolean`))return!1;if(t.bindings!==void 0){if(!t.bindings||typeof t.bindings!=`object`||Array.isArray(t.bindings))return!1;for(let[e,r]of Object.entries(t.bindings))if(!n.declaration.controls.some(t=>t.id===e)||!r||typeof r.error!=`string`||r.error.length>500||typeof r.busy!=`boolean`||r.available!==void 0&&typeof r.available!=`boolean`)return!1}for(let e of n.declaration.controls){if(typeof t.visible[e.id]!=`boolean`)return!1;if(e.type===`button`){let n=t.actions[e.id];if(!n||typeof n.available!=`boolean`||typeof n.busy!=`boolean`)return!1}else if(ze(e,t.values[e.id]))return!1}}return!0}catch{return!1}}function $n(){return{runtimeAvailable:!1,status:`missing-runtime`,scopes:[],scopeErrors:[],loading:!0,notice:``,error:``,storageError:``,resetting:!1}}var er=class{frame;origin;api;surface;epoch=``;sequence=-1;state=$n();listeners=new Set;pending=new Map;saved;storageReady=!1;restored=new Set;preparing=new Set;persisted=new Map;cachedScopes=new Map;retryState;resetForIdentity=!1;fromFrameUrl=!1;requests=new AbortController;poll;deadline;saveQueue=Promise.resolve();editQueue=Promise.resolve();stopped=!0;constructor(e,t,n,r=`canvas`){this.frame=e,this.origin=t,this.api=n,this.surface=r}getSnapshot=()=>this.state;getControlValues=()=>{let e=structuredClone(this.saved?.scopes??{}),t=new Map(this.cachedScopes);for(let e of this.state.scopes)t.set(e.declaration.scope,e);for(let[n,r]of t)e[n]=Xe(r);return e};subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});publish(e){this.state={...this.state,...e},this.state.hasResettableValues=Object.values(this.getControlValues()).some(e=>Object.keys(e).length>0);for(let e of[...this.listeners])e()}hasBindingError(e,t){return this.state.scopes.some(n=>(!e||n.declaration.scope===e)&&Object.entries(n.snapshot.bindings??{}).some(([e,n])=>(!t||e===t)&&!!n.error))}checkSaved(e){let t=e,n=/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;if(!t||typeof t!=`object`||typeof t.identity!=`string`||!t.identity||t.identity.length>128||!t.scopes||typeof t.scopes!=`object`||Array.isArray(t.scopes)||t.storageError!==void 0&&(typeof t.storageError!=`string`||t.storageError.length>1e3)||t.notice!==void 0&&(typeof t.notice!=`string`||t.notice.length>1e3)||new Blob([JSON.stringify(t)]).size>27e4)throw Error(`Invalid controls storage response.`);for(let[e,r]of Object.entries(t.scopes)){if(!n.test(e)||!r||typeof r!=`object`||Array.isArray(r))throw Error(`Invalid controls storage scope.`);for(let[e,t]of Object.entries(r))if(!n.test(e)||!(typeof t==`string`||typeof t==`boolean`||typeof t==`number`&&Number.isFinite(t)||Array.isArray(t)&&t.length<=100&&t.every(e=>typeof e==`string`)))throw Error(`Invalid saved control value.`)}}start=e=>{this.fromFrameUrl=e?.type===`load`&&this.sequence>=0;let t=[...this.pending.values()].some(e=>e.action);this.stop(),this.requests=new AbortController,this.stopped=!1,this.epoch=crypto.randomUUID(),this.sequence=-1,this.saved=void 0,this.storageReady=!1,this.restored.clear(),this.preparing.clear(),this.persisted.clear(),this.editQueue=Promise.resolve(),this.cachedScopes.clear(),this.retryState=void 0,this.resetForIdentity=!1,this.state=$n(),t&&(this.state.notice=`The preview reconnected during an action. Its outcome is unknown; it was not replayed.`),this.publish({});let n=this.epoch;window.addEventListener(`message`,this.receive),this.frame.addEventListener(`load`,this.start);let r=()=>{this.storageReady&&(this.surface===`canvas`&&this.frame.contentWindow?.postMessage({type:`replica:canvas:request-ready`,nonce:n},this.origin),this.send(`hello`).catch(()=>{}))};r(),this.poll=setInterval(()=>{this.state.status===`missing-runtime`&&r()},1e3),this.deadline=setTimeout(()=>{this.state.loading&&this.publish({loading:!1,error:this.surface===`build`?`Build Controls did not connect. Reload the preview or check its definitions.`:K.controlsLocalConnectionFailed})},6e3),this.api().then(e=>{if(!(this.epoch!==n||this.stopped)){if(this.checkSaved(e),this.saved=e,this.retryState?.identity===e.identity)for(let[e,t]of this.retryState.scopes)this.restored.add(`${e}:${t.fingerprint}`),this.cachedScopes.set(e,t);else this.retryState?.identity&&(this.resetForIdentity=!0,this.publish({notice:`The checkout identity changed. Controls will use this branch's saved values or defaults.`}));this.retryState=void 0,this.storageReady=!0,this.publish({storageError:e.storageError||``,notice:e.notice||this.state.notice}),this.prepare(this.state),r()}}).catch(e=>{this.epoch!==n||this.stopped||(this.storageReady=!0,this.publish({storageError:this.surface===`build`?e instanceof Error?e.message:`Control settings could not be read from the URL.`:K.controlsLocalStorageFailed}),this.prepare(this.state),r())})};retry=()=>{let e={identity:this.saved?.identity,scopes:new Map(this.cachedScopes)};this.start(),this.retryState=e};stop=()=>{this.stopped=!0,this.requests.abort(),clearInterval(this.poll),clearTimeout(this.deadline),window.removeEventListener(`message`,this.receive),this.frame.removeEventListener(`load`,this.start);for(let e of this.pending.values())clearTimeout(e.timer),e.reject(Error(`The preview navigated. The command outcome is unknown; it will not be replayed.`));this.pending.clear()};receive=e=>{if(this.stopped||e.source!==this.frame.contentWindow||e.origin!==this.origin||!Xn(e.data))return;let t=e.data;if(t.epoch!==this.epoch||!Qn(t.state)||!Number.isSafeInteger(t.sequence)||(t.sequence??-1)<0||t.type!==`snapshot`&&t.type!==`reply`)return;let n=this.pending.get(t.requestId);if(t.type!==`reply`||n){if((t.sequence??-1)>this.sequence){if(t.type===`snapshot`&&t.controlQuery!==void 0&&this.saved){let e=Ee(t.controlQuery),n=this.saved.identity,r=this.epoch;this.stop();let i=new AbortController;this.requests=i,this.publish({loading:!0}),this.api({method:`POST`,signal:i.signal,body:JSON.stringify({identity:n,replace:!0,scopes:e.scopes})}).then(()=>{this.epoch!==r||i.signal.aborted||(this.start(),e.notice&&this.publish({notice:e.notice}))}).catch(e=>{this.epoch!==r||i.signal.aborted||this.publish({loading:!1,storageError:e instanceof Error?e.message:`Controls history could not be restored.`})});return}if(t.controlQuery!==void 0&&this.saved){let e=this.epoch,n=this.requests,r=Ee(t.controlQuery);this.saved.scopes=r.scopes,this.restored.clear(),this.persisted.clear(),this.cachedScopes.clear(),this.publish({notice:r.notice,loading:!0}),this.api({method:`POST`,signal:n.signal,body:JSON.stringify({identity:this.saved.identity,replace:!0,scopes:r.scopes})}).catch(t=>{this.epoch!==e||this.stopped||n.signal.aborted||this.publish({storageError:t instanceof Error?t.message:`Controls history could not be restored.`})})}this.sequence=t.sequence;let e=t.state.status;this.publish({...t.state,scopeErrors:t.state.scopeErrors??[],reconnectRequired:t.state.reconnectRequired===!0,status:e,error:t.state.error||(this.state.status===`missing-runtime`&&t.state.status!==`missing-runtime`?``:this.state.error),loading:!this.storageReady||this.state.resetting||this.preparing.size>0||this.state.loading&&e===`missing-runtime`}),this.prepare(this.state)}n&&(this.pending.delete(t.requestId),clearTimeout(n.timer),t.error?n.reject(Error(t.error)):n.resolve(this.state))}};send(e,t){let n=crypto.randomUUID(),r={protocol:Yn,version:1,epoch:this.epoch,requestId:n,type:e,...t?{command:t}:{},...e===`hello`?{controlQuery:Te(this.saved?.scopes??{}),fromFrameUrl:this.fromFrameUrl}:{}};return Xn(r)?new Promise((i,a)=>{let o=setTimeout(()=>{this.pending.delete(n),a(Error(`The command timed out. Its outcome is unknown; it will not be retried automatically.`))},e===`hello`?1200:3e4);this.pending.set(n,{resolve:i,reject:a,timer:o,action:t?.operation===`action`}),this.frame.contentWindow?.postMessage(r,this.origin)}):Promise.reject(Error(`The controls command is invalid or exceeds the size limit.`))}async prepare(e){if(!this.saved&&!this.state.storageError||this.state.resetting||e.reconnectRequired)return;let t=this.epoch;if(this.resetForIdentity&&(e.status===`ready`||e.status===`no-controls`)){this.resetForIdentity=!1,this.publish({loading:!0,resetting:!0});try{await this.send(`command`,{operation:`reset-all`,contexts:e.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch{this.epoch===t&&this.publish({error:`The checkout changed, but runtime defaults could not be restored. Reload the preview before saving.`,storageError:`Saving is paused until the new checkout's runtime reconnects.`,loading:!1});return}finally{this.epoch===t&&this.publish({resetting:!1})}return this.epoch!==t||this.stopped?void 0:this.prepare(this.state)}for(let n of e.scopes){let e=n.declaration.scope,r=`${e}:${n.fingerprint}`;if(!this.preparing.has(r)){if(!this.restored.has(r)){this.preparing.add(r),this.publish({loading:!0});try{let i=this.saved?.scopes&&Object.hasOwn(this.saved.scopes,e)?this.saved.scopes[e]:{},a=Object.fromEntries(n.declaration.controls.filter(e=>e.type!==`button`).map(e=>[e.id,structuredClone(e.default)])),o=!1;for(let[e,t]of Object.entries(i)){let r=n.declaration.controls.find(t=>t.id===e);!r||ze(r,t)?o=!0:a[e]=t}if(Object.keys(a).length&&await this.send(`command`,{operation:`restore`,scope:e,fingerprint:n.fingerprint,revision:this.state.scopes.find(e=>e.fingerprint===n.fingerprint)?.snapshot.revision,values:a}),this.stopped||this.epoch!==t)return;this.restored.add(r),o&&this.publish({notice:this.surface===`build`?`Some URL control settings no longer match this page. Defaults were used.`:`Some saved controls no longer match this declaration and were discarded.`})}catch(n){if(this.epoch!==t||this.stopped)return;this.hasBindingError(e)||this.publish({error:n instanceof Error?n.message:`Saved controls could not be restored.`}),this.restored.add(r)}finally{this.epoch===t&&this.preparing.delete(r)}}if(this.epoch===t&&!this.stopped){let t=this.state.scopes.find(t=>t.declaration.scope===e);t&&(this.cachedScopes.set(e,t),this.persist(t))}}}this.epoch===t&&!this.stopped&&this.state.status!==`missing-runtime`&&this.publish({loading:this.preparing.size>0})}persist(e){if(!this.saved||this.state.storageError)return;let t=Xe(e),n=JSON.stringify(t);if(this.persisted.get(e.declaration.scope)===n)return;this.persisted.set(e.declaration.scope,n);let r=this.saved.identity,i=this.epoch,a=this.requests.signal;this.saveQueue=this.saveQueue.catch(()=>{}).then(async()=>{if(!(this.epoch!==i||this.stopped))try{if(await this.api({method:`POST`,signal:a,body:JSON.stringify({identity:r,scope:e.declaration.scope,values:t})}),this.epoch===i&&!this.stopped){let t=await this.api();if(this.checkSaved(t),this.epoch!==i||this.stopped)return;this.saved=t,await this.send(`command`,{operation:`url`,scope:e.declaration.scope,query:Te(t.scopes)})}}catch(e){this.epoch===i&&!this.stopped&&this.publish({storageError:this.surface===`build`&&e instanceof Error?`${e.message} Changes remain in memory and are not in the URL.`:`Controls could not be saved. Changes remain in memory; use Retry to reconnect storage.`})}})}async command(e,t,n,r){if(this.state.loading||this.state.resetting||this.stopped)return;let i=this.epoch,a=this.state.scopes.find(e=>e.declaration.scope===t);if(!a){this.publish({error:`This controls scope is no longer active.`});return}let o=()=>this.applyCommand(e,t,a.fingerprint,i,n,r);if(e!==`update`)return o();let s=this.editQueue.catch(()=>{}).then(o);return this.editQueue=s.then(()=>{}),s}async applyCommand(e,t,n,r,i,a){if(this.epoch!==r||this.stopped||this.state.resetting)return;let o=this.state.scopes.find(e=>e.declaration.scope===t);if(!o||o.fingerprint!==n)this.publish({error:`The controls scope or declaration changed. The command was not applied.`});else{this.publish({error:``});try{if(this.state.reconnectRequired)throw Error(`Reconnect controls before sending more commands.`);if(e===`update`||e===`action`){let t=o.declaration.controls.find(e=>e.id===i);if(!t||!o.snapshot.visible[t.id])throw Error(`This control is unknown or hidden.`);if(e===`update`){let e=ze(t,a);if(e)throw Error(`Control "${t.id}": ${e}`)}else if(t.type!==`button`||!o.snapshot.actions[t.id]?.available||o.snapshot.actions[t.id]?.busy)throw Error(`This action is unavailable or busy.`)}let n=await this.send(`command`,{operation:e,scope:t,fingerprint:o.fingerprint,revision:o.snapshot.revision,...i?{id:i}:{},...e===`update`?{value:a}:{}});if(e===`update`&&i)return{value:n.scopes.find(e=>e.declaration.scope===t)?.snapshot.values[i]}}catch(e){!this.stopped&&this.epoch===r&&!this.hasBindingError(t,i)&&this.publish({error:e instanceof Error?e.message:`Controls command failed.`})}}}async resetAll(){if(this.state.resetting||this.stopped)return;let e=this.epoch;this.publish({resetting:!0});try{let t=``;await this.editQueue.catch(()=>{});let n=this.state.runtimeAvailable&&(this.state.status===`ready`||this.state.status===`no-controls`);if(n)try{await this.send(`command`,{operation:`reset-all`,contexts:this.state.scopes.map(e=>({scope:e.declaration.scope,fingerprint:e.fingerprint,revision:e.snapshot.revision}))})}catch(e){t=e instanceof Error?e.message:`Some app defaults could not be restored.`}if(this.epoch!==e||this.stopped)return;if(!this.saved){let e=await this.api();this.checkSaved(e),this.saved=e}await this.saveQueue.catch(()=>{}),await this.api({method:`POST`,signal:this.requests.signal,body:JSON.stringify({identity:this.saved.identity,reset:!0})}),this.saved.scopes={},await this.send(`command`,{operation:`url`,query:``}),this.cachedScopes.clear(),this.persisted.clear(),this.publish({storageError:``,error:this.hasBindingError()?``:t,notice:n?``:`Saved controls were cleared. Runtime defaults could not be restored until the preview reconnects.`})}catch(t){this.epoch===e&&this.publish({storageError:t instanceof Error?t.message:`Reset could not be saved.`})}finally{this.epoch===e&&this.publish({resetting:!1,loading:!1})}}};function tr(e,t=()=>window.location.href,n=e=>{window.history.replaceState(window.history.state,``,e),window.dispatchEvent(new Event(Ce))}){return r=>Promise.resolve().then(()=>{r?.signal?.throwIfAborted();let i=Ee(new URL(t()).search);if(!r)return{identity:e,...i};if(r.method!==`POST`||typeof r.body!=`string`)throw Error(`Invalid URL controls request.`);let a=JSON.parse(r.body);if(!a||typeof a!=`object`||!(`identity`in a)||a.identity!==e)throw Error(`The controls URL identity changed.`);let o=i.scopes;if(`reset`in a&&a.reset===!0)o={};else if(`replace`in a&&a.replace===!0&&`scopes`in a){if(!a.scopes||typeof a.scopes!=`object`||Array.isArray(a.scopes))throw Error(`Invalid controls history settings.`);let e={};for(let[t,n]of Object.entries(a.scopes)){if(!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(t)||!Se(n))throw Error(`Invalid controls history settings.`);e[t]=n}o=Ee(Te(e)).scopes}else{if(!(`scope`in a)||typeof a.scope!=`string`||!/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/.test(a.scope)||!(`values`in a)||!Se(a.values))throw Error(`Invalid URL control settings.`);o={...o,[a.scope]:a.values}}let s=De(t(),Te(o));s!==t()&&n(s)})}function nr({frameRef:e,prototypeUrl:t,previewUrl:n,address:r,replaceAddress:i}){let[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(null),l=(0,H.useRef)({address:r,replaceAddress:i});return(0,H.useLayoutEffect)(()=>{l.current={address:r,replaceAddress:i}},[r,i]),(0,H.useEffect)(()=>{if(!e.current)return;let r=new er(e.current,new URL(n??t).origin,tr(`prototype:${new URL(t).origin}`,()=>l.current.address,e=>{l.current.address=e,l.current.replaceAddress(e)}));o(r);let i=r.subscribe(()=>c(r.getSnapshot()));return r.start(),()=>{i(),r.stop()}},[t,n,e]),{connection:a,state:s}}function rr({token:e,status:t,onStatusChange:n,onSelectHub:r}){let[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),m=(0,H.useRef)(!1),h=(0,H.useRef)(!1),g=t?.state===`connected`||t?.state===`undiscovered`,_=t?.state===`disconnected`||t?.state===`pairing`||t?.state===`unconfigured`,v=g?null:t?.pairing||(f?.repository===t?.repository&&f?.hubOrigin===t?.hubOrigin?f?.pairing:null),y=v?.verificationUrl;(0,H.useEffect)(()=>{let e=window.setTimeout(()=>{g?(a(!1),p(null),l(``)):_&&t?.repository&&!m.current&&(m.current=!0,a(!0))},0);return()=>window.clearTimeout(e)},[g,_,t?.repository]),(0,H.useEffect)(()=>{if(!y||u)return;let t=!1,r=!1;async function i(){if(!r){r=!0;try{let r=await $(`/api/hub/poll`,e,{method:`POST`,body:`{}`});if(t)return;r.status!==`pending`&&(p(null),r.status!==`approved`&&l(K.connectionApprovalExpired),await n())}catch(e){t||(l(e instanceof Error?e.message:String(e)),d(!0))}finally{r=!1}}}let a=window.setInterval(()=>void i(),3e3);return()=>{t=!0,window.clearInterval(a)}},[y,u,e,n,t?.repository,t?.hubOrigin]);async function b(i){if(m.current=!0,!h.current){if(!t?.repository)l(K.connectionRepositoryRequired);else if(!t.hubOrigin&&!i)l(K.connectionHubRequired);else{h.current=!0,s(!0),l(``),d(!1);try{!t.hubOrigin&&i&&await r(i);let a=await $(`/api/hub/connect`,e,{method:`POST`,body:`{}`});p({repository:t.repository,hubOrigin:new URL(a.verificationUrl).origin,pairing:a}),a.browserError&&l(K.connectionBrowserFailed(a.browserError)),await n()}catch(e){l(e instanceof Error?e.message:String(e))}finally{h.current=!1,s(!1)}}}}function x(){a(!0),t?.hubOrigin&&b()}return{open:i,close:()=>a(!1),show:()=>a(!0),showAndConnect:x,connect:b,connecting:o,error:c,pairing:v}}function ir({token:e,onStatus:t,onError:n}){let[r,i]=(0,H.useState)(null),a=(0,H.useRef)(0),o=(0,H.useRef)(0),s=(0,H.useRef)(!1),c=(0,H.useCallback)(async(r,c=!1)=>{if(s.current||c&&o.current>0)return;o.current+=1;let l=++a.current;try{let o=r===`open`||r===`interaction`,c=await $(o?r===`open`?`/api/hub/open`:`/api/hub/activity`:`/api/hub/status`,e,o?{method:`POST`,body:`{}`}:{});if(l!==a.current||s.current)return;i(c);let u=c.prototype?.startPageImportError||c.localStartPageError;u&&n(u),t(c)}catch(e){if(l!==a.current||s.current)return;let t=e instanceof Error?e.message:String(e);i(e=>({state:`unavailable`,repository:e?.repository,branch:e?.branch,hubOrigin:e?.hubOrigin,message:K.hubStatusUnavailable(t)})),n(t)}finally{--o.current}},[e,t,n]),l=(0,H.useCallback)(async t=>{s.current=!0,a.current+=1,i(null);try{await $(`/api/hub/origin`,e,{method:`POST`,body:JSON.stringify({origin:t})})}finally{s.current=!1,await c()}},[e,c]);(0,H.useEffect)(()=>{let e=window.setTimeout(()=>void c(`open`),0),t=window.setInterval(()=>void c(void 0,!0),15e3);function n(){c(`interaction`)}return window.addEventListener(`focus`,n),()=>{a.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]);async function u(){let t=await $(`/api/hub/discovery`,e,{method:`POST`,body:`{}`});if(t.discovery?.state!==`valid`||!t.discovery.origin)throw Error(t.discovery?.message||K.resetHubUnavailable);return await c(),t.discovery.origin}return{status:r,refresh:c,select:l,reset:u}}function ar({prototypeUrl:e,previewUrl:t,shellRef:n,cancelClick:r}){let[{key:i,ref:a},o]=(0,H.useState)(()=>({key:0,ref:(0,H.createRef)()})),[s,c]=(0,H.useState)({input:e,url:e}),[l,u]=(0,H.useState)({input:e,entries:[e],index:0}),[d,f]=(0,H.useState)(()=>window.matchMedia?.(`(prefers-color-scheme: dark)`)?.matches?`dark`:`light`),[p,m]=(0,H.useState)(null),h=(0,H.useRef)(null),g=l.input===e?l:{input:e,entries:[e],index:0},_=g.entries[g.index],v=(0,H.useCallback)(()=>r.current?.(),[r]),y=(0,H.useCallback)(t=>{if(new URL(t).origin!==new URL(e).origin)throw Error(K.startPageOrigin);u(e=>{let n=[...e.entries];return n[e.index]=t,{...e,entries:n}})},[e]),b=(0,H.useCallback)(t=>{if(h.current===e)return;h.current=e;let n=new URL(e),r=t.state===`connected`&&(t.prototype?.startPageSet??t.prototype?.startPage!==void 0)?t.prototype?.startPage:t.localStartPage;if(n.pathname!==`/`||n.search||n.hash||!r)return;let i=new URL(r,n);if(i.origin!==n.origin)throw Error(K.startPageOrigin);c({input:e,url:i.href}),u({input:e,entries:[i.href],index:0})},[e]);function x(){v(),m(null),c({input:e,url:_}),o(e=>({key:e.key+1,ref:(0,H.createRef)()}))}function S(t){t===_?x():(u(n=>{let r=n.input===e?n:g;return{...r,entries:[...r.entries.slice(0,r.index+1),t],index:r.index+1}}),c({input:e,url:t}))}function C(t){let n=g.entries[t];n&&(u({...g,index:t}),c({input:e,url:n}))}let w=(0,H.useCallback)((t,n=!1)=>{m(t);let r=new URL(e);r.pathname=t.pathname,r.search=t.search,r.hash=t.hash,u(t=>{let i=t.input===e?t:{input:e,entries:[e],index:0},a=new URL(i.entries[i.index]),o=[...a.searchParams].filter(([e])=>e.startsWith(`rc.`));for(let e of[r,a])for(let t of[...e.searchParams.keys()])(t===`rc`||t.startsWith(`rc.`))&&e.searchParams.delete(t);if(a.pathname===r.pathname&&a.searchParams.toString()===r.searchParams.toString()&&a.hash===r.hash)return i;for(let[e,t]of o)r.searchParams.append(e,t);let s=r.href;if(n){let e=[...i.entries];return e[i.index]=s,{...i,entries:e}}return{...i,entries:[...i.entries.slice(0,i.index+1),s],index:i.index+1}})},[e]);(0,H.useEffect)(()=>{let e=a.current;if(!e)return;function t(){v(),m(null)}return e.addEventListener(`load`,t),()=>{v(),e.removeEventListener(`load`,t)}},[v,a]),(0,H.useEffect)(()=>{let r=a.current;if(!r)return;let i=new URL(t??e).origin,o=crypto.randomUUID();function s(){let e=n.current?.closest(`.canvas-base`);e&&r?.contentWindow?.postMessage({type:`replica:canvas:theme`,nonce:o,accent:window.getComputedStyle(e).getPropertyValue(`--hub-accent`).trim()},i)}function c(e){e.source===r?.contentWindow&&e.origin===i&&e.data?.type===`replica:canvas:ready`&&s()}return r.addEventListener(`load`,s),window.addEventListener(`message`,c),s(),()=>{r.removeEventListener(`load`,s),window.removeEventListener(`message`,c)}},[d,e,t,a,n]);let T=new URL(s.input===e?s.url:e);if(t){let e=new URL(t);T.protocol=e.protocol,T.host=e.host}return{frameRef:a,frameKey:i,source:T.href,navigation:g,address:_,replaceAddress:y,appearance:d,setAppearance:f,liveRoute:p,initialize:b,reportRoute:w,reload:x,navigate:S,travel:C}}function or(e){let[t,n]=(0,H.useState)(null),[r,i]=(0,H.useState)(``),a=(0,H.useRef)(null),o=(0,H.useRef)(0),s=(0,H.useRef)(0),c=(0,H.useCallback)(async(t,r=!1)=>{if(r&&s.current>0)return;s.current+=1;let c=++o.current;try{let r=await $(t?`/api/refresh`:`/api/state`,e,t?{method:`POST`,body:`{}`}:{});if(c!==o.current)return;a.current=r,n(r),i(``)}catch(e){if(c!==o.current)return;n(t=>t&&{...t,stats:{...t.stats,remoteBranch:{state:`unknown`,repository:t.stats.repository||null,branch:t.stats.branch||null,commitSha:t.stats.commitSha||null,error:sr(e)}}}),i(sr(e))}finally{--s.current}},[e]);return(0,H.useEffect)(()=>{let e=window.setTimeout(()=>void c(!0),0),t=window.setInterval(()=>{let e=a.current?.publishStatus?.state,t=a.current?.publishRequest,n=e===`requested`||e===`in_progress`||t?.state===`requested`||!!t?.requestedAt&&(e===`not_published`||e===`unavailable`);c(n,!0)},15e3);function n(){c(!0)}return window.addEventListener(`focus`,n),()=>{o.current+=1,window.clearTimeout(e),window.clearInterval(t),window.removeEventListener(`focus`,n)}},[c]),{state:t,error:r,setError:i,refresh:c}}function sr(e){return e instanceof Error?e.message:String(e)}function cr({token:e,enabled:t,repository:n,branch:r,commitSha:i,publicationRevision:a}){let o=`${n}/${r}/${i}/${a}`,[s,c]=(0,H.useState)(null),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(!1),p=(0,H.useRef)(null),m=(0,H.useRef)(0),h=t&&s?.identity===o?s:null,g=(0,H.useCallback)(async()=>{if(!t)return;let i=++m.current;u(!0);try{if(await p.current,i!==m.current)return;let t=await $(`/api/publish/prepare`,e,{method:`POST`,body:`{}`});if(i!==m.current)return;if(t.target.repository!==n||t.target.branch!==r)throw Error(q.preferenceTargetChanged);if(typeof t.remember!=`boolean`)throw Error(q.invalidPreference);c({identity:o,preparation:t,error:``})}catch(e){i===m.current&&c({identity:o,preparation:null,error:e instanceof Error?e.message:String(e)})}finally{i===m.current&&u(!1)}},[t,e,n,r,o]);(0,H.useEffect)(()=>{let e=window.setTimeout(()=>void g(),0);return()=>{m.current+=1,window.clearTimeout(e)}},[g]);async function _(n){if(!t||!h?.preparation||l||p.current)return;f(!0);let r=m.current,i=h.preparation,a=(async()=>{try{if((await $(`/api/publish/preference`,e,{method:`POST`,body:JSON.stringify({target:i.target,remember:n})})).remember!==n)throw Error(q.invalidPreference);r===m.current&&c({identity:o,preparation:{...i,remember:n},error:``})}catch(e){r===m.current&&c({identity:o,preparation:i,error:e instanceof Error?e.message:String(e)})}})();p.current=a;try{await a}finally{p.current=null,f(!1)}}return{remember:h?.preparation?.remember??null,loading:l||!h,saving:d,error:h?.error||``,save:_,retry:g}}function lr(e,t,n){let r=n?.included,i=n?.error,a=n?.revision,o=(0,H.useMemo)(()=>{if(r!==void 0)return{identity:e,revision:a,included:r,error:i??``,pending:!1};let t=!1,n=``;if(e)try{let n=localStorage.getItem(`replica:share-controls:v1:${e}`);if(n!==null&&n!==`true`&&n!==`false`)throw Error(`Invalid saved share preference.`);t=n===`true`}catch{n=`The share preference could not be read. Control settings are off by default.`}return{identity:e,revision:a,included:t,error:n,pending:!1}},[e,a,r,i]),[s,c]=(0,H.useState)(o),l=s.identity===e&&s.revision===a?s:o,u=``,d=``;if(l.included)try{u=Te(t)}catch(e){d=e instanceof Error?e.message:`Control settings could not be shared.`}return{included:l.included,query:u,error:d||l.error,blocked:!!d,...n?{pending:l.pending}:{},onChange:t=>{if(n){c({identity:e,revision:a,included:t,error:``,pending:!0});function r(n){c(r=>r.identity===e&&r.revision===a&&r.included===t?{...r,error:n,pending:!1}:r)}n.onChange(t).then(()=>r(``),e=>r(e instanceof Error?e.message:`This preference could not be saved. It will only apply while this page is open.`));return}let r=``;if(e)try{localStorage.setItem(`replica:share-controls:v1:${e}`,String(t))}catch{r=`This preference could not be saved. It will only apply while this page is open.`}c({identity:e,revision:a,included:t,error:r,pending:!1})}}}function ur({token:e,state:t,hubStatus:n}){let[r,i]=(0,H.useState)(null),a=!!(r&&(r.stale||r.repository!==void 0&&r.repository!==t?.stats.repository||r.branch!==void 0&&r.branch!==t?.stats.branch||n?.hubOrigin!==void 0&&r.hubOrigin!==void 0&&r.hubOrigin!==n.hubOrigin||r.token!==e));(0,H.useEffect)(()=>{if(!r||r.stale)return;let e=r.repository??t?.stats.repository,o=r.branch??t?.stats.branch,s=r.hubOrigin??n?.hubOrigin;if(!a&&e===r.repository&&o===r.branch&&s===r.hubOrigin)return;let c=window.setTimeout(()=>{i(t=>t&&{...t,repository:e,branch:o,hubOrigin:s,stale:a,connecting:!a&&t.connecting})},0);return()=>window.clearTimeout(c)},[r,a,t?.stats.repository,t?.stats.branch,n?.hubOrigin]);function o(){i({repository:t?.stats.repository,branch:t?.stats.branch,hubOrigin:n?.hubOrigin,token:e,connecting:!1,stale:!1})}function s(e){i(t=>t&&{...t,connecting:e})}return{intent:r,targetChanged:a,begin:o,close:()=>i(null),setConnecting:s}}var dr={open:!1,context:null,links:[],loading:!1,busy:!1,stale:!0,error:``,notice:``,created:null};function fr({token:e,hubStatus:t,prototypeState:n}){let[r,i]=(0,H.useState)(dr),a=(0,H.useRef)(r);a.current=r;let o=(0,H.useRef)(0),s=(0,H.useRef)(!1),c=(0,H.useRef)(!1),l=(0,H.useRef)(!1),u=(0,H.useRef)(!1),d=(0,H.useRef)(null),f=`${t?.hubOrigin}/${t?.repository}/${t?.branch}/${t?.state}`,p=(0,H.useRef)(f);p.current=f;let m=(0,H.useCallback)(()=>{!u.current||s.current||c.current||l.current||!d.current||(u.current=!1,d.current())},[]);(0,H.useLayoutEffect)(()=>{o.current+=1,i(e=>e.open?{...dr,open:!0,error:J.stale}:dr)},[f,e]),(0,H.useEffect)(()=>()=>{o.current+=1,u.current=!1},[]),(0,H.useEffect)(()=>{let e=t?.prototype;e&&e.canManageShareLinks!==!0&&a.current.context?.prototype.canManageShareLinks===!0&&(o.current+=1,i(t=>t.open&&t.context?.prototype.id===e.id?{...dr,open:!0,stale:!1,context:{...t.context,prototype:{...t.context.prototype,canManageShareLinks:e.canManageShareLinks}}}:t))},[t?.prototype]),(0,H.useEffect)(()=>{t?.prototype?.publicSharingEnabled===!1&&(o.current+=1,i(e=>e.open?{...dr,open:!0,sharingDisabled:!0,error:J.disabled,context:e.context?{...e.context,prototype:{...e.context.prototype,publicSharingEnabled:!1}}:null}:dr))},[t?.prototype?.publicSharingEnabled]);let h=(0,H.useCallback)((t,n)=>$(`/api/hub/share-links/${t}`,e,{method:`POST`,body:JSON.stringify(n)}),[e]),g=(0,H.useCallback)(e=>{e instanceof Error&&`code`in e&&(e.code===`public_sharing_disabled`||e.code===`public_sharing_changed`||e.code===`creator_access_changed`)&&(o.current+=1,i(t=>({...t,busy:!1,loading:!1,stale:!0,sharingDisabled:e.code===`public_sharing_disabled`,links:[],created:null,authorization:void 0})))},[]),_=(0,H.useCallback)(async(e=a.current.context)=>{if(!e||!e.prototype.canManageShareLinks||e.prototype.publicSharingEnabled===!1||c.current)return;c.current=!0;let t=o.current,n=p.current;i(e=>({...e,loading:!0,stale:!0,error:``}));try{let r=new Map,a=new Set,s=null;do{let i=await h(`list`,{target:e.target,...s?{cursor:s}:{}});if(t!==o.current||n!==p.current)return;for(let e of i.shareLinks)r.set(e.id,e);if(s=i.nextCursor,s){if(a.has(s))throw Error(J.paginationFailed);a.add(s)}}while(s);i(e=>({...e,links:[...r.values()],created:e.created?r.get(e.created.id)??null:null,loading:u.current,stale:u.current,sharingDisabled:!1}))}catch(e){t===o.current&&n===p.current&&(i(t=>({...t,loading:!1,stale:!0,error:e instanceof Error?e.message:J.failed})),g(e))}finally{c.current=!1,m()}},[h,m,g]),v=(0,H.useCallback)(async()=>{if(s.current||l.current||c.current){u.current=!0,i(e=>({...e,open:!0,stale:!0,loading:!0}));return}l.current=!0;let e=++o.current,r=p.current;i({...dr,open:!0,loading:!0});let a=t?.repository===n?.stats.repository&&t?.branch===n?.stats.branch,d=``;if(!t||[`disconnected`,`pairing`,`unconfigured`].includes(t.state)?d=J.disconnected:[`unavailable`,`denied`].includes(t.state)?d=J.unavailable:(t.state!==`connected`||!a)&&(d=J.branch),d)i({...dr,open:!0,error:d}),l.current=!1;else try{let t=await h(`context`,{});if(e!==o.current||r!==p.current)return;i(e=>({...e,context:t,loading:!1,stale:t.prototype.canManageShareLinks===!0})),await _(t)}catch(t){e===o.current&&r===p.current&&i(e=>({...e,loading:!1,error:t instanceof Error?t.message:J.failed}))}finally{l.current=!1,m()}},[t,n,_,h,m]);d.current=v;let y=(0,H.useCallback)(async(e,t)=>{let n=a.current;if(s.current||l.current||c.current||u.current||n.stale||!n.context||n.context.prototype.canManageShareLinks!==!0||n.sharingDisabled||n.context.prototype.publicSharingEnabled===!1)return!1;s.current=!0;let r=o.current;i(e=>({...e,busy:!0,error:``,notice:``}));try{let a=await h(e,{target:n.context.target,...t});return r===o.current&&(i(n=>({...n,notice:e===`delete`?J.deleted:``,authorization:void 0,created:`id`in a?a:e===`delete`&&`id`in t&&n.created?.id===t.id?null:n.created,links:e===`delete`&&`id`in t?n.links.filter(e=>e.id!==t.id):n.links})),await _(n.context),!0)}catch(e){if(r!==o.current)return!1;let t=e instanceof Error&&`code`in e&&e.code===`fresh_authorization_required`&&`authorization`in e&&e.authorization&&typeof e.authorization==`object`&&`url`in e.authorization&&typeof e.authorization.url==`string`&&`expiresAt`in e.authorization&&typeof e.authorization.expiresAt==`string`?{url:e.authorization.url,expiresAt:e.authorization.expiresAt}:void 0,n=e instanceof Error&&(!(`statusCode`in e)||`code`in e&&e.code===`share_delivery_unknown`);return i(r=>({...r,stale:!0,authorization:t,error:n?J.unknown:e instanceof Error?e.message:J.failed})),g(e),!1}finally{s.current=!1,r===o.current&&i(e=>({...e,busy:!1})),m()}},[_,h,m,g]),b=(0,H.useCallback)(async e=>{let t=a.current;if(!t.context||l.current||c.current||u.current)throw Error(J.stale);let n=o.current,r=await h(`controls-preference`,{target:t.context.target,included:e});if(n!==o.current)throw Error(J.stale);if(r.included!==e)throw Error(`The share preference could not be saved.`)},[h]),x=(0,H.useCallback)(async(e,t)=>{let n=a.current;if(!n.context||n.stale||l.current||c.current||u.current)return;let r=o.current;try{await h(`open`,{target:n.context.target,id:e,...t?{controlsQuery:t}:{}})}catch(e){r===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:J.failed})),g(e))}},[h,g]),S=(0,H.useCallback)(async()=>{let e=a.current;if(!e.context||!e.authorization||e.busy)return;let t=o.current;try{await h(`authorize`,{target:e.context.target}),t===o.current&&i(e=>({...e,notice:J.authorizationRetry}))}catch(e){t===o.current&&(i(t=>({...t,error:e instanceof Error?e.message:J.failed})),g(e))}},[h,g]);return(0,H.useEffect)(()=>{if(!r.open||!r.context)return;function e(){s.current||_()}let t=window.setInterval(e,3e4);return window.addEventListener(`focus`,e),()=>{window.clearInterval(t),window.removeEventListener(`focus`,e)}},[r.open,r.context,_]),{state:r,open:v,close:()=>{u.current=!1,i(e=>({...e,open:!1}))},refresh:()=>r.context&&!r.sharingDisabled&&r.context.prototype.publicSharingEnabled!==!1?_():v(),create:(e,t)=>y(`create`,{label:e,expiration:t,buildNumber:r.context?.prototype.build?.number}),remove:e=>y(`delete`,{id:e}),openLink:x,setControlPreference:b,authorize:S}}var pr=`modulepreload`,mr=function(e){return`/assets/`+e},hr={},gr=function(e){return e.pathname.endsWith(`.css`)},_r=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},vr=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=mr(t,n);let r=s(t),i=gr(r);return _r(hr,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:pr,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},yr=(0,H.lazy)(()=>vr(()=>import(`./renderer-improvement-notes-prototype.js`).then(e=>e.t).then(e=>({default:e.ImprovementNotesPrototype})),__vite__mapDeps([0,1,2,3,4]))),br=(0,H.lazy)(()=>vr(()=>import(`./renderer-prototype-canvas-thread-sample.js`).then(e=>({default:e.PrototypeCanvasThreadSample})),__vite__mapDeps([5,1,2,3,4])));function xr({config:e}){let t=(0,H.useRef)(null),n=(0,H.useRef)(null),r=(0,H.useRef)(null),i=(0,H.useRef)(null),a=(0,H.useRef)(null),o=(0,H.useRef)(null),s=(0,H.useRef)(null),c=(0,H.useRef)(null),l=(0,H.useRef)(null),u=(0,H.useRef)(null),[d,f]=(0,H.useState)(!1),[p,m]=(0,H.useState)({position:null,collapsed:!1,collapsedGroups:{}}),[h,g]=(0,H.useState)(!1),[_,v]=(0,H.useState)(null),[y,b]=(0,H.useState)(!1),x=(0,H.useCallback)(()=>{g(!1),o.current?.focus()},[]),{frameRef:S,frameKey:C,source:w,navigation:T,address:E,replaceAddress:D,appearance:O,setAppearance:k,liveRoute:A,initialize:j,reportRoute:M,reload:N,navigate:P,travel:F}=ar({prototypeUrl:e.prototypeUrl,previewUrl:e.previewUrl,shellRef:t,cancelClick:u}),I=nr({...e,frameRef:S,address:E,replaceAddress:D}),L=I.state;Gn({...e,frameRef:S,addressRef:r,appearance:O,navigation:T,liveRoute:A,cancelClick:u,reload:N,controlsConnection:I.connection});let{state:R,error:z,setError:B,refresh:ee}=or(e.token),V=ir({token:e.token,onStatus:j,onError:B}),te=rr({token:e.token,status:V.status,onStatusChange:V.refresh,onSelectHub:V.select}),ne=fr({token:e.token,hubStatus:V.status,prototypeState:R}),re=ur({token:e.token,state:R,hubStatus:V.status}),ie=cr({token:e.token,enabled:h&&V.status?.state===`connected`&&V.status.prototype?.registered===!0&&!!V.status.prototype.build&&V.status.repository===R?.stats.repository&&V.status.branch===R?.stats.branch,repository:R?.stats.repository,branch:R?.stats.branch,commitSha:R?.stats.commitSha,publicationRevision:R?.publishRequest?.requestedAt}),ae=Jn({token:e.token,state:R,hubStatus:V.status,error:z,setError:B,refresh:ee,refreshHub:V.refresh,preferenceSaving:ie.saving}),oe=zn(R,V.status,ae.publication),se=ne.state.context,ce=lr(se?`${se.hubOrigin}:${se.prototype.repositoryId}:${se.prototype.id}`:void 0,I.connection?.getControlValues()??{},{included:se?.controlSettingsIncluded??!1,error:se?.controlSettingsError,revision:se?.target,onChange:ne.setControlPreference});(0,H.useLayoutEffect)(()=>{document.body.classList.remove(`renderer-loading`);let e=t.current,r=n.current;if(!e||!r)return;function i(){let t=r?.getBoundingClientRect().height;t&&e?.style.setProperty(`--canvas-toolbar-height`,`${t}px`)}let a=new ResizeObserver(i);return a.observe(r),i(),()=>a.disconnect()},[]);function G(){te.close(),oe.kind===`ready`?ne.open():re.begin()}return(0,W.jsxs)(U.ThemeProvider,{colorMode:O,className:`canvas-base`,children:[(0,W.jsxs)(`main`,{ref:t,className:`canvas-shell${ne.state.open?` canvas-shell--inactive`:``}`,inert:ne.state.open,"aria-hidden":ne.state.open?!0:void 0,children:[(0,W.jsx)(Me,{address:E,addressRef:r,canGoBack:T.index>0,canGoForward:T.indexF(T.index-1),onForward:()=>F(T.index+1),onNavigate:P,onOpenTab:async()=>{await $(`/api/prototype/open`,e.token,{method:`POST`,body:JSON.stringify({url:E})})},onReload:N}),(0,W.jsx)(Vn,{toolbarRef:n,improvementControlsRef:v,config:e,state:ae.presentedState,prototypeName:V.status?.state===`connected`&&V.status.prototype?.name||void 0,publishing:ae.busy,publication:ae.publication,publishButtonRef:i,hubButtonRef:o,titleButtonRef:c,onBuildDetails:()=>b(!0),controlsButtonRef:l,controlsOpen:d,onControls:()=>f(!d),onPublish:()=>void ae.publish(),onShare:G,shareButtonRef:a,hubOpen:h,onHub:()=>{g(!h),V.refresh(`interaction`)}}),(0,W.jsx)(`iframe`,{ref:S,className:`prototype-frame`,title:K.prototypeFrameTitle(e.name),src:w,style:{colorScheme:O,backgroundColor:`var(--hub-canvas-default)`}},C),(0,W.jsx)(Rn,{config:e,frameRef:S,onRouteChange:M,status:V.status,onStatusChange:V.refresh,onSelectHub:V.select,onConnect:te.showAndConnect,onDisconnected:te.show,connectionButtonRef:s,connecting:te.connecting,publication:ae.publication,publicationBusy:ae.busy,dirty:R?.stats.workingTree===`changed`,onPublish:()=>void ae.publish(),onRetryPublication:()=>void ae.retry(),publishPreference:ie,open:h,onClose:x}),e.improvementThreadsSample?(0,W.jsx)(H.Suspense,{fallback:(0,W.jsx)(`p`,{role:`status`,children:K.improvementNotesLoading}),children:(0,W.jsx)(br,{})}):e.pickAndPolish||e.improvementNotesDemo?(0,W.jsx)(H.Suspense,{fallback:(0,W.jsx)(`p`,{className:`visually-hidden`,role:`status`,children:K.improvementNotesLoading}),children:(0,W.jsx)(yr,{canvas:{token:e.token,frameRef:S,toolbarTarget:_,prototypeUrl:e.prototypeUrl,previewUrl:e.previewUrl,hubOpen:h,onOpenNotes:()=>g(!1),onNavigate:P}})}):null,d&&I.connection&&L?(0,W.jsx)($e,{state:L,connection:I.connection,layout:p,onLayoutChange:m,diagnosisTarget:E,onDiagnose:()=>$(`/api/controls/diagnose`,e.token,{method:`POST`,body:JSON.stringify({status:L.status,runtimeAvailable:L.runtimeAvailable,reconnectRequired:L.reconnectRequired===!0,hasError:!!L.error||Un(L,L.loading,E).controls.some(e=>e.visible&&!!e.error),hasStorageError:!!L.storageError,previewUrl:E})})}):null]}),(0,W.jsx)(`div`,{role:`status`,"aria-live":`polite`,className:`visually-hidden`,children:z||ae.notice}),(0,W.jsx)(je,{hub:V,connection:te,publication:ae,sharing:ne,shareIntent:re,controlSettings:ce,readiness:oe,state:R,hubOpen:h,buildDetailsOpen:y,onCloseBuildDetails:()=>b(!1),shareButtonRef:a,hubButtonRef:o,connectionButtonRef:s,publishButtonRef:i,titleButtonRef:c})]})}var Sr=document.querySelector(`#root`);if(!Sr)throw Error(`Replica prototype renderer root is missing.`);(0,oe.createRoot)(Sr).render((0,W.jsx)(xr,{config:window.__REPLICA_CANVAS__}));export{$ as a,zt as c,at as d,it as f,G as h,pn as i,bt as l,le as m,bn as n,Kt as o,tt as p,vn as r,Gt as s,Dn as t,ot as u};
\ No newline at end of file
diff --git a/.github/extensions/replica-prototype/assets/review-anchor-validation.mjs b/.github/extensions/replica-prototype/assets/review-anchor-validation.mjs
index 2216c189..843f9fc0 100644
--- a/.github/extensions/replica-prototype/assets/review-anchor-validation.mjs
+++ b/.github/extensions/replica-prototype/assets/review-anchor-validation.mjs
@@ -1,1529 +1,6 @@
-//#region node_modules/zod/v4/core/util.js
-function e(e) {
- let t = Object.values(e).filter((e) => typeof e == "number");
- return Object.entries(e).filter(([e, n]) => t.indexOf(+e) === -1).map(([e, t]) => t);
-}
-function t(e, t = "|") {
- return e.map((e) => oe(e)).join(t);
-}
-function n(e, t) {
- return typeof t == "bigint" ? t.toString() : t;
-}
-var r = class {
- constructor(e) {
- this._getter = e, this._value = void 0;
- }
- get value() {
- let e = this._getter;
- return e !== void 0 && (this._value = e(), this._getter = void 0), this._value;
- }
-};
-function i(e) {
- return new r(e);
-}
-function a(e) {
- return e == null;
-}
-function o(e) {
- let t = +!!e.startsWith("^"), n = e.endsWith("$") ? e.length - 1 : e.length;
- return e.slice(t, n);
-}
-function s(e, t) {
- let n = e / t, r = Math.round(n), i = 4 * 2 ** -52 * Math.max(Math.abs(n), 1);
- return Math.abs(n - r) < i ? 0 : n - r;
-}
-function c(e, t, n) {
- Object.defineProperty(e, t, {
- value: n,
- writable: !0,
- enumerable: !0,
- configurable: !0
- });
-}
-function l(e) {
- let t = Object.getOwnPropertyDescriptor(e, "shape");
- return t?.get ? t.get.raw : t?.value;
-}
-function u(e) {
- return l(e._zod.def) ?? e._zod.def.shape;
-}
-function d(e, t, n) {
- Object.defineProperty(e, t, {
- get() {
- let e = n();
- return c(this, t, e), e;
- },
- enumerable: !0,
- configurable: !0
- });
-}
-function f(e, t, n) {
- t in e ? c(e, t, n) : e[t] = n;
-}
-function p(e, t, n, r) {
- let i = u(t);
- for (let a of n) {
- let n = Object.getOwnPropertyDescriptor(i, a);
- n.enumerable && (n.get ? d(e, a, () => {
- let e = t._zod.def.shape[a];
- return r ? r(e, a) : e;
- }) : f(e, a, r ? r(n.value, a) : n.value));
- }
-}
-function m(e, t) {
- for (let n of Reflect.ownKeys(t)) {
- let r = Object.getOwnPropertyDescriptor(t, n);
- r.enumerable && (r.get ? d(e, n, () => t[n]) : f(e, n, r.value));
- }
-}
-function h(...e) {
- let t = {};
- for (let n of e) {
- let e = Object.getOwnPropertyDescriptors(n);
- Object.assign(t, e);
- }
- return Object.defineProperties({}, t);
-}
-function ee(e) {
- return JSON.stringify(e);
-}
-function te(e) {
- return e.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
-}
-var ne = "captureStackTrace" in Error ? Error.captureStackTrace : (...e) => {};
-function g(e) {
- return typeof e == "object" && !!e && !Array.isArray(e);
-}
-var re = /* @__PURE__*/ i(() => {
- if (A.jitless || typeof navigator < "u" && navigator?.userAgent?.includes("Cloudflare")) return !1;
- try {
- return Function(""), !0;
- } catch {
- return !1;
- }
-});
-function _(e) {
- if (g(e) === !1) return !1;
- let t = e.constructor;
- if (t === void 0 || typeof t != "function") return !0;
- let n = t.prototype;
- return g(n) !== !1 && Object.prototype.hasOwnProperty.call(n, "isPrototypeOf") !== !1;
-}
-function ie(e) {
- return _(e) ? { ...e } : Array.isArray(e) ? [...e] : e instanceof Map ? new Map(e) : e instanceof Set ? new Set(e) : e;
-}
-var ae = /* @__PURE__*/ new Set([
- "string",
- "number",
- "symbol"
-]);
-function v(e) {
- return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
-}
-function y(e, t, n) {
- let r = new e._zod.constr(t ?? e._zod.def);
- return (!t || n?.parent) && (r._zod.parent = e), r;
-}
-function b(e) {
- let t = e;
- if (!t) return {};
- if (typeof t == "string") return { error: () => t };
- if (t?.message !== void 0) {
- if (t?.error !== void 0) throw Error("Cannot specify both `message` and `error` params");
- t.error = t.message;
- }
- return delete t.message, typeof t.error == "string" ? {
- ...t,
- error: () => t.error
- } : t;
-}
-function oe(e) {
- return typeof e == "bigint" ? e.toString() + "n" : typeof e == "string" ? `"${e}"` : `${e}`;
-}
-function se(e) {
- return Object.keys(e).filter((t) => e[t]._zod.optin !== void 0 && e[t]._zod.optout === "optional");
-}
-var ce = {
- safeint: [-(2 ** 53 - 1), 2 ** 53 - 1],
- int32: [-2147483648, 2147483647],
- uint32: [0, 4294967295],
- float32: [-34028234663852886e22, 34028234663852886e22],
- float64: [-Number.MAX_VALUE, Number.MAX_VALUE]
-}, le = {
- int64: [/* @__PURE__*/ BigInt("-9223372036854775808"), /* @__PURE__*/ BigInt("9223372036854775807")],
- uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt("18446744073709551615")]
-};
-function ue(e, t) {
- let n = e._zod.def, r = n.checks;
- if (r && r.length > 0) throw Error(".pick() cannot be used on object schemas containing refinements");
- let i = {};
- return p(i, e, de(e, t)), y(e, h(n, {
- shape: i,
- checks: []
- }));
-}
-function de(e, t) {
- let n = u(e), r = [];
- for (let e of Reflect.ownKeys(t)) {
- if (!Object.getOwnPropertyDescriptor(n, e)?.enumerable) throw Error(`Unrecognized key: "${String(e)}"`);
- t[e] && r.push(e);
- }
- return r;
-}
-function fe(e, t) {
- let n = e._zod.def, r = n.checks;
- if (r && r.length > 0) throw Error(".omit() cannot be used on object schemas containing refinements");
- let i = new Set(de(e, t)), a = {};
- return p(a, e, Reflect.ownKeys(u(e)).filter((e) => !i.has(e))), y(e, h(n, {
- shape: a,
- checks: []
- }));
-}
-function pe(e, t) {
- if (!_(t)) throw Error("Invalid input to extend: expected a plain object");
- let n = e._zod.def.checks;
- if (n && n.length > 0) {
- let n = u(e);
- for (let e of Reflect.ownKeys(t)) if (Object.getOwnPropertyDescriptor(n, e) !== void 0) throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.");
- }
- return y(e, h(e._zod.def, { shape: me(e, t) }));
-}
-function me(e, t) {
- let n = {};
- return p(n, e, Reflect.ownKeys(u(e))), m(n, t), n;
-}
-function he(e, t) {
- if (!_(t)) throw Error("Invalid input to safeExtend: expected a plain object");
- return y(e, h(e._zod.def, { shape: me(e, t) }));
-}
-function ge(e, t) {
- if (!t?._zod?.def) throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");
- if (e._zod.def.checks?.length) throw Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");
- let n = {};
- return p(n, e, Reflect.ownKeys(u(e))), p(n, t, Reflect.ownKeys(u(t))), y(e, h(e._zod.def, {
- shape: n,
- get catchall() {
- return t._zod.def.catchall;
- },
- checks: t._zod.def.checks ?? []
- }));
-}
-function _e(e, t, n, r = "partial") {
- let i = t._zod.def.checks;
- if (i && i.length > 0) throw Error(`.${r}() cannot be used on object schemas containing refinements`);
- let a = n ? new Set(de(t, n)) : void 0, o = {};
- return p(o, t, Reflect.ownKeys(u(t)), e && ((t, n) => a && !a.has(n) ? t : new e({
- type: "optional",
- innerType: t
- }))), y(t, h(t._zod.def, {
- shape: o,
- checks: []
- }));
-}
-function ve(e, t, n) {
- let r = n ? new Set(de(t, n)) : void 0, i = {};
- return p(i, t, Reflect.ownKeys(u(t)), (t, n) => r && !r.has(n) ? t : new e({
- type: "nonoptional",
- innerType: t
- })), y(t, h(t._zod.def, { shape: i }));
-}
-function x(e, t = 0) {
- if (e.aborted === !0) return !0;
- for (let n = t; n < e.issues.length; n++) if (e.issues[n]?.continue !== !0) return !0;
- return !1;
-}
-function ye(e, t = 0) {
- if (e.aborted === !0) return !0;
- for (let n = t; n < e.issues.length; n++) if (e.issues[n]?.continue === !1) return !0;
- return !1;
-}
-function be(e, t) {
- return t.map((t) => {
- var n;
- return (n = t).path ?? (n.path = []), t.path.unshift(e), t;
- });
-}
-function S(e) {
- return typeof e == "string" ? e : e?.message;
-}
-function xe(e, t, n) {
- var r;
- for (let i = t; i < e.length; i++) (r = e[i]).schema ?? (r.schema = n);
-}
-function C(e, t, n) {
- var r;
- let i = e.inst?._zod?.traits;
- i?.has("$ZodType") && (i.has("$ZodCheck") ? (r = e).schema ?? (r.schema = e.inst) : e.schema = e.inst);
- let a = e.schema === e.inst ? void 0 : e.schema?._zod.def?.error, o = e.message ? e.message : S(e.inst?._zod.def?.error?.(e)) ?? S(a?.(e)) ?? S(t?.error?.(e)) ?? S(n.customError?.(e)) ?? S(n.localeError?.(e)) ?? "Invalid input", s = {};
- for (let t of Object.keys(e)) t !== "inst" && t !== "schema" && t !== "continue" && t !== "input" && t !== "__proto__" && (s[t] = e[t]);
- return s.path ??= [], s.message = o, t?.reportInput && (s.input = e.input), s;
-}
-var Se = /[\uD800-\uDBFF]/;
-function Ce(e) {
- let t = e.length;
- if (!Se.test(e)) return t;
- let n = t;
- for (let r = 0; r < t - 1; r++) (e.charCodeAt(r) & 64512) == 55296 && (e.charCodeAt(r + 1) & 64512) == 56320 && (n--, r++);
- return n;
-}
-function we(e) {
- return Array.isArray(e) ? "array" : typeof e == "string" ? "string" : "unknown";
-}
-function Te(e) {
- let t = typeof e;
- switch (t) {
- case "number": return Number.isNaN(e) ? "nan" : "number";
- case "object": {
- if (e === null) return "null";
- if (Array.isArray(e)) return "array";
- let t = e;
- if (t && Object.getPrototypeOf(t) !== Object.prototype && "constructor" in t && t.constructor) return t.constructor.name;
- }
- }
- return t;
-}
-function w(...e) {
- let [t, n, r] = e;
- return typeof t == "string" ? {
- message: t,
- code: "custom",
- input: n,
- inst: r
- } : { ...t };
-}
-function Ee(e, t) {
- for (let n in t) {
- let r = Object.getOwnPropertyDescriptor(t, n);
- r.get ? Object.defineProperty(e, n, {
- ...r,
- enumerable: !1
- }) : ke(e, n, r.value);
- }
-}
-function T(e, t, n, r = !0) {
- return Object.defineProperty(e, t, {
- configurable: !0,
- writable: !0,
- enumerable: r,
- value: n
- }), n;
-}
-function De(e, t, n) {
- return T(e, t, n, !1);
-}
-function Oe(e, t) {
- for (let n in e) {
- let r = e[n];
- Object.defineProperty(t, n, {
- configurable: !0,
- enumerable: !0,
- get() {
- return T(this, n, r(this));
- },
- set(e) {
- T(this, n, e);
- }
- });
- }
- return t;
-}
-function ke(e, t, n) {
- Object.defineProperty(e, t, {
- configurable: !0,
- get() {
- return this == null ? n : T(this, t, n.bind(this));
- },
- set(e) {
- T(this, t, e);
- }
- });
-}
-function Ae(e, t) {
- let n = Object.getPrototypeOf(e);
- return t in n ? void 0 : n;
-}
-var je, E = !1, Me = {
- configurable: !0,
- get() {
- E = !0;
- }
-};
-function D(e, t, n) {
- let r = Object.getPrototypeOf(e._zod);
- t in r && je !== e._zod ? je = void 0 : (je = e._zod, Object.defineProperty(r, t, {
- configurable: !0,
- get() {
- Object.defineProperty(this, t, Me);
- let e = E;
- E = !1;
- try {
- let r = n(this);
- return E ? delete this[t] : Object.defineProperty(this, t, {
- configurable: !0,
- writable: !0,
- value: r
- }), E ||= e, r;
- } catch (n) {
- throw delete this[t], E ||= e, n;
- }
- },
- set(e) {
- Object.defineProperty(this, t, {
- configurable: !0,
- writable: !0,
- value: e
- });
- }
- }));
-}
-function Ne(e, t, n, r) {
- let i = Ae(e, t);
- i && Object.defineProperty(i, t, {
- configurable: !0,
- get() {
- let e = {
- configurable: !0,
- writable: !0,
- enumerable: r,
- value: void 0
- };
- return Object.defineProperty(this, t, e), e.value = n(this), Object.defineProperty(this, t, e), e.value;
- },
- set(e) {
- Object.defineProperty(this, t, {
- configurable: !0,
- writable: !0,
- enumerable: r,
- value: e
- });
- }
- });
-}
-var Pe = "~constantCatch";
-function Fe(e) {
- let t = () => e;
- return t[Pe] = !0, t;
-}
-//#endregion
-//#region node_modules/zod/v4/core/core.js
-var Ie, Le = {
- value: void 0,
- enumerable: !1
-}, Re = "captureStackTrace" in Error ? Error : null;
-function ze(e) {
- let t = Re;
- if (t) {
- let n = t.stackTraceLimit;
- if (typeof n == "number") {
- try {
- t.stackTraceLimit = 0;
- } catch {
- return Re = null, new e();
- }
- try {
- return new e();
- } finally {
- t.stackTraceLimit = n;
- }
- }
- }
- return new e();
-}
-function O(e, t, n, r) {
- let i = {};
- function a(e) {
- this.def = e, this.constr = d, this.traits = /* @__PURE__ */ new Set();
- }
- a.prototype = i;
- let o = n, s = o && /* @__PURE__ */ new WeakSet();
- function c(n, r) {
- if (!n._zod) {
- Le.value = new a(r);
- try {
- Object.defineProperty(n, "_zod", Le);
- } finally {
- Le.value = void 0;
- }
- } else if (n._zod.traits.has(e)) return;
- if (n._zod.traits.add(e), t(n, r), s) {
- let e = Object.getPrototypeOf(n), t = n._zod.constr.prototype, r = e;
- for (; r && r !== t;) r = Object.getPrototypeOf(r);
- let i = r ?? e;
- s.has(i) || (s.add(i), Ee(i, o));
- }
- let i = d.prototype;
- for (let e in i) Object.prototype.hasOwnProperty.call(i, e) && (e in n || (n[e] = i[e].bind(n)));
- }
- let l = r?.Parent ?? Object;
- class u extends l {}
- Object.defineProperty(u, "name", { value: e });
- function d(e) {
- let t = r?.Parent ? ze(u) : this;
- c(t, e);
- let n = t._zod.deferred;
- if (n) {
- for (let e of n) e();
- t._zod.deferred = void 0;
- }
- let i = globalThis.__zod_globalConfig?.postProcessor;
- return i && i(t), t;
- }
- return Object.defineProperty(d, "init", { value: c }), Object.defineProperty(d, Symbol.hasInstance, { value: (t) => r?.Parent && t instanceof r.Parent ? !0 : t?._zod?.traits?.has(e) }), Object.defineProperty(d, "name", { value: e }), d;
-}
-var k = class extends Error {
- constructor() {
- super("Encountered Promise during synchronous parse. Use .parseAsync() instead.");
- }
-}, Be = class extends Error {
- constructor(e) {
- super(`Encountered unidirectional transform during encode: ${e}`), this.name = "ZodEncodeError";
- }
-};
-(Ie = globalThis).__zod_globalConfig ?? (Ie.__zod_globalConfig = {});
-var A = globalThis.__zod_globalConfig;
-function j(e) {
- return e && Object.assign(A, e), A;
-}
-//#endregion
-//#region node_modules/zod/v4/core/errors.js
-function Ve() {
- let e = this._zod;
- return e.message ??= JSON.stringify(e.def, n, 2), e.message;
-}
-function He(e) {
- this._zod.message = e;
-}
-var Ue = {
- get: Ve,
- set: He,
- enumerable: !0,
- configurable: !0
-}, We = {
- value: void 0,
- enumerable: !1
-}, Ge = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]), Ke = (e, t) => {
- e.name = "$ZodError", We.value = t, Object.defineProperty(e, "issues", We), We.value = void 0, Object.defineProperty(e, "message", Ue);
- let n = Object.getPrototypeOf(e);
- Ge.has(n) || (Ge.add(n), Object.defineProperty(n, "toString", {
- configurable: !0,
- enumerable: !1,
- get() {
- let e = () => this.message;
- return Object.defineProperty(this, "toString", {
- value: e,
- configurable: !0,
- writable: !0
- }), e;
- },
- set(e) {
- Object.defineProperty(this, "toString", {
- value: e,
- configurable: !0,
- writable: !0
- });
- }
- }));
-}, qe = O("$ZodError", Ke);
-O("$ZodError", Ke, void 0, { Parent: Error });
-function Je(e, t, n) {
- return Object.prototype.hasOwnProperty.call(e, t) || (t === "__proto__" ? Object.defineProperty(e, t, {
- value: n(),
- writable: !0,
- enumerable: !0,
- configurable: !0
- }) : e[t] = n()), e[t];
-}
-function Ye(e, t = (e) => e.message) {
- let n = {}, r = [];
- for (let i of e.issues) i.path.length > 0 ? Je(n, i.path[0], () => []).push(t(i)) : r.push(t(i));
- return {
- formErrors: r,
- fieldErrors: n
- };
-}
-function Xe(e, t = (e) => e.message) {
- let n = { _errors: [] }, r = (e, i = []) => {
- for (let a of e.issues) if (a.code === "invalid_union" && a.errors.length) a.errors.map((e) => r({ issues: e }, [...i, ...a.path]));
- else if (a.code === "invalid_key") r({ issues: a.issues }, [...i, ...a.path]);
- else if (a.code === "invalid_element") r({ issues: a.issues }, [...i, ...a.path]);
- else {
- let e = [...i, ...a.path];
- if (e.length === 0) n._errors.push(t(a));
- else {
- let r = n, i = 0;
- for (; i < e.length;) {
- let n = e[i], o = i === e.length - 1;
- if (n === "_errors") {
- o && r._errors.push(t(a)), i++;
- continue;
- }
- Object.prototype.hasOwnProperty.call(r, n) || Object.defineProperty(r, n, {
- value: { _errors: [] },
- enumerable: !0,
- writable: !0,
- configurable: !0
- });
- let s = r[n];
- o && s._errors.push(t(a)), r = s, i++;
- }
- }
- }
- };
- return r(e), n;
-}
-//#endregion
-//#region node_modules/zod/v4/core/parse.js
-function Ze(e, t) {
- return {
- callee: t?.callee ?? e,
- Err: t?.Err
- };
-}
-var Qe = (e) => {
- let t = (n, r, i, a) => {
- let o = i ? {
- ...i,
- async: !1
- } : { async: !1 }, s = n._zod.run({
- value: r,
- issues: []
- }, o);
- if (s instanceof Promise) throw new k();
- if (s.issues.length) {
- let n = new ((a?.Err) ?? e)(s.issues.map((e) => C(e, o, j())));
- throw ne(n, a?.callee ?? t), n;
- }
- return s.value;
- };
- return t;
-}, $e = (e) => {
- let t = async (n, r, i, a) => {
- let o = i ? {
- ...i,
- async: !0
- } : { async: !0 }, s = n._zod.run({
- value: r,
- issues: []
- }, o);
- if (s instanceof Promise && (s = await s), s.issues.length) {
- let n = new ((a?.Err) ?? e)(s.issues.map((e) => C(e, o, j())));
- throw ne(n, a?.callee ?? t), n;
- }
- return s.value;
- };
- return t;
-}, et = (e) => (t, n, r) => {
- let i = r ? {
- ...r,
- async: !1
- } : { async: !1 }, a = t._zod.run({
- value: n,
- issues: []
- }, i);
- if (a instanceof Promise) throw new k();
- return a.issues.length ? tt(e, a.issues, i) : {
- success: !0,
- data: a.value
- };
-};
-function tt(e, t, n) {
- let r;
- return {
- success: !1,
- get error() {
- return r || (r = new e(t.map((e) => C(e, n, j()))), t = void 0, n = void 0), r;
- },
- set error(e) {
- r = e, t = void 0, n = void 0;
- }
- };
-}
-var nt = (e) => async (t, n, r) => {
- let i = r ? {
- ...r,
- async: !0
- } : { async: !0 }, a = t._zod.run({
- value: n,
- issues: []
- }, i);
- return a instanceof Promise && (a = await a), a.issues.length ? tt(e, a.issues, i) : {
- success: !0,
- data: a.value
- };
-}, rt = /* @__PURE__ */ Symbol.for("zod.compile.invalid"), it = /* @__PURE__ */ Symbol.for("zod.compile.fallback"), at = ((e, t, n) => {
- let r = e._zod.bag.validator;
- if (r !== void 0) {
- if (r(t) !== rt) return !0;
- if (r.definite === !0 && n === void 0) return !1;
- }
- return ot(e, t, n);
-});
-function ot(e, t, n) {
- let r = n ? {
- ...n,
- async: !1,
- abortEarly: !0
- } : {
- async: !1,
- abortEarly: !0
- }, i = e._zod.bag.fallbackRun, a;
- if (i ? (r[it] = !0, a = i({
- value: t,
- issues: []
- }, r)) : a = e._zod.run({
- value: t,
- issues: []
- }, r), a instanceof Promise) throw new k();
- return a.issues.length === 0;
-}
-var st = async (e, t, n) => {
- let r = n ? {
- ...n,
- async: !0,
- abortEarly: !0
- } : {
- async: !0,
- abortEarly: !0
- }, i = e._zod.run({
- value: t,
- issues: []
- }, r);
- return i instanceof Promise && (i = await i), i.issues.length === 0;
-}, ct = (e) => {
- let t = Qe(e), n = (e, r, i, a) => {
- let o = i ? {
- ...i,
- direction: "backward"
- } : { direction: "backward" };
- return t(e, r, o, Ze(n, a));
- };
- return n;
-}, lt = (e) => {
- let t = Qe(e), n = (e, r, i, a) => t(e, r, i, Ze(n, a));
- return n;
-}, ut = (e) => {
- let t = $e(e), n = async (e, r, i, a) => {
- let o = i ? {
- ...i,
- direction: "backward"
- } : { direction: "backward" };
- return await t(e, r, o, Ze(n, a));
- };
- return n;
-}, dt = (e) => {
- let t = $e(e), n = async (e, r, i, a) => await t(e, r, i, Ze(n, a));
- return n;
-}, ft = (e) => (t, n, r) => {
- let i = r ? {
- ...r,
- direction: "backward"
- } : { direction: "backward" };
- return et(e)(t, n, i);
-}, pt = (e) => (t, n, r) => et(e)(t, n, r), mt = (e) => async (t, n, r) => {
- let i = r ? {
- ...r,
- direction: "backward"
- } : { direction: "backward" };
- return nt(e)(t, n, i);
-}, ht = (e) => async (t, n, r) => nt(e)(t, n, r), gt = /^[cC][0-9a-z]{6,}$/, _t = /^[0-9a-z]+$/, vt = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/, yt = /^[0-9a-vA-V]{20}$/, bt = /^[A-Za-z0-9]{27}$/, xt = /^[a-zA-Z0-9_-]{21}$/;
-function St(e) {
- return RegExp(`^[a-zA-Z0-9_-]{${e}}$`);
-}
-var Ct = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/, wt = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/, Tt = (e) => e ? RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`) : /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/, Et = /^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/, Dt = "^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$";
-function Ot() {
- return new RegExp(Dt, "u");
-}
-var kt = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/, At = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/, jt = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/, Mt = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/, Nt = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/, Pt = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/, Ft = /^https?$/, It = /^\+[1-9]\d{6,14}$/, Lt = "(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))";
-function Rt(e) {
- return RegExp(`^${e}$`);
-}
-var zt = /*@__PURE__*/ Rt(Lt);
-function Bt(e) {
- let t = "(?:[01]\\d|2[0-3]):[0-5]\\d";
- return typeof e.precision == "number" ? e.precision === -1 ? `${t}` : e.precision === 0 ? `${t}:[0-5]\\d` : `${t}:[0-5]\\d\\.\\d{${e.precision}}` : e.seconds ? `${t}:[0-5]\\d(?:\\.\\d+)?` : `${t}(?::[0-5]\\d(?:\\.\\d+)?)?`;
-}
-function Vt(e) {
- return RegExp(`^${Bt(e)}$`);
-}
-function Ht(e) {
- let t = ["Z"];
- e.offset && t.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");
- let n = `${Bt({
- precision: e.precision,
- seconds: !0
- })}(?:${t.join("|")})`, r = e.local ? `${n}|${Bt({ precision: e.precision })}` : n;
- return RegExp(`^${Lt}T(?:${r})$`);
-}
-var Ut = /^[\s\S]{0,}$/, Wt = /^-?\d+(?:\.\d+)?$/, Gt = /^[^A-Z]*$/, Kt = /^[^a-z]*$/, M = /*@__PURE__*/ O("$ZodCheck", (e, t) => {
- var n;
- e._zod ??= {}, e._zod.def = t, (n = e._zod).onattach ?? (n.onattach = []);
-}), qt = (e) => {
- let t = e.value;
- return !a(t) && t.length !== void 0;
-}, Jt = {
- number: "number",
- bigint: "bigint",
- object: "date"
-}, Yt = /*@__PURE__*/ O("$ZodCheckLessThan", (e, t) => {
- M.init(e, t);
- let n = Jt[typeof t.value];
- e._zod.check = (r) => {
- (t.inclusive ? r.value <= t.value : r.value < t.value) || r.issues.push({
- origin: Jt[typeof r.value] ?? n,
- code: "too_big",
- maximum: typeof t.value == "object" ? t.value.getTime() : t.value,
- input: r.value,
- inclusive: t.inclusive,
- inst: e,
- continue: !t.abort
- });
- };
-}), Xt = /*@__PURE__*/ O("$ZodCheckGreaterThan", (e, t) => {
- M.init(e, t);
- let n = Jt[typeof t.value];
- e._zod.check = (r) => {
- (t.inclusive ? r.value >= t.value : r.value > t.value) || r.issues.push({
- origin: Jt[typeof r.value] ?? n,
- code: "too_small",
- minimum: typeof t.value == "object" ? t.value.getTime() : t.value,
- input: r.value,
- inclusive: t.inclusive,
- inst: e,
- continue: !t.abort
- });
- };
-}), Zt = /*@__PURE__*/ O("$ZodCheckMultipleOf", (e, t) => {
- M.init(e, t), e._zod.check = (n) => {
- if (typeof n.value != typeof t.value) throw Error("Cannot mix number and bigint in multiple_of check.");
- (typeof n.value == "bigint" ? t.value !== BigInt(0) && n.value % t.value === BigInt(0) : s(n.value, t.value) === 0) || n.issues.push({
- origin: typeof n.value,
- code: "not_multiple_of",
- divisor: t.value,
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), Qt = /*@__PURE__*/ O("$ZodCheckNumberFormat", (e, t) => {
- M.init(e, t), t.format = t.format || "float64";
- let n = t.format?.includes("int"), r = n ? "int" : "number", [i, a] = ce[t.format];
- e._zod.check = (o) => {
- let s = o.value;
- if (n) {
- if (!Number.isInteger(s)) {
- o.issues.push({
- expected: r,
- format: t.format,
- code: "invalid_type",
- continue: !1,
- input: s,
- inst: e
- });
- return;
- }
- if (!Number.isSafeInteger(s)) {
- s > 0 ? o.issues.push({
- input: s,
- code: "too_big",
- maximum: 2 ** 53 - 1,
- note: "Integers must be within the safe integer range.",
- inst: e,
- origin: r,
- inclusive: !0,
- continue: !t.abort
- }) : o.issues.push({
- input: s,
- code: "too_small",
- minimum: -(2 ** 53 - 1),
- note: "Integers must be within the safe integer range.",
- inst: e,
- origin: r,
- inclusive: !0,
- continue: !t.abort
- });
- return;
- }
- }
- s < i && o.issues.push({
- origin: "number",
- input: s,
- code: "too_small",
- minimum: i,
- inclusive: !0,
- inst: e,
- continue: !t.abort
- }), s > a && o.issues.push({
- origin: "number",
- input: s,
- code: "too_big",
- maximum: a,
- inclusive: !0,
- inst: e,
- continue: !t.abort
- });
- };
-}), $t = /*@__PURE__*/ O("$ZodCheckMaxLength", (e, t) => {
- var n;
- M.init(e, t), (n = e._zod.def).when ?? (n.when = qt), e._zod.check = (n) => {
- let r = n.value, i = r.length;
- if ((typeof r == "string" && i > t.maximum ? Ce(r) : i) <= t.maximum) return;
- let a = we(r);
- n.issues.push({
- origin: a,
- code: "too_big",
- maximum: t.maximum,
- inclusive: !0,
- input: r,
- inst: e,
- continue: !t.abort
- });
- };
-}), en = /*@__PURE__*/ O("$ZodCheckMinLength", (e, t) => {
- var n;
- M.init(e, t), (n = e._zod.def).when ?? (n.when = qt), e._zod.check = (n) => {
- let r = n.value, i = r.length;
- if ((typeof r == "string" && i >= t.minimum && i < t.minimum * 2 ? Ce(r) : i) >= t.minimum) return;
- let a = we(r);
- n.issues.push({
- origin: a,
- code: "too_small",
- minimum: t.minimum,
- inclusive: !0,
- input: r,
- inst: e,
- continue: !t.abort
- });
- };
-}), tn = /*@__PURE__*/ O("$ZodCheckLengthEquals", (e, t) => {
- var n;
- M.init(e, t), (n = e._zod.def).when ?? (n.when = qt), e._zod.check = (n) => {
- let r = n.value, i = r.length, a = typeof r == "string" && i >= t.length && i <= t.length * 2 ? Ce(r) : i;
- if (a === t.length) return;
- let o = we(r), s = a > t.length;
- n.issues.push({
- origin: o,
- ...s ? {
- code: "too_big",
- maximum: t.length
- } : {
- code: "too_small",
- minimum: t.length
- },
- inclusive: !0,
- exact: !0,
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), nn = /*@__PURE__*/ O("$ZodCheckStringFormat", (e, t) => {
- var n, r;
- M.init(e, t), t.pattern ? (n = e._zod).check ?? (n.check = (n) => {
- t.pattern.lastIndex = 0, !t.pattern.test(n.value) && n.issues.push({
- origin: "string",
- code: "invalid_format",
- format: t.format,
- input: n.value,
- ...t.pattern ? { pattern: t.pattern.toString() } : {},
- inst: e,
- continue: !t.abort
- });
- }) : (r = e._zod).check ?? (r.check = () => {});
-}), rn = /*@__PURE__*/ O("$ZodCheckRegex", (e, t) => {
- nn.init(e, t), e._zod.check = (n) => {
- t.pattern.lastIndex = 0, !t.pattern.test(n.value) && n.issues.push({
- origin: "string",
- code: "invalid_format",
- format: "regex",
- input: n.value,
- pattern: t.pattern.toString(),
- inst: e,
- continue: !t.abort
- });
- };
-}), an = /*@__PURE__*/ O("$ZodCheckLowerCase", (e, t) => {
- t.pattern ??= Gt, nn.init(e, t);
-}), on = /*@__PURE__*/ O("$ZodCheckUpperCase", (e, t) => {
- t.pattern ??= Kt, nn.init(e, t);
-}), sn = /*@__PURE__*/ O("$ZodCheckIncludes", (e, t) => {
- M.init(e, t);
- let n = v(t.includes);
- t.pattern = new RegExp(typeof t.position == "number" ? `^.{${t.position},}${n}` : n), e._zod.check = (n) => {
- n.value.includes(t.includes, t.position) || n.issues.push({
- origin: "string",
- code: "invalid_format",
- format: "includes",
- includes: t.includes,
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), cn = /*@__PURE__*/ O("$ZodCheckStartsWith", (e, t) => {
- M.init(e, t);
- let n = RegExp(`^${v(t.prefix)}.*`);
- t.pattern ??= n, e._zod.check = (n) => {
- n.value.startsWith(t.prefix) || n.issues.push({
- origin: "string",
- code: "invalid_format",
- format: "starts_with",
- prefix: t.prefix,
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), ln = /*@__PURE__*/ O("$ZodCheckEndsWith", (e, t) => {
- M.init(e, t);
- let n = RegExp(`.*${v(t.suffix)}$`);
- t.pattern ??= n, e._zod.check = (n) => {
- n.value.endsWith(t.suffix) || n.issues.push({
- origin: "string",
- code: "invalid_format",
- format: "ends_with",
- suffix: t.suffix,
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), un = /*@__PURE__*/ O("$ZodCheckOverwrite", (e, t) => {
- M.init(e, t), e._zod.check = (e) => {
- e.value = t.tx(e.value);
- };
-}), dn = class {
- constructor(e = [], t = {}) {
- this.content = [], this.indent = 0, this.args = e, this.closed = t;
- }
- indented(e) {
- this.indent += 1;
- try {
- e(this);
- } finally {
- --this.indent;
- }
- }
- write(e) {
- if (typeof e == "function") {
- e(this, { execution: "sync" }), e(this, { execution: "async" });
- return;
- }
- let t = e.split("\n").filter((e) => e), n = Math.min(...t.map((e) => e.length - e.trimStart().length)), r = t.map((e) => e.slice(n)).map((e) => " ".repeat(this.indent * 2) + e);
- for (let e of r) this.content.push(e);
- }
- compile() {
- let e = Function, t = this?.content ?? [""];
- return new e(...Object.keys(this.closed), `return function (${this.args.join(", ")}) {\n${t.join("\n")}\n};`)(...Object.values(this.closed));
- }
-}, fn = {
- major: 4,
- minor: 6,
- patch: 5
-}, N = /*@__PURE__*/ O("$ZodType", (e, t) => {
- var n;
- e ??= {}, e._zod.def = t, e._zod.bag = e._zod.bag || {}, e._zod.version = fn;
- let r = e._zod.def.checks, i = e._zod.traits.has("$ZodCheck") ? [e, ...r ?? []] : r?.length ? [...r] : [];
- for (let t of i) for (let n of t._zod.onattach) n(e);
- if (i.length === 0) (n = e._zod).deferred ?? (n.deferred = []), e._zod.deferred?.push(() => {
- e._zod.run = e._zod.parse;
- });
- else {
- let t = (t, n, r) => {
- if (t.memo) return t;
- let i = x(t), a;
- for (let o of n) {
- if (o._zod.def.when) {
- if (ye(t) || !o._zod.def.when(t)) continue;
- } else if (i) continue;
- let n = t.issues.length, s = o._zod.check(t);
- if (s instanceof Promise && r?.async === !1) throw new k();
- if (a || s instanceof Promise) a = (a ?? Promise.resolve()).then(async () => {
- await s, t.issues.length !== n && (xe(t.issues, n, e), i ||= x(t, n));
- });
- else {
- if (t.issues.length === n) continue;
- xe(t.issues, n, e), i ||= x(t, n);
- }
- }
- return a ? a.then(() => t) : t;
- }, n = (n, r, a) => {
- if (x(n)) return n.aborted = !0, n;
- let o = t(r, i, a);
- if (o instanceof Promise) {
- if (a.async === !1) throw new k();
- return o.then((t) => e._zod.parse(t, a));
- }
- return e._zod.parse(o, a);
- };
- e._zod.run = (r, a) => {
- if (a.skipChecks) return e._zod.parse(r, a);
- if (a.direction === "backward") {
- let t = e._zod.parse({
- value: r.value,
- issues: []
- }, {
- ...a,
- skipChecks: !0
- });
- return t instanceof Promise ? t.then((e) => n(e, r, a)) : n(t, r, a);
- }
- let o = e._zod.parse(r, a);
- if (o instanceof Promise) {
- if (a.async === !1) throw new k();
- return o.then((e) => t(e, i, a));
- }
- return t(o, i, a);
- };
- }
-}, {
- get "~standard"() {
- return De(this, "~standard", hn(this));
- },
- set "~standard"(e) {
- T(this, "~standard", e);
- }
-}), pn = (e, t) => e.issues.length ? { issues: e.issues.map((e) => C(e, t, j())) } : { value: e.value };
-async function mn(e, t) {
- let n = { async: !0 };
- return pn(await e._zod.run({
- value: t,
- issues: []
- }, n), n);
-}
-function hn(e) {
- return {
- validate: (t) => {
- let n = { async: !1 };
- try {
- let r = e._zod.run({
- value: t,
- issues: []
- }, n);
- if (!(r instanceof Promise)) return pn(r, n);
- } catch {}
- return mn(e, t);
- },
- vendor: "zod",
- version: 1
- };
-}
-var gn = /*@__PURE__*/ O("$ZodString", (e, t) => {
- N.init(e, t), e._zod.pattern = t.pattern ?? Ut, e._zod.parse = (n, r) => {
- if (t.coerce) try {
- n.value = String(n.value);
- } catch {}
- return typeof n.value == "string" || n.issues.push({
- expected: "string",
- code: "invalid_type",
- input: n.value,
- inst: e
- }), n;
- };
-}), P = /*@__PURE__*/ O("$ZodStringFormat", (e, t) => {
- nn.init(e, t), gn.init(e, t);
-}), _n = /*@__PURE__*/ O("$ZodGUID", (e, t) => {
- t.pattern ??= wt, P.init(e, t);
-}), vn = /*@__PURE__*/ O("$ZodUUID", (e, t) => {
- if (t.version) {
- let e = {
- v1: 1,
- v2: 2,
- v3: 3,
- v4: 4,
- v5: 5,
- v6: 6,
- v7: 7,
- v8: 8
- }[t.version];
- if (e === void 0) throw Error(`Invalid UUID version: "${t.version}"`);
- t.pattern ??= Tt(e);
- } else t.pattern ??= Tt();
- P.init(e, t);
-}), yn = /*@__PURE__*/ O("$ZodEmail", (e, t) => {
- t.pattern ??= Et, P.init(e, t);
-});
-function bn(e) {
- try {
- return typeof URL < "u" && typeof URL.canParse == "function" ? URL.canParse(e) : (new URL(e), !0);
- } catch {
- return !1;
- }
-}
-function xn(e, t) {
- return !("normalize" in t) && !("hostname" in t) && !("protocol" in t) ? bn(e) || 2 : Sn(e, t);
-}
-function Sn(e, t) {
- if (!t.normalize && t.protocol?.source === Ft.source && !/^https?:\/\//i.test(e)) return 1;
- try {
- if (typeof URL < "u") {
- let t = URL;
- if (typeof t.parse == "function") return t.parse(e) ?? 2;
- }
- return new URL(e);
- } catch {
- return 2;
- }
-}
-var Cn = /[\t\n\r]/g;
-function wn(e) {
- return e.replace(Cn, "");
-}
-function Tn(e, t) {
- return t.lastIndex = 0, t.test(e.hostname);
-}
-function En(e, t) {
- return t.lastIndex = 0, t.test(e.protocol.endsWith(":") ? e.protocol.slice(0, -1) : e.protocol);
-}
-var Dn = /*@__PURE__*/ O("$ZodURL", (e, t) => {
- P.init(e, t), e._zod.check = (n) => {
- try {
- let r = n.value.trim(), i = xn(r, t);
- if (i === 1) {
- n.issues.push({
- code: "invalid_format",
- format: "url",
- note: "Invalid URL format",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- return;
- }
- if (i === 2) {
- n.issues.push({
- code: "invalid_format",
- format: "url",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- return;
- }
- if (i === !0) {
- n.value = wn(r);
- return;
- }
- t.hostname && !Tn(i, t.hostname) && n.issues.push({
- code: "invalid_format",
- format: "url",
- note: "Invalid hostname",
- pattern: t.hostname.source,
- input: n.value,
- inst: e,
- continue: !t.abort
- }), t.protocol && !En(i, t.protocol) && n.issues.push({
- code: "invalid_format",
- format: "url",
- note: "Invalid protocol",
- pattern: t.protocol.source,
- input: n.value,
- inst: e,
- continue: !t.abort
- }), n.value = t.normalize ? i.href : wn(r);
- return;
- } catch {
- n.issues.push({
- code: "invalid_format",
- format: "url",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- }
- };
-}), On = /*@__PURE__*/ O("$ZodEmoji", (e, t) => {
- t.pattern ??= Ot(), P.init(e, t);
-}), kn = /*@__PURE__*/ O("$ZodNanoID", (e, t) => {
- if (t.length !== void 0 && (!Number.isInteger(t.length) || t.length < 1)) throw Error(`Invalid nanoid length: ${t.length}`);
- t.pattern ??= t.length === void 0 ? xt : St(t.length), P.init(e, t);
-}), An = /*@__PURE__*/ O("$ZodCUID", (e, t) => {
- t.pattern ??= gt, P.init(e, t);
-}), jn = /*@__PURE__*/ O("$ZodCUID2", (e, t) => {
- t.pattern ??= _t, P.init(e, t);
-}), Mn = /*@__PURE__*/ O("$ZodULID", (e, t) => {
- t.pattern ??= vt, P.init(e, t);
-}), Nn = /*@__PURE__*/ O("$ZodXID", (e, t) => {
- t.pattern ??= yt, P.init(e, t);
-}), Pn = /*@__PURE__*/ O("$ZodKSUID", (e, t) => {
- t.pattern ??= bt, P.init(e, t);
-}), Fn = /*@__PURE__*/ O("$ZodISODateTime", (e, t) => {
- t.pattern ??= Ht(t), P.init(e, t);
-}), In = /*@__PURE__*/ O("$ZodISODate", (e, t) => {
- t.pattern ??= zt, P.init(e, t);
-}), Ln = /*@__PURE__*/ O("$ZodISOTime", (e, t) => {
- t.pattern ??= Vt(t), P.init(e, t);
-}), Rn = /*@__PURE__*/ O("$ZodISODuration", (e, t) => {
- t.pattern ??= Ct, P.init(e, t);
-}), zn = /*@__PURE__*/ O("$ZodIPv4", (e, t) => {
- t.pattern ??= kt, P.init(e, t);
-}), Bn = /^[0-9a-fA-F:.]+$/;
-function Vn(e) {
- return Bn.test(e) ? bn(`http://[${e}]`) : !1;
-}
-var Hn = /*@__PURE__*/ O("$ZodIPv6", (e, t) => {
- t.pattern ??= At, P.init(e, t), e._zod.check = (n) => {
- Vn(n.value) || n.issues.push({
- code: "invalid_format",
- format: "ipv6",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), Un = /*@__PURE__*/ O("$ZodCIDRv4", (e, t) => {
- t.pattern ??= jt, P.init(e, t);
-});
-function Wn(e) {
- let t = e.split("/");
- if (t.length !== 2) return !1;
- let [n, r] = t;
- if (!r) return !1;
- let i = Number(r);
- return `${i}` !== r || i < 0 || i > 128 ? !1 : Vn(n);
-}
-var Gn = /*@__PURE__*/ O("$ZodCIDRv6", (e, t) => {
- t.pattern ??= Mt, P.init(e, t), e._zod.check = (n) => {
- Wn(n.value) || n.issues.push({
- code: "invalid_format",
- format: "cidrv6",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-});
-function Kn(e) {
- if (e === "") return !0;
- if (/\s/.test(e) || e.length % 4 != 0) return !1;
- try {
- return atob(e), !0;
- } catch {
- return !1;
- }
-}
-var qn = /^[0-9a-zA-Z+/]*={0,2}$/, Jn = /*@__PURE__*/ O("$ZodBase64", (e, t) => {
- t.pattern ??= qn, P.init(e, t), e._zod.check = (n) => {
- Kn(n.value) || n.issues.push({
- code: "invalid_format",
- format: "base64",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), Yn = /^[A-Za-z0-9_-]*$/;
-function Xn(e) {
- if (!Yn.test(e)) return !1;
- let t = e.replace(/[-_]/g, (e) => e === "-" ? "+" : "/");
- return Kn(t.padEnd(Math.ceil(t.length / 4) * 4, "="));
-}
-var Zn = /*@__PURE__*/ O("$ZodBase64URL", (e, t) => {
- t.pattern ??= Yn, P.init(e, t), e._zod.check = (n) => {
- Xn(n.value) || n.issues.push({
- code: "invalid_format",
- format: "base64url",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), Qn = /*@__PURE__*/ O("$ZodE164", (e, t) => {
- t.pattern ??= It, P.init(e, t);
-});
-function $n(e, t = null) {
- try {
- let n = e.split(".");
- if (n.length !== 3) return !1;
- let [r] = n;
- if (!r) return !1;
- let i = JSON.parse(atob(r));
- return !("typ" in i && i?.typ !== "JWT" || !i.alg || t && (!("alg" in i) || i.alg !== t));
- } catch {
- return !1;
- }
-}
-var er = /*@__PURE__*/ O("$ZodJWT", (e, t) => {
- P.init(e, t), e._zod.check = (n) => {
- $n(n.value, t.alg) || n.issues.push({
- code: "invalid_format",
- format: "jwt",
- input: n.value,
- inst: e,
- continue: !t.abort
- });
- };
-}), tr = /*@__PURE__*/ O("$ZodNumber", (e, t) => {
- N.init(e, t), e._zod.pattern = Wt, e._zod.parse = (n, r) => {
- if (t.coerce) try {
- n.value = Number(n.value);
- } catch {}
- let i = n.value;
- if (typeof i == "number" && !Number.isNaN(i) && Number.isFinite(i)) return n;
- let a = typeof i == "number" ? Number.isNaN(i) ? "NaN" : Number.isFinite(i) ? void 0 : String(i) : void 0;
- return n.issues.push({
- expected: "number",
- code: "invalid_type",
- input: i,
- inst: e,
- ...a ? { received: a } : {}
- }), n;
- };
-}), nr = /*@__PURE__*/ O("$ZodNumberFormat", (e, t) => {
- Qt.init(e, t), tr.init(e, t);
-}), rr = /*@__PURE__*/ O("$ZodUnknown", (e, t) => {
- N.init(e, t), e._zod.parse = (e) => e;
-}), ir = /*@__PURE__*/ O("$ZodNever", (e, t) => {
- N.init(e, t), e._zod.parse = (t, n) => (t.issues.push({
- expected: "never",
- code: "invalid_type",
- input: t.value,
- inst: e
- }), t);
-});
-function ar(e, t, n) {
- e.issues.length && t.issues.push(...be(n, e.issues)), t.value[n] = e.value;
-}
-var or = /*@__PURE__*/ O("$ZodArray", (e, t) => {
- N.init(e, t);
- let n = A.memoizer;
- n?.attach(e), e._zod.parse = (r, i) => {
- let a = r.value;
- if (!Array.isArray(a)) return r.issues.push({
- expected: "array",
- code: "invalid_type",
- input: a,
- inst: e
- }), r;
- r.value = n ? n.alloc(e, r, Array(a.length), i) : Array(a.length);
- let o = [], s = i?.abortEarly;
- for (let e = 0; e < a.length; e++) {
- let n = a[e], c = t.element._zod.run({
- value: n,
- issues: []
- }, i);
- if (c instanceof Promise) o.push(c.then((t) => ar(t, r, e)));
- else if (ar(c, r, e), s && c.issues.length !== 0 && x(c)) break;
- }
- return o.length ? Promise.all(o).then(() => r) : r;
- };
-});
-function sr(e, t, n, r, i, a) {
- let o = n in r, s = a === "optional";
- if (o || !s || i !== "optional") {
- if (e.issues.length) {
- if (i !== void 0 && s && !o) return;
- t.issues.push(...be(n, e.issues));
- }
- !o && i === void 0 ? e.issues.length || t.issues.push({
- code: "invalid_type",
- expected: "nonoptional",
- input: void 0,
- path: [n]
- }) : e.value === void 0 ? (o || i === "defaulted" && !s) && (t.value[n] = void 0) : t.value[n] = e.value;
- }
-}
-var cr = [];
-function lr(e) {
- let t = Object.keys(e.shape), n = Object.getOwnPropertySymbols(e.shape), r = n.length ? n : cr, i = r.length ? [...t, ...r] : t;
- for (let t of i) if (!e.shape?.[t]?._zod?.traits?.has("$ZodType")) throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);
- let a = se(e.shape);
- return {
- ...e,
- allKeys: i,
- symbolKeys: r,
- keySet: new Set(t),
- numKeys: t.length,
- optionalKeys: new Set(a)
- };
-}
-function ur(e, t, n, r, i, a, o) {
- let s = [], c = i.keySet, l = i.catchall._zod, u = l.def.type, d = l.optin, f = l.optout, p = 0;
- for (let i in t) {
- if (o && n.issues.length !== p) {
- if (x(n, p)) break;
- p = n.issues.length;
- }
- if (c.has(i)) continue;
- if (i === "__proto__") {
- u === "never" && s.push(i);
- continue;
- }
- if (u === "never") {
- s.push(i);
- continue;
- }
- let a = l.run({
- value: t[i],
- issues: []
- }, r);
- a instanceof Promise ? e.push(a.then((e) => sr(e, n, i, t, d, f))) : sr(a, n, i, t, d, f);
- }
- return s.length && n.issues.push({
- code: "unrecognized_keys",
- keys: s,
- input: t,
- inst: a,
- continue: !0
- }), e.length ? Promise.all(e).then(() => n) : n;
-}
-var dr = /*@__PURE__*/ O("$ZodObject", (e, t) => {
- N.init(e, t);
- let n = Object.getOwnPropertyDescriptor(t, "shape"), r = n?.get ? n.get.raw : t.shape ?? {};
- if (r) {
- let e = () => {
- let n = { ...r };
- return Object.defineProperty(t, "shape", { value: n }), e.raw = n, n;
- };
- e.raw = r, Object.defineProperty(t, "shape", { get: e });
- }
- let a = i(() => lr(t));
- D(e, "propValues", (e) => {
- let t = e.def.shape, n = {};
- for (let e in t) {
- let r = t[e]._zod;
- if (r.values) {
- Object.prototype.hasOwnProperty.call(n, e) || c(n, e, /* @__PURE__ */ new Set());
- for (let t of r.values) n[e].add(t);
- r.optin !== void 0 && n[e].add(void 0);
- }
- }
- return n;
- });
- let o = g, s = t.catchall, l, u = A.memoizer;
- u?.attach(e), e._zod.parse = (t, n) => {
- l ??= a.value;
- let r = t.value;
- if (!o(r)) return t.issues.push({
- expected: "object",
- code: "invalid_type",
- input: r,
- inst: e
- }), t;
- t.value = u ? u.alloc(e, t, {}, n) : {};
- let i = [], c = l.shape, d = n?.abortEarly, f = t.issues.length;
- for (let e of l.allKeys) {
- if (d && t.issues.length !== f) {
- if (x(t, f)) break;
- f = t.issues.length;
- }
- if (e === "__proto__") continue;
- let a = c[e], o = a._zod.optin, s = a._zod.optout, l = a._zod.run({
- value: r[e],
- issues: []
- }, n);
- l instanceof Promise ? i.push(l.then((n) => sr(n, t, e, r, o, s))) : sr(l, t, e, r, o, s);
- }
- return s ? ur(i, r, t, n, a.value, e, d === !0) : i.length ? Promise.all(i).then(() => t) : t;
- };
-}), fr = /*@__PURE__*/ O("$ZodObjectJIT", (e, t) => {
- dr.init(e, t);
- let n = e._zod.parse, r = i(() => lr(t)), a = A.memoizer, o = (t) => {
- let n = r.value, i = n.symbolKeys, o = new dn(["payload", "ctx"], {
- shape: t,
- inst: e,
- memo: a,
- syms: i
- }), s = (e) => `shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`, c = (e, t) => `
+function e(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function t(e,t=`|`){return e.map(e=>oe(e)).join(t)}function n(e,t){return typeof t==`bigint`?t.toString():t}var r=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function i(e){return new r(e)}function a(e){return e==null}function o(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function s(e,t){let n=e/t,r=Math.round(n),i=4*2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){let e=t._zod.def.shape[a];return r?r(e,a):e}):f(e,a,r?r(n.value,a):n.value))}}function m(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?d(e,n,()=>t[n]):f(e,n,r.value))}}function h(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function ee(e){return JSON.stringify(e)}function te(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var ne=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function g(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var re=/* @__PURE__*/ i(()=>{if(A.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function _(e){if(g(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return g(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function ie(e){return _(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var ae=/* @__PURE__*/ new Set([`string`,`number`,`symbol`]);function v(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function y(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function b(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function oe(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function se(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var ce={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},le={int64:[/* @__PURE__*/ BigInt(`-9223372036854775808`),/* @__PURE__*/ BigInt(`9223372036854775807`)],uint64:[/* @__PURE__*/ BigInt(0),/* @__PURE__*/ BigInt(`18446744073709551615`)]};function ue(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return p(i,e,de(e,t)),y(e,h(n,{shape:i,checks:[]}))}function de(e,t){let n=u(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function fe(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set(de(e,t)),a={};return p(a,e,Reflect.ownKeys(u(e)).filter(e=>!i.has(e))),y(e,h(n,{shape:a,checks:[]}))}function pe(e,t){if(!_(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=u(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return y(e,h(e._zod.def,{shape:me(e,t)}))}function me(e,t){let n={};return p(n,e,Reflect.ownKeys(u(e))),m(n,t),n}function he(e,t){if(!_(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return y(e,h(e._zod.def,{shape:me(e,t)}))}function ge(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return p(n,e,Reflect.ownKeys(u(e))),p(n,t,Reflect.ownKeys(u(t))),y(e,h(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function _e(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set(de(t,n)):void 0,o={};return p(o,t,Reflect.ownKeys(u(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),y(t,h(t._zod.def,{shape:o,checks:[]}))}function ve(e,t,n){let r=n?new Set(de(t,n)):void 0,i={};return p(i,t,Reflect.ownKeys(u(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),y(t,h(t._zod.def,{shape:i}))}function x(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function S(e){return typeof e==`string`?e:e?.message}function xe(e,t,n){var r;for(let i=t;ie;return t[Pe]=!0,t}var Ie,Le={value:void 0,enumerable:!1},Re=`captureStackTrace`in Error?Error:null;function ze(e){let t=Re;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return Re=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function O(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=/* @__PURE__ */ new Set}a.prototype=i;let o=n,s=o&&/* @__PURE__ */ new WeakSet;function c(n,r){if(!n._zod){Le.value=new a(r);try{Object.defineProperty(n,"_zod",Le)}finally{Le.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),Ee(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?ze(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var k=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},Be=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Ie=globalThis).__zod_globalConfig??(Ie.__zod_globalConfig={});var A=globalThis.__zod_globalConfig;function j(e){return e&&Object.assign(A,e),A}function Ve(){let e=this._zod;return e.message??=JSON.stringify(e.def,n,2),e.message}function He(e){this._zod.message=e}var Ue={get:Ve,set:He,enumerable:!0,configurable:!0},We={value:void 0,enumerable:!1},Ge=/* @__PURE__ */ new WeakSet([Object.prototype,Error.prototype]),Ke=(e,t)=>{e.name=`$ZodError`,We.value=t,Object.defineProperty(e,"issues",We),We.value=void 0,Object.defineProperty(e,"message",Ue);let n=Object.getPrototypeOf(e);Ge.has(n)||(Ge.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))},qe=O(`$ZodError`,Ke);O(`$ZodError`,Ke,void 0,{Parent:Error});function Je(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function Ye(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?Je(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Xe(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new k;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>C(e,o,j())));throw ne(n,a?.callee??t),n}return s.value};return t},$e=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>C(e,o,j())));throw ne(n,a?.callee??t),n}return s.value};return t},et=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new k;return a.issues.length?tt(e,a.issues,i):{success:!0,data:a.value}};function tt(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>C(e,n,j()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var nt=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?tt(e,a.issues,i):{success:!0,data:a.value}},rt=/* @__PURE__ */ Symbol.for(`zod.compile.invalid`),it=/* @__PURE__ */ Symbol.for(`zod.compile.fallback`),at=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==rt)return!0;if(r.definite===!0&&n===void 0)return!1}return ot(e,t,n)});function ot(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[it]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new k;return a.issues.length===0}var st=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},ct=e=>{let t=Qe(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,Ze(n,a))};return n},lt=e=>{let t=Qe(e),n=(e,r,i,a)=>t(e,r,i,Ze(n,a));return n},ut=e=>{let t=$e(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,Ze(n,a))};return n},dt=e=>{let t=$e(e),n=async(e,r,i,a)=>await t(e,r,i,Ze(n,a));return n},ft=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return et(e)(t,n,i)},pt=e=>(t,n,r)=>et(e)(t,n,r),mt=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return nt(e)(t,n,i)},ht=e=>async(t,n,r)=>nt(e)(t,n,r),gt=/^[cC][0-9a-z]{6,}$/,_t=/^[0-9a-z]+$/,vt=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,yt=/^[0-9a-vA-V]{20}$/,bt=/^[A-Za-z0-9]{27}$/,xt=/^[a-zA-Z0-9_-]{21}$/;function St(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var Ct=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,wt=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Tt=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Et=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Dt=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function Ot(){return new RegExp(Dt,`u`)}var kt=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,At=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,jt=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Mt=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Nt=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Pt=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,Ft=/^https?$/,It=/^\+[1-9]\d{6,14}$/,Lt=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function Rt(e){return RegExp(`^${e}$`)}var zt=/*@__PURE__*/ Rt(Lt);function Bt(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Vt(e){return RegExp(`^${Bt(e)}$`)}function Ht(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${Bt({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${Bt({precision:e.precision})}`:n;return RegExp(`^${Lt}T(?:${r})$`)}var Ut=/^[\s\S]{0,}$/,Wt=/^-?\d+(?:\.\d+)?$/,Gt=/^[^A-Z]*$/,Kt=/^[^a-z]*$/,M=/*@__PURE__*/ O(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),qt=e=>{let t=e.value;return!a(t)&&t.length!==void 0},Jt={number:`number`,bigint:`bigint`,object:`date`},Yt=/*@__PURE__*/ O(`$ZodCheckLessThan`,(e,t)=>{M.init(e,t);let n=Jt[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value{M.init(e,t);let n=Jt[typeof t.value];e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:Jt[typeof r.value]??n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Zt=/*@__PURE__*/ O(`$ZodCheckMultipleOf`,(e,t)=>{M.init(e,t),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?t.value!==BigInt(0)&&n.value%t.value===BigInt(0):s(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Qt=/*@__PURE__*/ O(`$ZodCheckNumberFormat`,(e,t)=>{M.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=ce[t.format];e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),$t=/*@__PURE__*/ O(`$ZodCheckMaxLength`,(e,t)=>{var n;M.init(e,t),(n=e._zod.def).when??(n.when=qt),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?Ce(r):i)<=t.maximum)return;let a=we(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),en=/*@__PURE__*/ O(`$ZodCheckMinLength`,(e,t)=>{var n;M.init(e,t),(n=e._zod.def).when??(n.when=qt),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i=t.minimum)return;let a=we(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),tn=/*@__PURE__*/ O(`$ZodCheckLengthEquals`,(e,t)=>{var n;M.init(e,t),(n=e._zod.def).when??(n.when=qt),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?Ce(r):i;if(a===t.length)return;let o=we(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),nn=/*@__PURE__*/ O(`$ZodCheckStringFormat`,(e,t)=>{var n,r;M.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),rn=/*@__PURE__*/ O(`$ZodCheckRegex`,(e,t)=>{nn.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),an=/*@__PURE__*/ O(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Gt,nn.init(e,t)}),on=/*@__PURE__*/ O(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Kt,nn.init(e,t)}),sn=/*@__PURE__*/ O(`$ZodCheckIncludes`,(e,t)=>{M.init(e,t);let n=v(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),cn=/*@__PURE__*/ O(`$ZodCheckStartsWith`,(e,t)=>{M.init(e,t);let n=RegExp(`^${v(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),ln=/*@__PURE__*/ O(`$ZodCheckEndsWith`,(e,t)=>{M.init(e,t);let n=RegExp(`.*${v(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),un=/*@__PURE__*/ O(`$ZodCheckOverwrite`,(e,t)=>{M.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),dn=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
+`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.content??[``];return new e(...Object.keys(this.closed),`return function (${this.args.join(`, `)}) {\n${t.join(`
+`)}\n};`)(...Object.values(this.closed))}},fn={major:4,minor:6,patch:5},N=/*@__PURE__*/ O(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=fn;let r=e._zod.def.checks,i=e._zod.traits.has(`$ZodCheck`)?[e,...r??[]]:r?.length?[...r]:[];for(let t of i)for(let n of t._zod.onattach)n(e);if(i.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(t,n,r)=>{if(t.memo)return t;let i=x(t),a;for(let o of n){if(o._zod.def.when){if(ye(t)||!o._zod.def.when(t))continue}else if(i)continue;let n=t.issues.length,s=o._zod.check(t);if(s instanceof Promise&&r?.async===!1)throw new k;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,t.issues.length!==n&&(xe(t.issues,n,e),i||=x(t,n))});else{if(t.issues.length===n)continue;xe(t.issues,n,e),i||=x(t,n)}}return a?a.then(()=>t):t},n=(n,r,a)=>{if(x(n))return n.aborted=!0,n;let o=t(r,i,a);if(o instanceof Promise){if(a.async===!1)throw new k;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(r,a)=>{if(a.skipChecks)return e._zod.parse(r,a);if(a.direction===`backward`){let t=e._zod.parse({value:r.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,r,a)):n(t,r,a)}let o=e._zod.parse(r,a);if(o instanceof Promise){if(a.async===!1)throw new k;return o.then(e=>t(e,i,a))}return t(o,i,a)}}},{get"~standard"(){return De(this,`~standard`,hn(this))},set"~standard"(e){T(this,`~standard`,e)}}),pn=(e,t)=>e.issues.length?{issues:e.issues.map(e=>C(e,t,j()))}:{value:e.value};async function mn(e,t){let n={async:!0};return pn(await e._zod.run({value:t,issues:[]},n),n)}function hn(e){return{validate:t=>{let n={async:!1};try{let r=e._zod.run({value:t,issues:[]},n);if(!(r instanceof Promise))return pn(r,n)}catch{}return mn(e,t)},vendor:`zod`,version:1}}var gn=/*@__PURE__*/ O(`$ZodString`,(e,t)=>{N.init(e,t),e._zod.pattern=t.pattern??Ut,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),P=/*@__PURE__*/ O(`$ZodStringFormat`,(e,t)=>{nn.init(e,t),gn.init(e,t)}),_n=/*@__PURE__*/ O(`$ZodGUID`,(e,t)=>{t.pattern??=wt,P.init(e,t)}),vn=/*@__PURE__*/ O(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=Tt(e)}else t.pattern??=Tt();P.init(e,t)}),yn=/*@__PURE__*/ O(`$ZodEmail`,(e,t)=>{t.pattern??=Et,P.init(e,t)});function bn(e){try{return typeof URL<`u`&&typeof URL.canParse==`function`?URL.canParse(e):(new URL(e),!0)}catch{return!1}}function xn(e,t){return!(`normalize`in t)&&!(`hostname`in t)&&!(`protocol`in t)?bn(e)||2:Sn(e,t)}function Sn(e,t){if(!t.normalize&&t.protocol?.source===Ft.source&&!/^https?:\/\//i.test(e))return 1;try{if(typeof URL<`u`){let t=URL;if(typeof t.parse==`function`)return t.parse(e)??2}return new URL(e)}catch{return 2}}var Cn=/[\t\n\r]/g;function wn(e){return e.replace(Cn,``)}function Tn(e,t){return t.lastIndex=0,t.test(e.hostname)}function En(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(`:`)?e.protocol.slice(0,-1):e.protocol)}var Dn=/*@__PURE__*/ O(`$ZodURL`,(e,t)=>{P.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=xn(r,t);if(i===1){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}if(i===2){n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort});return}if(i===!0){n.value=wn(r);return}t.hostname&&!Tn(i,t.hostname)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort}),t.protocol&&!En(i,t.protocol)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort}),n.value=t.normalize?i.href:wn(r);return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),On=/*@__PURE__*/ O(`$ZodEmoji`,(e,t)=>{t.pattern??=Ot(),P.init(e,t)}),kn=/*@__PURE__*/ O(`$ZodNanoID`,(e,t)=>{if(t.length!==void 0&&(!Number.isInteger(t.length)||t.length<1))throw Error(`Invalid nanoid length: ${t.length}`);t.pattern??=t.length===void 0?xt:St(t.length),P.init(e,t)}),An=/*@__PURE__*/ O(`$ZodCUID`,(e,t)=>{t.pattern??=gt,P.init(e,t)}),jn=/*@__PURE__*/ O(`$ZodCUID2`,(e,t)=>{t.pattern??=_t,P.init(e,t)}),Mn=/*@__PURE__*/ O(`$ZodULID`,(e,t)=>{t.pattern??=vt,P.init(e,t)}),Nn=/*@__PURE__*/ O(`$ZodXID`,(e,t)=>{t.pattern??=yt,P.init(e,t)}),Pn=/*@__PURE__*/ O(`$ZodKSUID`,(e,t)=>{t.pattern??=bt,P.init(e,t)}),Fn=/*@__PURE__*/ O(`$ZodISODateTime`,(e,t)=>{t.pattern??=Ht(t),P.init(e,t)}),In=/*@__PURE__*/ O(`$ZodISODate`,(e,t)=>{t.pattern??=zt,P.init(e,t)}),Ln=/*@__PURE__*/ O(`$ZodISOTime`,(e,t)=>{t.pattern??=Vt(t),P.init(e,t)}),Rn=/*@__PURE__*/ O(`$ZodISODuration`,(e,t)=>{t.pattern??=Ct,P.init(e,t)}),zn=/*@__PURE__*/ O(`$ZodIPv4`,(e,t)=>{t.pattern??=kt,P.init(e,t)}),Bn=/^[0-9a-fA-F:.]+$/;function Vn(e){return Bn.test(e)?bn(`http://[${e}]`):!1}var Hn=/*@__PURE__*/ O(`$ZodIPv6`,(e,t)=>{t.pattern??=At,P.init(e,t),e._zod.check=n=>{Vn(n.value)||n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}),Un=/*@__PURE__*/ O(`$ZodCIDRv4`,(e,t)=>{t.pattern??=jt,P.init(e,t)});function Wn(e){let t=e.split(`/`);if(t.length!==2)return!1;let[n,r]=t;if(!r)return!1;let i=Number(r);return`${i}`!==r||i<0||i>128?!1:Vn(n)}var Gn=/*@__PURE__*/ O(`$ZodCIDRv6`,(e,t)=>{t.pattern??=Mt,P.init(e,t),e._zod.check=n=>{Wn(n.value)||n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}});function Kn(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var qn=/^[0-9a-zA-Z+/]*={0,2}$/,Jn=/*@__PURE__*/ O(`$ZodBase64`,(e,t)=>{t.pattern??=qn,P.init(e,t),e._zod.check=n=>{Kn(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}}),Yn=/^[A-Za-z0-9_-]*$/;function Xn(e){if(!Yn.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return Kn(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Zn=/*@__PURE__*/ O(`$ZodBase64URL`,(e,t)=>{t.pattern??=Yn,P.init(e,t),e._zod.check=n=>{Xn(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Qn=/*@__PURE__*/ O(`$ZodE164`,(e,t)=>{t.pattern??=It,P.init(e,t)});function $n(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var er=/*@__PURE__*/ O(`$ZodJWT`,(e,t)=>{P.init(e,t),e._zod.check=n=>{$n(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),tr=/*@__PURE__*/ O(`$ZodNumber`,(e,t)=>{N.init(e,t),e._zod.pattern=Wt,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:String(i):void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),nr=/*@__PURE__*/ O(`$ZodNumberFormat`,(e,t)=>{Qt.init(e,t),tr.init(e,t)}),rr=/*@__PURE__*/ O(`$ZodUnknown`,(e,t)=>{N.init(e,t),e._zod.parse=e=>e}),ir=/*@__PURE__*/ O(`$ZodNever`,(e,t)=>{N.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function ar(e,t,n){e.issues.length&&t.issues.push(...be(n,e.issues)),t.value[n]=e.value}var or=/*@__PURE__*/ O(`$ZodArray`,(e,t)=>{N.init(e,t);let n=A.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({expected:`array`,code:`invalid_type`,input:a,inst:e}),r;r.value=n?n.alloc(e,r,Array(a.length),i):Array(a.length);let o=[],s=i?.abortEarly;for(let e=0;ear(t,r,e)));else if(ar(c,r,e),s&&c.issues.length!==0&&x(c))break}return o.length?Promise.all(o).then(()=>r):r}});function sr(e,t,n,r,i,a){let o=n in r,s=a===`optional`;if(o||!s||i!==`optional`){if(e.issues.length){if(i!==void 0&&s&&!o)return;t.issues.push(...be(n,e.issues))}!o&&i===void 0?e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]}):e.value===void 0?(o||i===`defaulted`&&!s)&&(t.value[n]=void 0):t.value[n]=e.value}}var cr=[];function lr(e){let t=Object.keys(e.shape),n=Object.getOwnPropertySymbols(e.shape),r=n.length?n:cr,i=r.length?[...t,...r]:t;for(let t of i)if(!e.shape?.[t]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);let a=se(e.shape);return{...e,allKeys:i,symbolKeys:r,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(a)}}function ur(e,t,n,r,i,a,o){let s=[],c=i.keySet,l=i.catchall._zod,u=l.def.type,d=l.optin,f=l.optout,p=0;for(let i in t){if(o&&n.issues.length!==p){if(x(n,p))break;p=n.issues.length}if(c.has(i))continue;if(i===`__proto__`){u===`never`&&s.push(i);continue}if(u===`never`){s.push(i);continue}let a=l.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>sr(e,n,i,t,d,f))):sr(a,n,i,t,d,f)}return s.length&&n.issues.push({code:`unrecognized_keys`,keys:s,input:t,inst:a,continue:!0}),e.length?Promise.all(e).then(()=>n):n}var dr=/*@__PURE__*/ O(`$ZodObject`,(e,t)=>{N.init(e,t);let n=Object.getOwnPropertyDescriptor(t,`shape`),r=n?.get?n.get.raw:t.shape??{};if(r){let e=()=>{let n={...r};return Object.defineProperty(t,"shape",{value:n}),e.raw=n,n};e.raw=r,Object.defineProperty(t,"shape",{get:e})}let a=i(()=>lr(t));D(e,`propValues`,e=>{let t=e.def.shape,n={};for(let e in t){let r=t[e]._zod;if(r.values){Object.prototype.hasOwnProperty.call(n,e)||c(n,e,/* @__PURE__ */ new Set);for(let t of r.values)n[e].add(t);r.optin!==void 0&&n[e].add(void 0)}}return n});let o=g,s=t.catchall,l,u=A.memoizer;u?.attach(e),e._zod.parse=(t,n)=>{l??=a.value;let r=t.value;if(!o(r))return t.issues.push({expected:`object`,code:`invalid_type`,input:r,inst:e}),t;t.value=u?u.alloc(e,t,{},n):{};let i=[],c=l.shape,d=n?.abortEarly,f=t.issues.length;for(let e of l.allKeys){if(d&&t.issues.length!==f){if(x(t,f))break;f=t.issues.length}if(e===`__proto__`)continue;let a=c[e],o=a._zod.optin,s=a._zod.optout,l=a._zod.run({value:r[e],issues:[]},n);l instanceof Promise?i.push(l.then(n=>sr(n,t,e,r,o,s))):sr(l,t,e,r,o,s)}return s?ur(i,r,t,n,a.value,e,d===!0):i.length?Promise.all(i).then(()=>t):t}}),fr=/*@__PURE__*/ O(`$ZodObjectJIT`,(e,t)=>{dr.init(e,t);let n=e._zod.parse,r=i(()=>lr(t)),a=A.memoizer,o=t=>{let n=r.value,i=n.symbolKeys,o=new dn([`payload`,`ctx`],{shape:t,inst:e,memo:a,syms:i}),s=e=>`shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`,c=(e,t)=>`
let ${e}_ab = false;
for (let i = 0; i < ${e}.issues.length; i++) {
const iss = ${e}.issues[i];
@@ -1534,20 +11,10 @@ var dr = /*@__PURE__*/ O("$ZodObject", (e, t) => {
if (${e}_ab && ctx && ctx.abortEarly) {
payload.value = newResult;
return payload;
- }`;
- o.write("const input = payload.value;");
- let l = Object.create(null), u = 0;
- for (let e of n.allKeys) l[e] = `key_${u++}`;
- o.write(a ? "const newResult = memo.alloc(inst, payload, {}, ctx);" : "const newResult = {};");
- for (let e of n.allKeys) {
- if (e === "__proto__") continue;
- let n = l[e], r = typeof e == "symbol" ? `syms[${i.indexOf(e)}]` : ee(e), a = `${r} in input`, u = t[e], d = u?._zod?.optin, f = d !== void 0, p = u?._zod?.optout === "optional";
- if (o.write(`const ${n} = ${s(r)};`), f && p) {
- let e = d === "optional" ? `${n}_present` : `${n}.value !== undefined || ${n}_present`;
- o.write(`
+ }`;o.write(`const input = payload.value;`);let l=Object.create(null),u=0;for(let e of n.allKeys)l[e]=`key_${u++}`;o.write(a?`const newResult = memo.alloc(inst, payload, {}, ctx);`:`const newResult = {};`);for(let e of n.allKeys){if(e===`__proto__`)continue;let n=l[e],r=typeof e==`symbol`?`syms[${i.indexOf(e)}]`:ee(e),a=`${r} in input`,u=t[e],d=u?._zod?.optin,f=d!==void 0,p=u?._zod?.optout===`optional`;if(o.write(`const ${n} = ${s(r)};`),f&&p){let e=d===`optional`?`${n}_present`:`${n}.value !== undefined || ${n}_present`;o.write(`
const ${n}_present = ${a};
if (!${n}.issues.length || ${n}_present) {
- if (${n}.issues.length) {${c(n, r)}
+ if (${n}.issues.length) {${c(n,r)}
}
if (${e}) {
@@ -1555,17 +22,16 @@ var dr = /*@__PURE__*/ O("$ZodObject", (e, t) => {
}
}
- `);
- } else f ? (o.write(`
- if (${n}.issues.length) {${c(n, r)}
+ `)}else f?(o.write(`
+ if (${n}.issues.length) {${c(n,r)}
}
- `), d === "defaulted" ? o.write(`newResult[${r}] = ${n}.value;`) : o.write(`
+ `),d===`defaulted`?o.write(`newResult[${r}] = ${n}.value;`):o.write(`
if (${n}.value !== undefined || ${a}) {
newResult[${r}] = ${n}.value;
}
- `)) : o.write(`
+ `)):o.write(`
const ${n}_present = ${a};
- if (${n}.issues.length) {${c(n, r)}
+ if (${n}.issues.length) {${c(n,r)}
}
if (!${n}_present && !${n}.issues.length) {
payload.issues.push({
@@ -1584,2527 +50,61 @@ var dr = /*@__PURE__*/ O("$ZodObject", (e, t) => {
newResult[${r}] = ${n}.value;
}
- `);
- }
- return o.write("payload.value = newResult;"), o.write("return payload;"), o.compile();
- }, s, c = g, l = !A.jitless, u = l && re.value, d = t.catchall, f;
- e._zod.parse = (i, a) => {
- f ??= r.value;
- let p = i.value;
- return c(p) ? l && u && a?.async === !1 && a.jitless !== !0 ? (s ||= o(t.shape), i = s(i, a), d ? ur([], p, i, a, f, e, a?.abortEarly === !0) : i) : n(i, a) : (i.issues.push({
- expected: "object",
- code: "invalid_type",
- input: p,
- inst: e
- }), i);
- };
-});
-function pr(e, t, n, r) {
- for (let n of e) if (n.issues.length === 0) return t.value = n.value, t;
- let i = e.filter((e) => !x(e));
- return i.length === 1 ? (t.value = i[0].value, i[0]) : (t.issues.push({
- code: "invalid_union",
- input: t.value,
- inst: n,
- errors: e.map((e) => e.issues.map((e) => C(e, r, j())))
- }), t);
-}
-var mr = /*@__PURE__*/ O("$ZodUnion", (e, t) => {
- N.init(e, t), D(e, "optin", (e) => e.def.options.some((e) => e._zod.optin === "defaulted") ? "defaulted" : e.def.options.some((e) => e._zod.optin !== void 0) ? "optional" : void 0), D(e, "optout", (e) => e.def.options.some((e) => e._zod.optout === "optional") ? "optional" : void 0), D(e, "values", (e) => {
- if (e.def.options.every((e) => e._zod.values)) return new Set(e.def.options.flatMap((e) => Array.from(e._zod.values)));
- }), D(e, "pattern", (e) => {
- if (e.def.options.every((e) => e._zod.pattern)) {
- let t = e.def.options.map((e) => e._zod.pattern);
- return RegExp(`^(${t.map((e) => o(e.source)).join("|")})$`);
- }
- });
- let n = t.options.length === 1 ? t.options[0]._zod.run : null;
- e._zod.parse = (r, i) => {
- if (n) return n(r, i);
- let a = !1, o = [];
- for (let e of t.options) {
- let t = e._zod.run({
- value: r.value,
- issues: []
- }, i);
- if (t instanceof Promise) o.push(t), a = !0;
- else {
- if (t.issues.length === 0) return t;
- o.push(t);
- }
- }
- return a ? Promise.all(o).then((t) => pr(t, r, e, i)) : pr(o, r, e, i);
- };
-});
-function hr(e) {
- let t = /* @__PURE__ */ new Map();
- for (let n of e.options) {
- let r = n._zod.propValues?.[e.discriminator];
- if (!r || r.size === 0) throw Error(`Invalid discriminated union option at index "${e.options.indexOf(n)}"`);
- for (let e of r) if (t.has(e)) {
- if (e !== void 0) throw Error(`Duplicate discriminator value "${String(e)}"`);
- t.set(e, null);
- } else t.set(e, n);
- }
- return t;
-}
-var gr = /*@__PURE__*/ O("$ZodDiscriminatedUnion", (e, t) => {
- t.inclusive = !1, mr.init(e, t);
- let n = e._zod.parse;
- D(e, "propValues", (e) => {
- let t = {}, n = 0;
- for (let r of e.def.options) {
- let i = r._zod.propValues;
- if (!i || Object.keys(i).length === 0) throw Error(`Invalid discriminated union option at index "${e.def.options.indexOf(r)}"`);
- i[e.def.discriminator]?.has(void 0) && n++;
- for (let [e, n] of Object.entries(i)) {
- Object.prototype.hasOwnProperty.call(t, e) || c(t, e, /* @__PURE__ */ new Set());
- for (let r of n) t[e].add(r);
- }
- }
- return !e.def.unionFallback && n > 1 && t[e.def.discriminator]?.delete(void 0), t;
- }), t.options.forEach((e, n) => {
- let r = l(e._zod.def);
- if (r && !Object.prototype.hasOwnProperty.call(r, t.discriminator)) throw Error(`Invalid discriminated union option at index "${n}"`);
- });
- let r = i(() => hr(t));
- e._zod.parse = (i, a) => {
- let o = i.value;
- if (!g(o)) return i.issues.push({
- code: "invalid_type",
- expected: "object",
- input: o,
- inst: e
- }), i;
- let s = o?.[t.discriminator], c = r.value.get(s);
- return c && (s !== void 0 || a.direction !== "backward") ? c._zod.run(i, a) : t.unionFallback || a.direction === "backward" ? n(i, a) : (i.issues.push({
- code: "invalid_union",
- errors: [],
- note: "No matching discriminator",
- discriminator: t.discriminator,
- options: Array.from(r.value.keys()).filter((e) => r.value.get(e) !== null),
- input: o,
- path: [t.discriminator],
- inst: e
- }), i);
- };
-}), _r = /*@__PURE__*/ O("$ZodIntersection", (e, t) => {
- N.init(e, t), e._zod.parse = (e, n) => {
- let r = e.value, i = t.left._zod.run({
- value: r,
- issues: []
- }, n), a = t.right._zod.run({
- value: r,
- issues: []
- }, n);
- return i instanceof Promise || a instanceof Promise ? Promise.all([i, a]).then(([t, n]) => yr(e, t, n)) : yr(e, i, a);
- };
-});
-function vr(e, t) {
- if (e === t || e instanceof Date && t instanceof Date && +e == +t) return {
- valid: !0,
- data: e
- };
- if (_(e) && _(t)) {
- let n = Object.keys(t), r = Object.keys(e).filter((e) => n.indexOf(e) !== -1), i = {
- ...e,
- ...t
- };
- Object.prototype.hasOwnProperty.call(i, "__proto__") && delete i.__proto__;
- for (let n of r) {
- if (n === "__proto__") continue;
- let r = vr(e[n], t[n]);
- if (!r.valid) return {
- valid: !1,
- mergeErrorPath: [n, ...r.mergeErrorPath]
- };
- i[n] = r.data;
- }
- return {
- valid: !0,
- data: i
- };
- }
- if (Array.isArray(e) && Array.isArray(t)) {
- if (e.length !== t.length) return {
- valid: !1,
- mergeErrorPath: []
- };
- let n = [];
- for (let r = 0; r < e.length; r++) {
- let i = e[r], a = t[r], o = vr(i, a);
- if (!o.valid) return {
- valid: !1,
- mergeErrorPath: [r, ...o.mergeErrorPath]
- };
- n.push(o.data);
- }
- return {
- valid: !0,
- data: n
- };
- }
- return {
- valid: !1,
- mergeErrorPath: []
- };
-}
-function yr(e, t, n) {
- let r = /* @__PURE__ */ new Map(), i, a = /* @__PURE__ */ new Map(), o = (e, t) => {
- let n;
- if (e.code === "unrecognized_keys" && !e.path?.length) i ??= e, n = e.keys;
- else if (e.code === "invalid_key" && e.origin === "record" && e.path?.length === 1) {
- let t = String(e.path[0]);
- a.has(t) || a.set(t, e), n = [t];
- } else return !1;
- for (let e of n) r.has(e) || r.set(e, {}), r.get(e)[t] = !0;
- return !0;
- };
- for (let n of t.issues) o(n, "l") || e.issues.push(n);
- for (let t of n.issues) o(t, "r") || e.issues.push(t);
- let s = [...r].filter(([, e]) => e.l && e.r).map(([e]) => e);
- if (s.length) {
- let t = i ? s.filter((e) => i.keys.includes(e)) : [];
- t.length && e.issues.push({
- ...i,
- keys: t
- });
- for (let n of s) !t.includes(n) && a.has(n) && e.issues.push(a.get(n));
- }
- let c = vr(t.value, n.value);
- if (!c.valid) {
- if (x(e)) return e;
- throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`);
- }
- return e.value = c.data, e;
-}
-var br = /*@__PURE__*/ O("$ZodEnum", (t, n) => {
- N.init(t, n);
- let r = e(n.entries), i = new Set(r);
- t._zod.values = i, D(t, "pattern", (t) => {
- let n = e(t.def.entries).filter((e) => ae.has(typeof e));
- return RegExp(n.length ? `^(${n.map((e) => v(e.toString())).join("|")})$` : "^[^\\s\\S]$");
- }), t._zod.parse = (e, n) => {
- let a = e.value;
- return i.has(a) || e.issues.push({
- code: "invalid_value",
- values: r,
- input: a,
- inst: t
- }), e;
- };
-}), xr = /*@__PURE__*/ O("$ZodLiteral", (e, t) => {
- N.init(e, t);
- let n = new Set(t.values);
- e._zod.values = n, D(e, "pattern", (e) => {
- let t = e.def.values;
- return RegExp(t.length ? `^(${t.map((e) => typeof e == "string" ? v(e) : e ? v(e.toString()) : String(e)).join("|")})$` : "^[^\\s\\S]$");
- }), e._zod.parse = (r, i) => {
- let a = r.value;
- return n.has(a) || r.issues.push({
- code: "invalid_value",
- values: t.values,
- input: a,
- inst: e
- }), r;
- };
-}), Sr = /*@__PURE__*/ O("$ZodTransform", (e, t) => {
- N.init(e, t), e._zod.optin = "optional", A.memoizer?.guard(e), e._zod.parse = (n, r) => {
- if (r.direction === "backward") throw new Be(e.constructor.name);
- let i = t.transform(n.value, n);
- if (r.async) return (i instanceof Promise ? i : Promise.resolve(i)).then((e) => (n.value = e, n));
- if (i instanceof Promise) throw new k();
- return n.value = i, n;
- };
-});
-function Cr(e, t) {
- return e.value = t.issues.length ? void 0 : t.value, e;
-}
-var wr = /*@__PURE__*/ O("$ZodOptional", (e, t) => {
- N.init(e, t), D(e, "optin", (e) => e.def.innerType._zod.optin === "defaulted" ? "defaulted" : "optional"), e._zod.optout = "optional", D(e, "values", (e) => {
- let t = e.def.innerType._zod.values;
- return t ? /* @__PURE__ */ new Set([...t, void 0]) : void 0;
- }), D(e, "pattern", (e) => {
- let t = e.def.innerType._zod.pattern;
- return t ? RegExp(`^(${o(t.source)})?$`) : void 0;
- }), e._zod.parse = (e, n) => {
- if (e.value === void 0) {
- if (t.innerType._zod.optin !== "defaulted") return e;
- let r = t.innerType._zod.run({
- value: e.value,
- issues: []
- }, n);
- return r instanceof Promise ? r.then((t) => Cr(e, t)) : Cr(e, r);
- }
- return t.innerType._zod.run(e, n);
- };
-}), Tr = /*@__PURE__*/ O("$ZodExactOptional", (e, t) => {
- wr.init(e, t), D(e, "values", (e) => e.def.innerType._zod.values), D(e, "pattern", (e) => e.def.innerType._zod.pattern), e._zod.parse = (e, n) => t.innerType._zod.run(e, n);
-}), Er = /*@__PURE__*/ O("$ZodNullable", (e, t) => {
- N.init(e, t), D(e, "optin", (e) => e.def.innerType._zod.optin), D(e, "optout", (e) => e.def.innerType._zod.optout), D(e, "pattern", (e) => {
- let t = e.def.innerType._zod.pattern;
- return t ? RegExp(`^(${o(t.source)}|null)$`) : void 0;
- }), D(e, "values", (e) => e.def.innerType._zod.values ? /* @__PURE__ */ new Set([...e.def.innerType._zod.values, null]) : void 0), e._zod.parse = (e, n) => e.value === null ? e : t.innerType._zod.run(e, n);
-}), Dr = /*@__PURE__*/ O("$ZodDefault", (e, t) => {
- N.init(e, t), e._zod.optin = "defaulted", D(e, "values", (e) => e.def.innerType._zod.values), e._zod.parse = (e, n) => {
- if (n.direction === "backward") return t.innerType._zod.run(e, n);
- if (e.value === void 0) return e.value = t.defaultValue, e;
- let r = t.innerType._zod.run(e, n);
- return r instanceof Promise ? r.then((e) => Or(e, t)) : Or(r, t);
- };
-});
-function Or(e, t) {
- return e.value === void 0 && (e.value = t.defaultValue), e;
-}
-var kr = /*@__PURE__*/ O("$ZodPrefault", (e, t) => {
- N.init(e, t), e._zod.optin = "defaulted", D(e, "values", (e) => e.def.innerType._zod.values), e._zod.parse = (e, n) => (n.direction === "backward" || e.value === void 0 && (e.value = t.defaultValue), t.innerType._zod.run(e, n));
-}), Ar = /*@__PURE__*/ O("$ZodNonOptional", (e, t) => {
- N.init(e, t), D(e, "values", (e) => {
- let t = e.def.innerType._zod.values;
- return t ? new Set([...t].filter((e) => e !== void 0)) : void 0;
- }), e._zod.parse = (n, r) => {
- let i = t.innerType._zod.run(n, r);
- return i instanceof Promise ? i.then((t) => jr(t, e)) : jr(i, e);
- };
-});
-function jr(e, t) {
- return !e.issues.length && e.value === void 0 && e.issues.push({
- code: "invalid_type",
- expected: "nonoptional",
- input: e.value,
- inst: t
- }), e;
-}
-function Mr(e, t, n, r) {
- return t.issues.length ? (e.value = n.catchValue({
- ...t,
- value: e.value,
- error: { issues: t.issues.map((e) => C(e, r, j())) },
- input: e.value
- }), e) : (e.value = t.value, t.memo && (e.memo = !0), e);
-}
-var Nr = /*@__PURE__*/ O("$ZodCatch", (e, t) => {
- N.init(e, t), D(e, "optin", (e) => e.def.innerType._zod.optin === "defaulted" ? "defaulted" : "optional"), D(e, "optout", (e) => e.def.innerType._zod.optout), D(e, "values", (e) => e.def.innerType._zod.values), e._zod.parse = (e, n) => {
- if (n.direction === "backward") return t.innerType._zod.run(e, n);
- let r = t.innerType._zod.run({
- value: e.value,
- issues: []
- }, n);
- return r instanceof Promise ? r.then((r) => Mr(e, r, t, n)) : Mr(e, r, t, n);
- };
-}), Pr = /*@__PURE__*/ O("$ZodPipe", (e, t) => {
- N.init(e, t), D(e, "values", (e) => e.def.in._zod.values), D(e, "optin", (e) => e.def.in._zod.optin), D(e, "optout", (e) => e.def.out._zod.optout), D(e, "propValues", (e) => e.def.in._zod.propValues), e._zod.parse = (e, n) => {
- if (n.direction === "backward") {
- let r = t.out._zod.run(e, n);
- return r instanceof Promise ? r.then((e) => F(e, t.in, n)) : F(r, t.in, n);
- }
- let r = t.in._zod.run(e, n);
- return r instanceof Promise ? r.then((e) => F(e, t.out, n)) : F(r, t.out, n);
- };
-});
-function F(e, t, n) {
- return e.issues.some((e) => e.code !== "unrecognized_keys") ? (e.aborted = !0, e) : t._zod.run({
- value: e.value,
- issues: e.issues
- }, n);
-}
-var Fr = /*@__PURE__*/ O("$ZodReadonly", (e, t) => {
- N.init(e, t), D(e, "propValues", (e) => e.def.innerType._zod.propValues), D(e, "values", (e) => e.def.innerType._zod.values), D(e, "optin", (e) => e.def.innerType?._zod?.optin), D(e, "optout", (e) => e.def.innerType?._zod?.optout), e._zod.parse = (e, n) => {
- if (n.direction === "backward") return t.innerType._zod.run(e, n);
- let r = t.innerType._zod.run(e, n);
- return r instanceof Promise ? r.then(Ir) : Ir(r);
- };
-});
-function Ir(e) {
- return e.memo || (e.value = Object.freeze(e.value)), e;
-}
-var Lr = /*@__PURE__*/ O("$ZodCustom", (e, t) => {
- M.init(e, t), N.init(e, t), e._zod.parse = (e, t) => e, e._zod.check = (n) => {
- let r = n.value, i = t.fn(r);
- if (i instanceof Promise) return i.then((t) => Rr(t, n, r, e));
- Rr(i, n, r, e);
- };
-});
-function Rr(e, t, n, r) {
- if (!e) {
- let e = {
- code: "custom",
- input: n,
- inst: r,
- path: [...r._zod.def.path ?? []],
- continue: !r._zod.def.abort
- };
- r._zod.def.params && (e.params = r._zod.def.params), t.issues.push(w(e));
- }
-}
-//#endregion
-//#region node_modules/zod/v4/core/memoizer.js
-var zr = class extends Error {
- constructor() {
- super("Cannot parse a reference cycle that closes through a transform"), this.name = "ZodCyclicError";
- }
-}, Br = "~memo", Vr = [];
-function Hr(e) {
- return typeof e == "object" && !!e;
-}
-function Ur(e) {
- return e.map((e) => e.path ? {
- ...e,
- path: e.path.slice()
- } : { ...e });
-}
-var Wr = /*@__PURE__*/ new WeakMap(), I = 0, Gr = 1, L = 2;
-function Kr(e, t, n) {
- let r = Wr.get(e);
- if (r !== void 0) return r ? L : I;
- if (t.has(e)) return L;
- t.add(e);
- let i = I, a = (e) => {
- if (i !== L && e?._zod) {
- let r = Kr(e, t, n);
- r > i && (i = r);
- }
- }, o = (e, r) => {
- let i = I;
- for (let a of Reflect.ownKeys(e)) {
- let o = Object.getOwnPropertyDescriptor(e, a);
- if (r && !o.enumerable) continue;
- let s = o.get ? Gr : o.value?._zod ? Kr(o.value, t, n) : I;
- s > i && (i = s);
- }
- return i;
- }, s = (e) => {
- e > i && (i = e);
- }, c = e._zod.def;
- switch (c.type) {
- case "object": {
- let e = l(c);
- s(e ? o(e, !0) : Gr), a(c.catchall);
- break;
- }
- case "array":
- a(c.element);
- break;
- case "tuple":
- for (let e of c.items) a(e);
- a(c.rest);
- break;
- case "record":
- case "map":
- a(c.keyType), a(c.valueType);
- break;
- case "set":
- a(c.valueType);
- break;
- case "union":
- for (let e of c.options) a(e);
- break;
- case "intersection":
- a(c.left), a(c.right);
- break;
- case "optional":
- case "nullable":
- case "default":
- case "prefault":
- case "catch":
- case "readonly":
- case "nonoptional":
- case "promise":
- case "success":
- a(c.innerType);
- break;
- case "pipe":
- a(c.in), a(c.out);
- break;
- case "function":
- a(c.input), a(c.output);
- break;
- case "lazy": {
- let r = c._cachedInner ?? (n ? e._zod.innerType : void 0);
- s(r ? Kr(r, t, !1) : Gr);
- break;
- }
- case "template_literal":
- case "string":
- case "number":
- case "int":
- case "boolean":
- case "bigint":
- case "symbol":
- case "undefined":
- case "null":
- case "void":
- case "never":
- case "any":
- case "unknown":
- case "date":
- case "nan":
- case "enum":
- case "literal":
- case "file":
- case "transform":
- case "custom": break;
- default: for (let e in c) {
- let t = Object.getOwnPropertyDescriptor(c, e);
- if (!t || t.get) continue;
- let n = t.value;
- if (n && typeof n == "object") {
- if (n._zod) a(n);
- else if (Array.isArray(n)) for (let e of n) a(e);
- }
- }
- }
- return t.delete(e), qr(e, i);
-}
-function qr(e, t) {
- return t !== Gr && Wr.set(e, t === L), t;
-}
-function Jr(e, t) {
- let n = e.buckets.get(t);
- return n || (n = /* @__PURE__ */ new WeakMap(), e.buckets.set(t, n)), n;
-}
-var Yr, Xr = [], Zr = {
- alloc(e, t, n) {
- let r = Yr;
- if (!r) return n;
- Yr = void 0;
- let i = {
- value: n,
- issues: null
- };
- return r.set(t.value, i), Xr.push(i), n;
- },
- guard(e) {
- var t;
- (t = e._zod).deferred ?? (t.deferred = []), e._zod.deferred.push(() => {
- let t = e._zod.parse, n = (e, n) => {
- if (n.direction !== "backward" && $r(n, e.value)) throw new zr();
- return t(e, n);
- };
- e._zod.parse = n, e._zod.run === t && (e._zod.run = n);
- });
- },
- attach(e) {
- var t;
- let n, r = !1, i, a;
- (t = e._zod).deferred ?? (t.deferred = []), e._zod.deferred.push(() => {
- let t = e._zod.parse, o = (s, c) => {
- if (n === void 0) {
- let i = Kr(e, /* @__PURE__ */ new Set(), !1);
- if (i === I) return e._zod.parse = t, e._zod.run === o && (e._zod.run = t), t(s, c);
- i === L || r ? n = !0 : r = !0;
- }
- let l = s.value;
- if (!Hr(l)) return t(s, c);
- let u = c[Br];
- u || (u = {
- buckets: /* @__PURE__ */ new WeakMap(),
- backEdges: void 0
- }, c[Br] = u);
- let d;
- i === c ? d = a : (d = Jr(u, e), i = c, a = d);
- let f = d.get(l);
- if (f) return s.value = f.value, f.issues ? f.issues.length && s.issues.push(...Ur(f.issues)) : (s.memo = !0, u.backEdges ?? (u.backEdges = /* @__PURE__ */ new WeakSet()), u.backEdges.add(f.value)), s;
- Yr = d;
- let p = Xr.length, m = t(s, c);
- Yr = void 0;
- let h = Xr.length > p ? Xr.pop() : void 0;
- return m instanceof Promise ? m.then((e) => (h && (h.issues = e.issues.length ? Ur(e.issues) : Vr), e)) : (h && (h.issues = m.issues.length ? Ur(m.issues) : Vr), m);
- };
- e._zod.parse = o, e._zod.run === t && (e._zod.run = o);
- });
- }
-};
-function Qr() {
- return Zr;
-}
-function $r(e, t) {
- let n = e[Br]?.backEdges;
- return n !== void 0 && Hr(t) && n.has(t);
-}
-//#endregion
-//#region node_modules/zod/v4/locales/en.js
-var ei = () => {
- let e = {
- string: {
- unit: "characters",
- verb: "to have"
- },
- file: {
- unit: "bytes",
- verb: "to have"
- },
- array: {
- unit: "items",
- verb: "to have"
- },
- set: {
- unit: "items",
- verb: "to have"
- },
- map: {
- unit: "entries",
- verb: "to have"
- }
- };
- function n(t) {
- return e[t] ?? null;
- }
- let r = {
- regex: "input",
- email: "email address",
- url: "URL",
- emoji: "emoji",
- uuid: "UUID",
- uuidv4: "UUIDv4",
- uuidv6: "UUIDv6",
- nanoid: "nanoid",
- guid: "GUID",
- cuid: "cuid",
- cuid2: "cuid2",
- ulid: "ULID",
- xid: "XID",
- ksuid: "KSUID",
- datetime: "ISO datetime",
- date: "ISO date",
- time: "ISO time",
- duration: "ISO duration",
- ipv4: "IPv4 address",
- ipv6: "IPv6 address",
- mac: "MAC address",
- cidrv4: "IPv4 range",
- cidrv6: "IPv6 range",
- base64: "base64-encoded string",
- base64url: "base64url-encoded string",
- json_string: "JSON string",
- e164: "E.164 number",
- currency_code: "currency code",
- credit_card: "credit card number",
- iban: "IBAN",
- jwt: "JWT",
- template_literal: "input"
- }, i = { nan: "NaN" };
- function a(e, t) {
- return e === "number" && typeof t == "number" && !Number.isFinite(t) ? String(t) : i[e] ?? e;
- }
- return (e) => {
- switch (e.code) {
- case "invalid_type": return `Invalid input: expected ${a(e.expected)}, received ${a(Te(e.input), e.input)}`;
- case "invalid_value": return e.values.length === 1 ? `Invalid input: expected ${oe(e.values[0])}` : `Invalid option: expected one of ${t(e.values, "|")}`;
- case "too_big": {
- let t = e.exact ? "exactly " : e.inclusive ? "<=" : "<", r = n(e.origin);
- return r ? `Too big: expected ${e.origin ?? "value"} to have ${t}${e.maximum.toString()} ${r.unit ?? "elements"}` : `Too big: expected ${e.origin ?? "value"} to be ${t}${e.maximum.toString()}`;
- }
- case "too_small": {
- let t = e.exact ? "exactly " : e.inclusive ? ">=" : ">", r = n(e.origin);
- return r ? `Too small: expected ${e.origin} to have ${t}${e.minimum.toString()} ${r.unit}` : `Too small: expected ${e.origin} to be ${t}${e.minimum.toString()}`;
- }
- case "invalid_format": {
- let t = e;
- return t.format === "starts_with" ? `Invalid string: must start with "${t.prefix}"` : t.format === "ends_with" ? `Invalid string: must end with "${t.suffix}"` : t.format === "includes" ? `Invalid string: must include "${t.includes}"` : t.format === "regex" ? `Invalid string: must match pattern ${t.pattern}` : `Invalid ${r[t.format] ?? e.format}`;
- }
- case "not_multiple_of": return `Invalid number: must be a multiple of ${e.divisor}`;
- case "unrecognized_keys": return `Unrecognized key${e.keys.length > 1 ? "s" : ""}: ${t(e.keys, ", ")}`;
- case "invalid_key": return `Invalid key in ${e.origin}`;
- case "invalid_union": return e.options && Array.isArray(e.options) && e.options.length > 0 ? `Invalid discriminator value. Expected ${e.options.map((e) => `'${e}'`).join(" | ")}` : e.inclusive === !1 ? "Invalid input: more than one option matched" : "Invalid input";
- case "invalid_element": return `Invalid value in ${e.origin}`;
- default: return "Invalid input";
- }
- };
-};
-function ti() {
- return { localeError: ei() };
-}
-//#endregion
-//#region node_modules/zod/v4/core/registries.js
-var ni, ri = class {
- constructor() {
- this._map = /* @__PURE__ */ new WeakMap(), this._idmap = /* @__PURE__ */ new Map();
- }
- add(e, ...t) {
- let n = t[0];
- return this._map.set(e, n), n && typeof n == "object" && "id" in n && this._idmap.set(n.id, e), this;
- }
- clear() {
- return this._map = /* @__PURE__ */ new WeakMap(), this._idmap = /* @__PURE__ */ new Map(), this;
- }
- remove(e) {
- let t = this._map.get(e);
- return t && typeof t == "object" && "id" in t && this._idmap.delete(t.id), this._map.delete(e), this;
- }
- get(e) {
- let t = e._zod.parent;
- if (t) {
- let n = { ...this.get(t) ?? {} };
- delete n.id;
- let r = {
- ...n,
- ...this._map.get(e)
- };
- return Object.keys(r).length ? r : void 0;
- }
- return this._map.get(e);
- }
- has(e) {
- return this._map.has(e);
- }
-};
-function ii() {
- return new ri();
-}
-(ni = globalThis).__zod_globalRegistry ?? (ni.__zod_globalRegistry = ii());
-var R = globalThis.__zod_globalRegistry;
-//#endregion
-//#region node_modules/zod/v4/core/api.js
-function ai(e) {
- return e.checks &&= [...e.checks], e;
-}
-// @__NO_SIDE_EFFECTS__
-function oi(e, t) {
- return new e(ai({
- type: "string",
- ...b(t)
- }));
-}
-// @__NO_SIDE_EFFECTS__
-function si(e, t) {
- return new e({
- type: "string",
- format: "email",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function ci(e, t) {
- return new e({
- type: "string",
- format: "guid",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function li(e, t) {
- return new e({
- type: "string",
- format: "uuid",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function ui(e, t) {
- return new e({
- type: "string",
- format: "uuid",
- check: "string_format",
- abort: !1,
- version: "v4",
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function di(e, t) {
- return new e({
- type: "string",
- format: "uuid",
- check: "string_format",
- abort: !1,
- version: "v6",
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function fi(e, t) {
- return new e({
- type: "string",
- format: "uuid",
- check: "string_format",
- abort: !1,
- version: "v7",
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function pi(e, t) {
- return new e({
- type: "string",
- format: "url",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function mi(e, t) {
- return new e({
- type: "string",
- format: "emoji",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function hi(e, t) {
- return new e({
- type: "string",
- format: "nanoid",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function gi(e, t) {
- return new e({
- type: "string",
- format: "cuid",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function _i(e, t) {
- return new e({
- type: "string",
- format: "cuid2",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function vi(e, t) {
- return new e({
- type: "string",
- format: "ulid",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function yi(e, t) {
- return new e({
- type: "string",
- format: "xid",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function bi(e, t) {
- return new e({
- type: "string",
- format: "ksuid",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function xi(e, t) {
- return new e({
- type: "string",
- format: "ipv4",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Si(e, t) {
- return new e({
- type: "string",
- format: "ipv6",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ci(e, t) {
- return new e({
- type: "string",
- format: "cidrv4",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function wi(e, t) {
- return new e({
- type: "string",
- format: "cidrv6",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ti(e, t) {
- return new e({
- type: "string",
- format: "base64",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ei(e, t) {
- return new e({
- type: "string",
- format: "base64url",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Di(e, t) {
- return new e({
- type: "string",
- format: "e164",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Oi(e, t) {
- return new e({
- type: "string",
- format: "jwt",
- check: "string_format",
- abort: !1,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function ki(e, t) {
- return new e({
- type: "string",
- format: "datetime",
- check: "string_format",
- offset: !1,
- local: !1,
- precision: null,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ai(e, t) {
- return new e({
- type: "string",
- format: "date",
- check: "string_format",
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function ji(e, t) {
- return new e({
- type: "string",
- format: "time",
- check: "string_format",
- precision: null,
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Mi(e, t) {
- return new e({
- type: "string",
- format: "duration",
- check: "string_format",
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ni(e, t) {
- return new e(ai({
- type: "number",
- checks: [],
- ...b(t)
- }));
-}
-// @__NO_SIDE_EFFECTS__
-function Pi(e, t) {
- return new e({
- type: "number",
- check: "number_format",
- abort: !1,
- format: "safeint",
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Fi(e) {
- return new e({ type: "unknown" });
-}
-// @__NO_SIDE_EFFECTS__
-function Ii(e, t) {
- return new e({
- type: "never",
- ...b(t)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Li(e, t) {
- return new Yt({
- check: "less_than",
- ...b(t),
- value: e,
- inclusive: !1
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ri(e, t) {
- return new Yt({
- check: "less_than",
- ...b(t),
- value: e,
- inclusive: !0
- });
-}
-// @__NO_SIDE_EFFECTS__
-function zi(e, t) {
- return new Xt({
- check: "greater_than",
- ...b(t),
- value: e,
- inclusive: !1
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Bi(e, t) {
- return new Xt({
- check: "greater_than",
- ...b(t),
- value: e,
- inclusive: !0
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Vi(e, t) {
- return new Zt({
- check: "multiple_of",
- ...b(t),
- value: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Hi(e, t) {
- return new $t({
- check: "max_length",
- ...b(t),
- maximum: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ui(e, t) {
- return new en({
- check: "min_length",
- ...b(t),
- minimum: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Wi(e, t) {
- return new tn({
- check: "length_equals",
- ...b(t),
- length: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Gi(e, t) {
- return new rn({
- check: "string_format",
- format: "regex",
- ...b(t),
- pattern: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ki(e) {
- return new an({
- check: "string_format",
- format: "lowercase",
- ...b(e)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function qi(e) {
- return new on({
- check: "string_format",
- format: "uppercase",
- ...b(e)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Ji(e, t) {
- return new sn({
- check: "string_format",
- format: "includes",
- ...b(t),
- includes: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Yi(e, t) {
- return new cn({
- check: "string_format",
- format: "starts_with",
- ...b(t),
- prefix: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Xi(e, t) {
- return new ln({
- check: "string_format",
- format: "ends_with",
- ...b(t),
- suffix: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function z(e) {
- return new un({
- check: "overwrite",
- tx: e
- });
-}
-// @__NO_SIDE_EFFECTS__
-function Zi(e) {
- return /* @__PURE__ */ z((t) => t.normalize(e));
-}
-// @__NO_SIDE_EFFECTS__
-function Qi() {
- return /* @__PURE__ */ z((e) => e.trim());
-}
-// @__NO_SIDE_EFFECTS__
-function $i() {
- return /* @__PURE__ */ z((e) => e.toLowerCase());
-}
-// @__NO_SIDE_EFFECTS__
-function ea() {
- return /* @__PURE__ */ z((e) => e.toUpperCase());
-}
-// @__NO_SIDE_EFFECTS__
-function ta() {
- return /* @__PURE__ */ z((e) => te(e));
-}
-// @__NO_SIDE_EFFECTS__
-function na(e, t, n) {
- return new e({
- type: "array",
- element: t,
- ...b(n)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function ra(e, t, n) {
- return new e({
- type: "custom",
- check: "custom",
- fn: t,
- ...b(n)
- });
-}
-// @__NO_SIDE_EFFECTS__
-function ia(e, t) {
- let n = /* @__PURE__ */ aa((t) => (t.addIssue = (e) => {
- if (typeof e == "string") t.issues.push(w(e, t.value, n._zod.def));
- else {
- let r = e;
- r.fatal && (r.continue = !1), r.code ??= "custom", "input" in r || (r.input = t.value), r.inst ??= n, r.continue ??= !n._zod.def.abort, t.issues.push(w(r));
- }
- }, e(t.value, t)), t);
- return n;
-}
-// @__NO_SIDE_EFFECTS__
-function aa(e, t) {
- let n = new M({
- check: "custom",
- ...b(t)
- });
- return n._zod.check = e, n;
-}
-//#endregion
-//#region node_modules/zod/v4/core/to-json-schema.js
-function B(e, ...t) {
- for (let n of t) for (let t of Reflect.ownKeys(n)) Object.prototype.propertyIsEnumerable.call(n, t) && c(e, t, n[t]);
- return e;
-}
-function oa(e) {
- let t = e?.target ?? "draft-2020-12";
- return t === "draft-4" && (t = "draft-04"), t === "draft-7" && (t = "draft-07"), {
- processors: e.processors ?? {},
- metadataRegistry: e?.metadata ?? R,
- target: t,
- unrepresentable: e?.unrepresentable ?? "throw",
- override: e?.override ?? (() => {}),
- io: e?.io ?? "output",
- counter: 0,
- seen: /* @__PURE__ */ new Map(),
- sharedDefsExtractedFor: void 0,
- sharedEmitDoneFor: void 0,
- cycles: e?.cycles ?? "ref",
- reused: e?.reused ?? "inline",
- intersections: [],
- deferred: [],
- external: e?.external ?? void 0
- };
-}
-function V(e, t, n, r, i) {
- let a = typeof t.unrepresentable == "function" ? t.unrepresentable({
- zodSchema: e,
- path: r.path,
- message: i
- }) : t.unrepresentable;
- if (a === "any") return !1;
- if (a === void 0 || a === "throw") throw Error(i);
- return Object.assign(n, a), !0;
-}
-function H(e, t, n = {
- path: [],
- schemaPath: []
-}) {
- var r;
- let i = e._zod.def, a = t.seen.get(e);
- if (a) return a.count++, n.schemaPath.includes(e) && (a.cycle = n.path), a.schema;
- let o = {
- schema: {},
- count: 1,
- cycle: void 0,
- path: n.path
- };
- t.seen.set(e, o), t.sharedDefsExtractedFor = void 0, t.sharedEmitDoneFor = void 0;
- let s = e._zod.toJSONSchema?.();
- if (s) o.schema = s;
- else {
- let r = {
- ...n,
- schemaPath: [...n.schemaPath, e],
- path: n.path
- };
- if (e._zod.processJSONSchema) e._zod.processJSONSchema(t, o.schema, r);
- else {
- let n = o.schema, a = t.processors[i.type];
- if (!a) throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);
- a(e, t, n, r);
- }
- let a = e._zod.parent;
- a && (o.ref ||= a, H(a, t, r), t.seen.get(a).isParent = !0);
- }
- let c = t.metadataRegistry.get(e);
- return c && B(o.schema, c), t.io === "input" && U(e) && (delete o.schema.examples, delete o.schema.default), t.io === "input" && "_prefault" in o.schema && ((r = o.schema).default ?? (r.default = o.schema._prefault)), delete o.schema._prefault, t.seen.get(e).schema;
-}
-function sa(e) {
- return e.replace(/~/g, "~0").replace(/\//g, "~1");
-}
-function ca(e, t) {
- let n = e.seen.get(t);
- if (!n) throw Error("Unprocessed schema. This is a bug in Zod.");
- if (e.external && e.sharedDefsExtractedFor === e.external) return;
- let r = /* @__PURE__ */ new Map();
- for (let t of e.seen.entries()) {
- let n = e.metadataRegistry.get(t[0])?.id;
- if (n) {
- let e = r.get(n);
- if (e && e !== t[0]) throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);
- r.set(n, t[0]);
- }
- }
- let i = (t) => {
- let r = e.target === "draft-2020-12" ? "$defs" : "definitions";
- if (e.external) {
- let n = e.external.registry.get(t[0])?.id, i = e.external.uri ?? ((e) => e);
- if (n) return { ref: i(n) };
- let a = t[1].defId ?? t[1].schema.id ?? `schema${e.counter++}`;
- return t[1].defId = a, {
- defId: a,
- ref: `${i("__shared")}#/${r}/${sa(a)}`
- };
- }
- let i = `#/${r}/`;
- if (t[1] === n && !t[1].schema.id) return { ref: "#" };
- let a = t[1].schema.id ?? `__schema${e.counter++}`;
- return {
- defId: a,
- ref: i + sa(a)
- };
- }, a = (e) => {
- if (e[1].schema.$ref) return;
- let t = e[1], { ref: n, defId: r } = i(e);
- t.def = { ...t.schema }, r && (t.defId = r);
- let a = t.schema;
- for (let e in a) delete a[e];
- a.$ref = n;
- };
- if (e.cycles === "throw") for (let t of e.seen.entries()) {
- let e = t[1];
- if (e.cycle) throw Error(`Cycle detected: #/${e.cycle?.join("/")}/
+ `)}return o.write(`payload.value = newResult;`),o.write(`return payload;`),o.compile()},s,c=g,l=!A.jitless,u=l&&re.value,d=t.catchall,f;e._zod.parse=(i,a)=>{f??=r.value;let p=i.value;return c(p)?l&&u&&a?.async===!1&&a.jitless!==!0?(s||=o(t.shape),i=s(i,a),d?ur([],p,i,a,f,e,a?.abortEarly===!0):i):n(i,a):(i.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),i)}});function pr(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!x(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>C(e,r,j())))}),t)}var mr=/*@__PURE__*/ O(`$ZodUnion`,(e,t)=>{N.init(e,t),D(e,`optin`,e=>e.def.options.some(e=>e._zod.optin===`defaulted`)?`defaulted`:e.def.options.some(e=>e._zod.optin!==void 0)?`optional`:void 0),D(e,`optout`,e=>e.def.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),D(e,`values`,e=>{if(e.def.options.every(e=>e._zod.values))return new Set(e.def.options.flatMap(e=>Array.from(e._zod.values)))}),D(e,`pattern`,e=>{if(e.def.options.every(e=>e._zod.pattern)){let t=e.def.options.map(e=>e._zod.pattern);return RegExp(`^(${t.map(e=>o(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>pr(t,r,e,i)):pr(o,r,e,i)}});function hr(e){let t=/* @__PURE__ */ new Map;for(let n of e.options){let r=n._zod.propValues?.[e.discriminator];if(!r||r.size===0)throw Error(`Invalid discriminated union option at index "${e.options.indexOf(n)}"`);for(let e of r)if(t.has(e)){if(e!==void 0)throw Error(`Duplicate discriminator value "${String(e)}"`);t.set(e,null)}else t.set(e,n)}return t}var gr=/*@__PURE__*/ O(`$ZodDiscriminatedUnion`,(e,t)=>{t.inclusive=!1,mr.init(e,t);let n=e._zod.parse;D(e,`propValues`,e=>{let t={},n=0;for(let r of e.def.options){let i=r._zod.propValues;if(!i||Object.keys(i).length===0)throw Error(`Invalid discriminated union option at index "${e.def.options.indexOf(r)}"`);i[e.def.discriminator]?.has(void 0)&&n++;for(let[e,n]of Object.entries(i)){Object.prototype.hasOwnProperty.call(t,e)||c(t,e,/* @__PURE__ */ new Set);for(let r of n)t[e].add(r)}}return!e.def.unionFallback&&n>1&&t[e.def.discriminator]?.delete(void 0),t}),t.options.forEach((e,n)=>{let r=l(e._zod.def);if(r&&!Object.prototype.hasOwnProperty.call(r,t.discriminator))throw Error(`Invalid discriminated union option at index "${n}"`)});let r=i(()=>hr(t));e._zod.parse=(i,a)=>{let o=i.value;if(!g(o))return i.issues.push({code:`invalid_type`,expected:`object`,input:o,inst:e}),i;let s=o?.[t.discriminator],c=r.value.get(s);return c&&(s!==void 0||a.direction!==`backward`)?c._zod.run(i,a):t.unionFallback||a.direction===`backward`?n(i,a):(i.issues.push({code:`invalid_union`,errors:[],note:`No matching discriminator`,discriminator:t.discriminator,options:Array.from(r.value.keys()).filter(e=>r.value.get(e)!==null),input:o,path:[t.discriminator],inst:e}),i)}}),_r=/*@__PURE__*/ O(`$ZodIntersection`,(e,t)=>{N.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>yr(e,t,n)):yr(e,i,a)}});function vr(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(_(e)&&_(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};Object.prototype.hasOwnProperty.call(i,`__proto__`)&&delete i.__proto__;for(let n of r){if(n===`__proto__`)continue;let r=vr(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r{let n;if(e.code===`unrecognized_keys`&&!e.path?.length)i??=e,n=e.keys;else if(e.code===`invalid_key`&&e.origin===`record`&&e.path?.length===1){let t=String(e.path[0]);a.has(t)||a.set(t,e),n=[t]}else return!1;for(let e of n)r.has(e)||r.set(e,{}),r.get(e)[t]=!0;return!0};for(let n of t.issues)o(n,`l`)||e.issues.push(n);for(let t of n.issues)o(t,`r`)||e.issues.push(t);let s=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(s.length){let t=i?s.filter(e=>i.keys.includes(e)):[];t.length&&e.issues.push({...i,keys:t});for(let n of s)!t.includes(n)&&a.has(n)&&e.issues.push(a.get(n))}let c=vr(t.value,n.value);if(!c.valid){if(x(e))return e;throw Error(`Unmergable intersection. Error path: ${JSON.stringify(c.mergeErrorPath)}`)}return e.value=c.data,e}var br=/*@__PURE__*/ O(`$ZodEnum`,(t,n)=>{N.init(t,n);let r=e(n.entries),i=new Set(r);t._zod.values=i,D(t,`pattern`,t=>{let n=e(t.def.entries).filter(e=>ae.has(typeof e));return RegExp(n.length?`^(${n.map(e=>v(e.toString())).join(`|`)})$`:`^[^\\s\\S]$`)}),t._zod.parse=(e,n)=>{let a=e.value;return i.has(a)||e.issues.push({code:`invalid_value`,values:r,input:a,inst:t}),e}}),xr=/*@__PURE__*/ O(`$ZodLiteral`,(e,t)=>{N.init(e,t);let n=new Set(t.values);e._zod.values=n,D(e,`pattern`,e=>{let t=e.def.values;return RegExp(t.length?`^(${t.map(e=>typeof e==`string`?v(e):e?v(e.toString()):String(e)).join(`|`)})$`:`^[^\\s\\S]$`)}),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),Sr=/*@__PURE__*/ O(`$ZodTransform`,(e,t)=>{N.init(e,t),e._zod.optin=`optional`,A.memoizer?.guard(e),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new Be(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n));if(i instanceof Promise)throw new k;return n.value=i,n}});function Cr(e,t){return e.value=t.issues.length?void 0:t.value,e}var wr=/*@__PURE__*/ O(`$ZodOptional`,(e,t)=>{N.init(e,t),D(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),e._zod.optout=`optional`,D(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?/* @__PURE__ */ new Set([...t,void 0]):void 0}),D(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${o(t.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(e.value===void 0){if(t.innerType._zod.optin!==`defaulted`)return e;let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(t=>Cr(e,t)):Cr(e,r)}return t.innerType._zod.run(e,n)}}),Tr=/*@__PURE__*/ O(`$ZodExactOptional`,(e,t)=>{wr.init(e,t),D(e,`values`,e=>e.def.innerType._zod.values),D(e,`pattern`,e=>e.def.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),Er=/*@__PURE__*/ O(`$ZodNullable`,(e,t)=>{N.init(e,t),D(e,`optin`,e=>e.def.innerType._zod.optin),D(e,`optout`,e=>e.def.innerType._zod.optout),D(e,`pattern`,e=>{let t=e.def.innerType._zod.pattern;return t?RegExp(`^(${o(t.source)}|null)$`):void 0}),D(e,`values`,e=>e.def.innerType._zod.values?/* @__PURE__ */ new Set([...e.def.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),Dr=/*@__PURE__*/ O(`$ZodDefault`,(e,t)=>{N.init(e,t),e._zod.optin=`defaulted`,D(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>Or(e,t)):Or(r,t)}});function Or(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var kr=/*@__PURE__*/ O(`$ZodPrefault`,(e,t)=>{N.init(e,t),e._zod.optin=`defaulted`,D(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),Ar=/*@__PURE__*/ O(`$ZodNonOptional`,(e,t)=>{N.init(e,t),D(e,`values`,e=>{let t=e.def.innerType._zod.values;return t?new Set([...t].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>jr(t,e)):jr(i,e)}});function jr(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}function Mr(e,t,n,r){return t.issues.length?(e.value=n.catchValue({...t,value:e.value,error:{issues:t.issues.map(e=>C(e,r,j()))},input:e.value}),e):(e.value=t.value,t.memo&&(e.memo=!0),e)}var Nr=/*@__PURE__*/ O(`$ZodCatch`,(e,t)=>{N.init(e,t),D(e,`optin`,e=>e.def.innerType._zod.optin===`defaulted`?`defaulted`:`optional`),D(e,`optout`,e=>e.def.innerType._zod.optout),D(e,`values`,e=>e.def.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run({value:e.value,issues:[]},n);return r instanceof Promise?r.then(r=>Mr(e,r,t,n)):Mr(e,r,t,n)}}),Pr=/*@__PURE__*/ O(`$ZodPipe`,(e,t)=>{N.init(e,t),D(e,`values`,e=>e.def.in._zod.values),D(e,`optin`,e=>e.def.in._zod.optin),D(e,`optout`,e=>e.def.out._zod.optout),D(e,`propValues`,e=>e.def.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>F(e,t.in,n)):F(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>F(e,t.out,n)):F(r,t.out,n)}});function F(e,t,n){return e.issues.some(e=>e.code!==`unrecognized_keys`)?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}var Fr=/*@__PURE__*/ O(`$ZodReadonly`,(e,t)=>{N.init(e,t),D(e,`propValues`,e=>e.def.innerType._zod.propValues),D(e,`values`,e=>e.def.innerType._zod.values),D(e,`optin`,e=>e.def.innerType?._zod?.optin),D(e,`optout`,e=>e.def.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(Ir):Ir(r)}});function Ir(e){return e.memo||(e.value=Object.freeze(e.value)),e}var Lr=/*@__PURE__*/ O(`$ZodCustom`,(e,t)=>{M.init(e,t),N.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>Rr(t,n,r,e));Rr(i,n,r,e)}});function Rr(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(w(e))}}var zr=class extends Error{constructor(){super(`Cannot parse a reference cycle that closes through a transform`),this.name=`ZodCyclicError`}},Br=`~memo`,Vr=[];function Hr(e){return typeof e==`object`&&!!e}function Ur(e){return e.map(e=>e.path?{...e,path:e.path.slice()}:{...e})}var Wr=/*@__PURE__*/ new WeakMap,I=0,Gr=1,L=2;function Kr(e,t,n){let r=Wr.get(e);if(r!==void 0)return r?L:I;if(t.has(e))return L;t.add(e);let i=I,a=e=>{if(i!==L&&e?._zod){let r=Kr(e,t,n);r>i&&(i=r)}},o=(e,r)=>{let i=I;for(let a of Reflect.ownKeys(e)){let o=Object.getOwnPropertyDescriptor(e,a);if(r&&!o.enumerable)continue;let s=o.get?Gr:o.value?._zod?Kr(o.value,t,n):I;s>i&&(i=s)}return i},s=e=>{e>i&&(i=e)},c=e._zod.def;switch(c.type){case`object`:{let e=l(c);s(e?o(e,!0):Gr),a(c.catchall);break}case`array`:a(c.element);break;case`tuple`:for(let e of c.items)a(e);a(c.rest);break;case`record`:case`map`:a(c.keyType),a(c.valueType);break;case`set`:a(c.valueType);break;case`union`:for(let e of c.options)a(e);break;case`intersection`:a(c.left),a(c.right);break;case`optional`:case`nullable`:case`default`:case`prefault`:case`catch`:case`readonly`:case`nonoptional`:case`promise`:case`success`:a(c.innerType);break;case`pipe`:a(c.in),a(c.out);break;case`function`:a(c.input),a(c.output);break;case`lazy`:{let r=c._cachedInner??(n?e._zod.innerType:void 0);s(r?Kr(r,t,!1):Gr);break}case`template_literal`:case`string`:case`number`:case`int`:case`boolean`:case`bigint`:case`symbol`:case`undefined`:case`null`:case`void`:case`never`:case`any`:case`unknown`:case`date`:case`nan`:case`enum`:case`literal`:case`file`:case`transform`:case`custom`:break;default:for(let e in c){let t=Object.getOwnPropertyDescriptor(c,e);if(!t||t.get)continue;let n=t.value;if(n&&typeof n==`object`){if(n._zod)a(n);else if(Array.isArray(n))for(let e of n)a(e)}}}return t.delete(e),qr(e,i)}function qr(e,t){return t!==Gr&&Wr.set(e,t===L),t}function Jr(e,t){let n=e.buckets.get(t);return n||(n=/* @__PURE__ */ new WeakMap,e.buckets.set(t,n)),n}var Yr,Xr=[],Zr={alloc(e,t,n){let r=Yr;if(!r)return n;Yr=void 0;let i={value:n,issues:null};return r.set(t.value,i),Xr.push(i),n},guard(e){var t;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,n=(e,n)=>{if(n.direction!==`backward`&&$r(n,e.value))throw new zr;return t(e,n)};e._zod.parse=n,e._zod.run===t&&(e._zod.run=n)})},attach(e){var t;let n,r=!1,i,a;(t=e._zod).deferred??(t.deferred=[]),e._zod.deferred.push(()=>{let t=e._zod.parse,o=(s,c)=>{if(n===void 0){let i=Kr(e,/* @__PURE__ */ new Set,!1);if(i===I)return e._zod.parse=t,e._zod.run===o&&(e._zod.run=t),t(s,c);i===L||r?n=!0:r=!0}let l=s.value;if(!Hr(l))return t(s,c);let u=c[Br];u||(u={buckets:/* @__PURE__ */ new WeakMap,backEdges:void 0},c[Br]=u);let d;i===c?d=a:(d=Jr(u,e),i=c,a=d);let f=d.get(l);if(f)return s.value=f.value,f.issues?f.issues.length&&s.issues.push(...Ur(f.issues)):(s.memo=!0,u.backEdges??(u.backEdges=/* @__PURE__ */ new WeakSet),u.backEdges.add(f.value)),s;Yr=d;let p=Xr.length,m=t(s,c);Yr=void 0;let h=Xr.length>p?Xr.pop():void 0;return m instanceof Promise?m.then(e=>(h&&(h.issues=e.issues.length?Ur(e.issues):Vr),e)):(h&&(h.issues=m.issues.length?Ur(m.issues):Vr),m)};e._zod.parse=o,e._zod.run===t&&(e._zod.run=o)})}};function Qr(){return Zr}function $r(e,t){let n=e[Br]?.backEdges;return n!==void 0&&Hr(t)&&n.has(t)}var ei=()=>{let e={string:{unit:`characters`,verb:`to have`},file:{unit:`bytes`,verb:`to have`},array:{unit:`items`,verb:`to have`},set:{unit:`items`,verb:`to have`},map:{unit:`entries`,verb:`to have`}};function n(t){return e[t]??null}let r={regex:`input`,email:`email address`,url:`URL`,emoji:`emoji`,uuid:`UUID`,uuidv4:`UUIDv4`,uuidv6:`UUIDv6`,nanoid:`nanoid`,guid:`GUID`,cuid:`cuid`,cuid2:`cuid2`,ulid:`ULID`,xid:`XID`,ksuid:`KSUID`,datetime:`ISO datetime`,date:`ISO date`,time:`ISO time`,duration:`ISO duration`,ipv4:`IPv4 address`,ipv6:`IPv6 address`,mac:`MAC address`,cidrv4:`IPv4 range`,cidrv6:`IPv6 range`,base64:`base64-encoded string`,base64url:`base64url-encoded string`,json_string:`JSON string`,e164:`E.164 number`,currency_code:`currency code`,credit_card:`credit card number`,iban:`IBAN`,jwt:`JWT`,template_literal:`input`},i={nan:`NaN`};function a(e,t){return e===`number`&&typeof t==`number`&&!Number.isFinite(t)?String(t):i[e]??e}return e=>{switch(e.code){case`invalid_type`:return`Invalid input: expected ${a(e.expected)}, received ${a(Te(e.input),e.input)}`;case`invalid_value`:return e.values.length===1?`Invalid input: expected ${oe(e.values[0])}`:`Invalid option: expected one of ${t(e.values,`|`)}`;case`too_big`:{let t=e.exact?`exactly `:e.inclusive?`<=`:`<`,r=n(e.origin);return r?`Too big: expected ${e.origin??`value`} to have ${t}${e.maximum.toString()} ${r.unit??`elements`}`:`Too big: expected ${e.origin??`value`} to be ${t}${e.maximum.toString()}`}case`too_small`:{let t=e.exact?`exactly `:e.inclusive?`>=`:`>`,r=n(e.origin);return r?`Too small: expected ${e.origin} to have ${t}${e.minimum.toString()} ${r.unit}`:`Too small: expected ${e.origin} to be ${t}${e.minimum.toString()}`}case`invalid_format`:{let t=e;return t.format===`starts_with`?`Invalid string: must start with "${t.prefix}"`:t.format===`ends_with`?`Invalid string: must end with "${t.suffix}"`:t.format===`includes`?`Invalid string: must include "${t.includes}"`:t.format===`regex`?`Invalid string: must match pattern ${t.pattern}`:`Invalid ${r[t.format]??e.format}`}case`not_multiple_of`:return`Invalid number: must be a multiple of ${e.divisor}`;case`unrecognized_keys`:return`Unrecognized key${e.keys.length>1?`s`:``}: ${t(e.keys,`, `)}`;case`invalid_key`:return`Invalid key in ${e.origin}`;case`invalid_union`:return e.options&&Array.isArray(e.options)&&e.options.length>0?`Invalid discriminator value. Expected ${e.options.map(e=>`'${e}'`).join(` | `)}`:e.inclusive===!1?`Invalid input: more than one option matched`:`Invalid input`;case`invalid_element`:return`Invalid value in ${e.origin}`;default:return`Invalid input`}}};function ti(){return{localeError:ei()}}var ni,ri=class{constructor(){this._map=/* @__PURE__ */ new WeakMap,this._idmap=/* @__PURE__ */ new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=/* @__PURE__ */ new WeakMap,this._idmap=/* @__PURE__ */ new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function ii(){return new ri}(ni=globalThis).__zod_globalRegistry??(ni.__zod_globalRegistry=ii());var R=globalThis.__zod_globalRegistry;function ai(e){return e.checks&&=[...e.checks],e}// @__NO_SIDE_EFFECTS__
+function oi(e,t){return new e(ai({type:`string`,...b(t)}))}// @__NO_SIDE_EFFECTS__
+function si(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function ci(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function li(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function ui(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...b(t)})}// @__NO_SIDE_EFFECTS__
+function di(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...b(t)})}// @__NO_SIDE_EFFECTS__
+function fi(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...b(t)})}// @__NO_SIDE_EFFECTS__
+function pi(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function mi(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function hi(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function gi(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function _i(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function vi(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function yi(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function bi(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function xi(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Si(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Ci(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function wi(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Ti(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Ei(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Di(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Oi(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...b(t)})}// @__NO_SIDE_EFFECTS__
+function ki(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Ai(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...b(t)})}// @__NO_SIDE_EFFECTS__
+function ji(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Mi(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Ni(e,t){return new e(ai({type:`number`,checks:[],...b(t)}))}// @__NO_SIDE_EFFECTS__
+function Pi(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Fi(e){return new e({type:`unknown`})}// @__NO_SIDE_EFFECTS__
+function Ii(e,t){return new e({type:`never`,...b(t)})}// @__NO_SIDE_EFFECTS__
+function Li(e,t){return new Yt({check:`less_than`,...b(t),value:e,inclusive:!1})}// @__NO_SIDE_EFFECTS__
+function Ri(e,t){return new Yt({check:`less_than`,...b(t),value:e,inclusive:!0})}// @__NO_SIDE_EFFECTS__
+function zi(e,t){return new Xt({check:`greater_than`,...b(t),value:e,inclusive:!1})}// @__NO_SIDE_EFFECTS__
+function Bi(e,t){return new Xt({check:`greater_than`,...b(t),value:e,inclusive:!0})}// @__NO_SIDE_EFFECTS__
+function Vi(e,t){return new Zt({check:`multiple_of`,...b(t),value:e})}// @__NO_SIDE_EFFECTS__
+function Hi(e,t){return new $t({check:`max_length`,...b(t),maximum:e})}// @__NO_SIDE_EFFECTS__
+function Ui(e,t){return new en({check:`min_length`,...b(t),minimum:e})}// @__NO_SIDE_EFFECTS__
+function Wi(e,t){return new tn({check:`length_equals`,...b(t),length:e})}// @__NO_SIDE_EFFECTS__
+function Gi(e,t){return new rn({check:`string_format`,format:`regex`,...b(t),pattern:e})}// @__NO_SIDE_EFFECTS__
+function Ki(e){return new an({check:`string_format`,format:`lowercase`,...b(e)})}// @__NO_SIDE_EFFECTS__
+function qi(e){return new on({check:`string_format`,format:`uppercase`,...b(e)})}// @__NO_SIDE_EFFECTS__
+function Ji(e,t){return new sn({check:`string_format`,format:`includes`,...b(t),includes:e})}// @__NO_SIDE_EFFECTS__
+function Yi(e,t){return new cn({check:`string_format`,format:`starts_with`,...b(t),prefix:e})}// @__NO_SIDE_EFFECTS__
+function Xi(e,t){return new ln({check:`string_format`,format:`ends_with`,...b(t),suffix:e})}// @__NO_SIDE_EFFECTS__
+function z(e){return new un({check:`overwrite`,tx:e})}// @__NO_SIDE_EFFECTS__
+function Zi(e){return/* @__PURE__ */ z(t=>t.normalize(e))}// @__NO_SIDE_EFFECTS__
+function Qi(){return/* @__PURE__ */ z(e=>e.trim())}// @__NO_SIDE_EFFECTS__
+function $i(){return/* @__PURE__ */ z(e=>e.toLowerCase())}// @__NO_SIDE_EFFECTS__
+function ea(){return/* @__PURE__ */ z(e=>e.toUpperCase())}// @__NO_SIDE_EFFECTS__
+function ta(){return/* @__PURE__ */ z(e=>te(e))}// @__NO_SIDE_EFFECTS__
+function na(e,t,n){return new e({type:`array`,element:t,...b(n)})}// @__NO_SIDE_EFFECTS__
+function ra(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...b(n)})}// @__NO_SIDE_EFFECTS__
+function ia(e,t){let n=/* @__PURE__ */ aa(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(w(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,`input`in r||(r.input=t.value),r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(w(r))}},e(t.value,t)),t);return n}// @__NO_SIDE_EFFECTS__
+function aa(e,t){let n=new M({check:`custom`,...b(t)});return n._zod.check=e,n}function B(e,...t){for(let n of t)for(let t of Reflect.ownKeys(n))Object.prototype.propertyIsEnumerable.call(n,t)&&c(e,t,n[t]);return e}function oa(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??R,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:/* @__PURE__ */ new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,intersections:[],deferred:[],external:e?.external??void 0}}function V(e,t,n,r,i){let a=typeof t.unrepresentable==`function`?t.unrepresentable({zodSchema:e,path:r.path,message:i}):t.unrepresentable;if(a===`any`)return!1;if(a===void 0||a===`throw`)throw Error(i);return Object.assign(n,a),!0}function H(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,H(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&B(o.schema,c),t.io===`input`&&U(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function sa(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function ca(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);if(e.external&&e.sharedDefsExtractedFor===e.external)return;let r=/* @__PURE__ */ new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${sa(a)}`}}let i=`#/${r}/`;if(t[1]===n&&!t[1].schema.id)return{ref:`#`};let a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+sa(a)}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/
-Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`);
- }
- for (let n of e.seen.entries()) {
- let r = n[1];
- if (t === n[0]) a(n);
- else {
- if (e.external) {
- let r = e.external.registry.get(n[0])?.id;
- if (t !== n[0] && r) {
- a(n);
- continue;
- }
- }
- (e.metadataRegistry.get(n[0])?.id || r.cycle || r.count > 1 && e.reused === "ref") && a(n);
- }
- }
- e.external && (e.sharedDefsExtractedFor = e.external);
-}
-function la(e) {
- let t = e.anyOf;
- if (!Array.isArray(t) || t.length === 0 || e.type !== void 0) return;
- let n = [];
- for (let e of t) {
- if (!e || typeof e != "object") return;
- la(e);
- let t = Object.keys(e);
- if (t.length !== 1 || t[0] !== "type") return;
- let r = e.type;
- for (let e of Array.isArray(r) ? r : [r]) {
- if (typeof e != "string") return;
- n.includes(e) || n.push(e);
- }
- }
- delete e.anyOf, e.type = n.length === 1 ? n[0] : n;
-}
-var ua = /* @__PURE__ */ new Set([
- "type",
- "properties",
- "required",
- "additionalProperties"
-]), da = ["oneOf", "anyOf"];
-function fa(e) {
- let t = e.additionalProperties;
- return t === void 0 || t === !1 || typeof t != "object" || !t ? null : Object.keys(t).length ? t : null;
-}
-function pa(e) {
- let t = [];
- for (let n of e) {
- if (typeof n != "object" || n.type !== "object") return null;
- for (let e in n) if (!ua.has(e)) return null;
- t.push(n);
- }
- let n = {}, r = /* @__PURE__ */ new Set();
- for (let e of t) {
- for (let r in e.properties) {
- if (Object.prototype.hasOwnProperty.call(n, r)) continue;
- let e = [];
- for (let n of t) {
- let t = n.properties?.[r] ?? fa(n);
- t != null && (e.some((e) => JSON.stringify(e) === JSON.stringify(t)) || e.push(t));
- }
- c(n, r, e.length === 1 ? e[0] : pa(e) ?? { allOf: e });
- }
- for (let t of e.required ?? []) r.add(t);
- }
- let i = {
- type: "object",
- properties: n
- };
- if (r.size && (i.required = [...r]), t.every((e) => e.additionalProperties === !1)) i.additionalProperties = !1;
- else {
- let e = [];
- for (let n of t) {
- let t = fa(n);
- t && !e.some((e) => JSON.stringify(e) === JSON.stringify(t)) && e.push(t);
- }
- e.length === 1 ? i.additionalProperties = e[0] : e.length > 1 && (i.additionalProperties = { allOf: e });
- }
- return i;
-}
-function ma(e) {
- let t = e.allOf;
- if (!Array.isArray(t) || t.length < 2) return;
- for (let t of ua) if (t in e) return;
- let n = t.filter((e) => da.some((t) => Array.isArray(e[t]))), r = null;
- if (!n.length) r = pa(t);
- else {
- let e = n[0], i = da.find((t) => Array.isArray(e[t]));
- if (Object.keys(e).length !== 1) return;
- let a = t.filter((t) => t !== e), o = e[i].map((e) => pa([...a, e]));
- if (o.some((e) => !e)) return;
- r = { [i]: o };
- }
- r && (delete e.allOf, B(e, r));
-}
-function ha(e, t) {
- let n = e.seen.get(t);
- if (!n) throw Error("Unprocessed schema. This is a bug in Zod.");
- let r = (t) => {
- let n = e.seen.get(t);
- if (n.ref === null) return;
- let i = n.def ?? n.schema, a = { ...i }, o = n.ref;
- if (n.ref = null, o) {
- r(o);
- let n = e.seen.get(o), s = n.schema;
- if (s.$ref && (e.target === "draft-07" || e.target === "draft-04" || e.target === "openapi-3.0") ? (i.allOf = i.allOf ?? [], i.allOf.push(s)) : B(i, s), B(i, a), t._zod.parent === o) for (let e in i) e !== "$ref" && e !== "allOf" && (e in a || delete i[e]);
- if (s.$ref && n.def) for (let e in i) e !== "$ref" && e !== "allOf" && e in n.def && JSON.stringify(i[e]) === JSON.stringify(n.def[e]) && delete i[e];
- }
- let s = t._zod.parent;
- if (s && s !== o) {
- r(s);
- let t = e.seen.get(s);
- if (t?.schema.$ref && (i.$ref = t.schema.$ref, t.def)) for (let e in i) e !== "$ref" && e !== "allOf" && e in t.def && JSON.stringify(i[e]) === JSON.stringify(t.def[e]) && delete i[e];
- }
- e.override({
- zodSchema: t,
- jsonSchema: i,
- path: n.path ?? []
- });
- };
- if (!e.external || e.sharedEmitDoneFor !== e.external) {
- for (let t of [...e.seen.entries()].reverse()) r(t[0]);
- if (e.target !== "openapi-3.0") for (let t of e.seen.entries()) la(t[1].def ?? t[1].schema);
- for (let t of e.deferred) t();
- if (e.intersections.length) {
- let t = /* @__PURE__ */ new Map();
- for (let n of e.seen.values()) for (let e of [n.schema, n.def]) {
- let n = e?.allOf;
- if (!Array.isArray(n)) continue;
- let r = t.get(n);
- r ? r.push(e) : t.set(n, [e]);
- }
- for (let n of e.intersections) for (let e of t.get(n) ?? []) ma(e);
- }
- }
- let i = {};
- if (e.target === "draft-2020-12" ? i.$schema = "https://json-schema.org/draft/2020-12/schema" : e.target === "draft-07" ? i.$schema = "http://json-schema.org/draft-07/schema#" : e.target === "draft-04" ? i.$schema = "http://json-schema.org/draft-04/schema#" : e.target, e.external?.uri) {
- let n = e.external.registry.get(t)?.id;
- if (!n) throw Error("Schema is missing an `id` property");
- i.$id = e.external.uri(n);
- }
- B(i, n.defId ? n.schema : n.def ?? n.schema);
- let a = e.metadataRegistry.get(t)?.id;
- a !== void 0 && i.id === a && delete i.id;
- let o = e.external?.defs ?? {};
- if (!e.external || e.sharedEmitDoneFor !== e.external) for (let t of e.seen.entries()) {
- let e = t[1];
- e.def && e.defId && (e.def.id === e.defId && delete e.def.id, c(o, e.defId, e.def));
- }
- e.external && (e.sharedEmitDoneFor = e.external), e.external || Object.keys(o).length > 0 && (e.target === "draft-2020-12" ? i.$defs = o : i.definitions = o);
- try {
- let n = JSON.parse(JSON.stringify(i));
- return Object.defineProperty(n, "~standard", {
- value: {
- ...t["~standard"],
- jsonSchema: {
- input: _a(t, "input", e.processors),
- output: _a(t, "output", e.processors)
- }
- },
- enumerable: !1,
- writable: !1
- }), n;
- } catch {
- throw Error("Error converting schema to JSON.");
- }
-}
-function U(e, t) {
- let n = t ?? { seen: /* @__PURE__ */ new Set() };
- if (n.seen.has(e)) return !1;
- n.seen.add(e);
- let r = e._zod.def;
- if (r.type === "transform") return !0;
- if (r.type === "array") return U(r.element, n);
- if (r.type === "set") return U(r.valueType, n);
- if (r.type === "lazy") return U(r.getter(), n);
- if (r.type === "promise" || r.type === "optional" || r.type === "nonoptional" || r.type === "nullable" || r.type === "readonly" || r.type === "default" || r.type === "prefault" || r.type === "catch") return U(r.innerType, n);
- if (r.type === "intersection") return U(r.left, n) || U(r.right, n);
- if (r.type === "record" || r.type === "map") return U(r.keyType, n) || U(r.valueType, n);
- if (r.type === "pipe") return e._zod.traits.has("$ZodCodec") ? !0 : U(r.in, n) || U(r.out, n);
- if (r.type === "object") {
- for (let e in r.shape) if (U(r.shape[e], n)) return !0;
- return !1;
- }
- if (r.type === "union") {
- for (let e of r.options) if (U(e, n)) return !0;
- return !1;
- }
- if (r.type === "tuple") {
- for (let e of r.items) if (U(e, n)) return !0;
- return !!(r.rest && U(r.rest, n));
- }
- return !1;
-}
-var ga = (e, t = {}) => (n) => {
- let r = oa({
- ...n,
- processors: t
- });
- return H(e, r), ca(r, e), ha(r, e);
-}, _a = (e, t, n = {}) => (r) => {
- let { libraryOptions: i, target: a } = r ?? {}, o = oa({
- ...i ?? {},
- target: a,
- io: t,
- processors: n
- });
- return H(e, o), ca(o, e), ha(o, e);
-}, W = (e, t, n) => {
- (e[t] === void 0 || n > e[t]) && (e[t] = n);
-}, G = (e, t, n) => {
- (e[t] === void 0 || n < e[t]) && (e[t] = n);
-}, va = (e, t) => {
- W(e, "minimum", t), G(e, "maximum", t);
-}, ya = (e, t) => {
- e.multipleOf ??= [], e.multipleOf.includes(t) || e.multipleOf.push(t);
-}, ba = (e, t) => {
- e.patterns ??= /* @__PURE__ */ new Set(), e.patterns.add(t);
-}, xa = (e, t) => {
- e.mime = e.mime ? e.mime.filter((e) => t.includes(e)) : [...t];
-}, Sa = (e, t) => {
- e.format = t, t.includes("int") && (e.isInt = !0);
-}, Ca = (e, t) => W(e, "minimum", t.minimum), wa = (e, t) => G(e, "maximum", t.maximum), Ta = (e) => (t, n) => {
- Sa(t, n.format);
- let [r, i] = e[n.format];
- W(t, "minimum", r), G(t, "maximum", i);
-}, Ea = {
- greater_than: (e, t) => W(e, t.inclusive ? "minimum" : "exclusiveMinimum", t.value),
- less_than: (e, t) => G(e, t.inclusive ? "maximum" : "exclusiveMaximum", t.value),
- multiple_of: (e, t) => ya(e, t.value),
- number_format: Ta(ce),
- bigint_format: Ta(le),
- min_length: Ca,
- max_length: wa,
- length_equals: (e, t) => va(e, t.length),
- min_size: Ca,
- max_size: wa,
- size_equals: (e, t) => va(e, t.size),
- string_format: (e, t) => {
- Sa(e, t.format), t.pattern && ba(e, t.pattern), (t.format === "base64" || t.format === "base64url") && (e.contentEncoding = t.format), (t.local || t.precision === -1) && (e.laxFormat = !0);
- },
- mime_type: (e, t) => xa(e, t.mime)
-};
-function K(e) {
- let t = {}, n = e._zod.def, r = e._zod.traits.has("$ZodCheck") ? [e, ...n.checks ?? []] : n.checks ?? [];
- for (let e of r) Ea[e._zod.def.check]?.(t, e._zod.def);
- let i = e._zod.bag;
- i.minimum !== void 0 && W(t, "minimum", i.minimum), i.exclusiveMinimum !== void 0 && W(t, "exclusiveMinimum", i.exclusiveMinimum), i.maximum !== void 0 && G(t, "maximum", i.maximum), i.exclusiveMaximum !== void 0 && G(t, "exclusiveMaximum", i.exclusiveMaximum), i.multipleOf !== void 0 && ya(t, i.multipleOf), i.format !== void 0 && (t.format ??= i.format, i.format.includes("int") && (t.isInt = !0)), i.mime && xa(t, i.mime);
- for (let e of i.patterns ?? []) ba(t, e);
- return t;
-}
-var Da = {
- guid: "uuid",
- url: "uri",
- datetime: "date-time",
- json_string: "json-string",
- regex: ""
-}, Oa = /* @__PURE__ */ new Map([[qn, Nt], [Yn, Pt]]), ka = (e) => Oa.get(e) ?? e, Aa = (e, t, n, r) => {
- let i = n;
- i.type = "string";
- let { minimum: a, maximum: o, format: s, patterns: c, contentEncoding: l, laxFormat: u } = K(e);
- if (typeof a == "number" && (i.minLength = a), typeof o == "number" && (i.maxLength = o), s && (i.format = Da[s] ?? s, i.format === "" && delete i.format, (s === "time" || u) && delete i.format), l && (i.contentEncoding = l), c && c.size > 0) {
- let e = [...c].map(ka);
- e.length === 1 ? i.pattern = e[0].source : e.length > 1 && (i.allOf = [...e.map((e) => ({
- ...t.target === "draft-07" || t.target === "draft-04" || t.target === "openapi-3.0" ? { type: "string" } : {},
- pattern: e.source
- }))]);
- }
-}, ja = (e, t, n, r) => {
- let i = n, { minimum: a, maximum: o, multipleOf: s, exclusiveMaximum: c, exclusiveMinimum: l, isInt: u } = K(e);
- i.type = u ? "integer" : "number";
- let d = typeof l == "number" && l >= (a ?? -Infinity), f = typeof c == "number" && c <= (o ?? Infinity), p = t.target === "draft-04" || t.target === "openapi-3.0";
- if (d ? p ? (i.minimum = l, i.exclusiveMinimum = !0) : i.exclusiveMinimum = l : typeof a == "number" && (i.minimum = a), f ? p ? (i.maximum = c, i.exclusiveMaximum = !0) : i.exclusiveMaximum = c : typeof o == "number" && (i.maximum = o), s) {
- let n = /* @__PURE__ */ new Set();
- for (let a of s) Number.isFinite(a) && a !== 0 ? n.add(Math.abs(a)) : V(e, t, i, r, `A multipleOf divisor of ${a} cannot be represented in JSON Schema`);
- let [a, ...o] = n;
- a !== void 0 && (i.multipleOf = a), o.length && (i.allOf = [...i.allOf ?? [], ...o.map((e) => ({ multipleOf: e }))]);
- }
-}, Ma = (e, t, n, r) => {
- n.not = {};
-}, Na = (t, n, r, i) => {
- let a = t._zod.def, o = e(a.entries);
- o.length === 0 ? r.not = {} : (o.every((e) => typeof e == "number") && (r.type = "number"), o.every((e) => typeof e == "string") && (r.type = "string"), r.enum = o);
-}, Pa = (e, t, n, r) => {
- let i = e._zod.def;
- if (i.values.length === 0) {
- n.not = {};
- return;
- }
- let a = [];
- for (let o of i.values) if (o === void 0) {
- if (V(e, t, n, r, "Literal `undefined` cannot be represented in JSON Schema")) return;
- } else if (typeof o == "bigint") {
- if (V(e, t, n, r, "BigInt literals cannot be represented in JSON Schema")) return;
- a.push(Number(o));
- } else a.push(o);
- if (a.length !== 0) {
- if (a.length === 1) {
- let e = a[0];
- n.type = e === null ? "null" : typeof e, t.target === "draft-04" || t.target === "openapi-3.0" ? n.enum = [e] : n.const = e;
- } else a.every((e) => typeof e == "number") && (n.type = "number"), a.every((e) => typeof e == "string") && (n.type = "string"), a.every((e) => typeof e == "boolean") && (n.type = "boolean"), a.every((e) => e === null) && (n.type = "null"), n.enum = a;
- }
-}, Fa = (e, t, n, r) => {
- V(e, t, n, r, "Custom types cannot be represented in JSON Schema");
-}, Ia = (e, t, n, r) => {
- V(e, t, n, r, "Transforms cannot be represented in JSON Schema");
-}, La = (e, t, n, r) => {
- let i = n, a = e._zod.def, { minimum: o, maximum: s } = K(e);
- typeof o == "number" && (i.minItems = o), typeof s == "number" && (i.maxItems = s), i.type = "array", i.items = H(a.element, t, {
- ...r,
- path: [...r.path, "items"]
- });
-};
-function Ra(e) {
- let t = e._zod.def;
- return t.type === "pipe" && t.in._zod.traits.has("$ZodTransform") ? Ra(t.out) : t.type === "catch" ? Ra(t.innerType) : e._zod.optin;
-}
-var za = (e, t, n, r) => {
- let i = n, a = e._zod.def, o = a.shape;
- if (Object.getOwnPropertySymbols(o).length && V(e, t, i, r, "Symbol keys cannot be represented in JSON Schema")) return;
- i.type = "object", i.properties = {};
- for (let e in o) c(i.properties, e, H(o[e], t, {
- ...r,
- path: [
- ...r.path,
- "properties",
- e
- ]
- }));
- let s = [];
- for (let e of Object.keys(o)) {
- let n = a.shape[e];
- (t.io === "input" ? Ra(n) === void 0 : n._zod.optout === void 0) && s.push(e);
- }
- s.length > 0 && (i.required = s), a.catchall?._zod.def.type === "never" ? i.additionalProperties = !1 : a.catchall ? a.catchall && (i.additionalProperties = H(a.catchall, t, {
- ...r,
- path: [...r.path, "additionalProperties"]
- })) : t.io === "output" && (i.additionalProperties = !1);
-}, Ba = (e, t, n, r) => {
- let i = e._zod.def, a = i.inclusive === !1, o = i.options.map((e, n) => H(e, t, {
- ...r,
- path: [
- ...r.path,
- a ? "oneOf" : "anyOf",
- n
- ]
- }));
- a ? n.oneOf = o : n.anyOf = o;
-}, Va = (e, t, n, r) => {
- let i = e._zod.def, a = H(i.left, t, {
- ...r,
- path: [
- ...r.path,
- "allOf",
- 0
- ]
- }), o = H(i.right, t, {
- ...r,
- path: [
- ...r.path,
- "allOf",
- 1
- ]
- }), s = (e) => "allOf" in e && Object.keys(e).length === 1, c = [...s(a) ? a.allOf : [a], ...s(o) ? o.allOf : [o]];
- n.allOf = c, t.intersections.push(c);
-}, Ha = (e, t, n, r) => {
- let i = e._zod.def, a = H(i.innerType, t, r), o = t.seen.get(e);
- t.target === "openapi-3.0" ? (o.ref = i.innerType, n.nullable = !0) : n.anyOf = [a, { type: "null" }];
-}, Ua = (e, t, n, r) => {
- let i = e._zod.def;
- H(i.innerType, t, r);
- let a = t.seen.get(e);
- a.ref = i.innerType;
-}, Wa = Symbol();
-function Ga(e, t, n, r, i) {
- let a = !1, o = JSON.stringify(e, (e, t) => typeof t == "bigint" ? (a = !0, null) : t);
- return a ? (V(t, n, r, i, "BigInt defaults cannot be represented in JSON Schema"), Wa) : JSON.parse(o);
-}
-var Ka = (e, t, n, r) => {
- let i = e._zod.def;
- H(i.innerType, t, r);
- let a = t.seen.get(e);
- a.ref = i.innerType;
- let o = Ga(i.defaultValue, e, t, n, r);
- o !== Wa && (n.default = o);
-}, qa = (e, t, n, r) => {
- let i = e._zod.def;
- H(i.innerType, t, r);
- let a = t.seen.get(e);
- if (a.ref = i.innerType, t.io !== "input") return;
- let o = Ga(i.defaultValue, e, t, n, r);
- o !== Wa && (n._prefault = o);
-}, Ja = (e, t, n, r) => {
- let i = e._zod.def;
- H(i.innerType, t, r);
- let a = t.seen.get(e);
- a.ref = i.innerType;
- let o;
- try {
- o = i.catchValue(void 0);
- } catch {
- V(e, t, n, r, "Dynamic catch values are not supported in JSON Schema");
- return;
- }
- n.default = o;
-}, Ya = (e, t, n, r) => {
- let i = e._zod.def, a = i.in._zod.traits.has("$ZodTransform"), o = t.io === "input" ? a ? i.out : i.in : i.out;
- H(o, t, r);
- let s = t.seen.get(e);
- s.ref = o;
-}, Xa = (e, t, n, r) => {
- let i = e._zod.def;
- H(i.innerType, t, r);
- let a = t.seen.get(e);
- a.ref = i.innerType, n.readOnly = !0;
-}, Za = (e, t, n, r) => {
- let i = e._zod.def;
- H(i.innerType, t, r);
- let a = t.seen.get(e);
- a.ref = i.innerType;
-}, Qa = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);
-function $a(e, t, n) {
- Object.defineProperty(e, t, {
- configurable: !0,
- enumerable: !1,
- get() {
- let e = n(this);
- return Object.defineProperty(this, t, {
- value: e,
- configurable: !0,
- writable: !0
- }), e;
- },
- set(e) {
- Object.defineProperty(this, t, {
- value: e,
- configurable: !0,
- writable: !0
- });
- }
- });
-}
-var q = /*@__PURE__*/ O("ZodError", (e, t) => {
- qe.init(e, t), e.name = "ZodError";
- let r = Object.getPrototypeOf(e);
- Qa.has(r) || (Qa.add(r), $a(r, "format", (e) => (t) => Xe(e, t)), $a(r, "flatten", (e) => (t) => Ye(e, t)), $a(r, "addIssue", (e) => (t) => {
- e.issues.push(t), e.message = JSON.stringify(e.issues, n, 2);
- }), $a(r, "addIssues", (e) => (t) => {
- e.issues.push(...t), e.message = JSON.stringify(e.issues, n, 2);
- }), Object.defineProperty(r, "isEmpty", {
- configurable: !0,
- enumerable: !1,
- get() {
- return this.issues.length === 0;
- }
- }));
-}, void 0, { Parent: Error }), eo = /* @__PURE__ */ Qe(q), to = /* @__PURE__ */ $e(q), no = /* @__PURE__ */ et(q), ro = /* @__PURE__ */ nt(q), io = /* @__PURE__ */ ct(q), ao = /* @__PURE__ */ lt(q), oo = /* @__PURE__ */ ut(q), so = /* @__PURE__ */ dt(q), co = /* @__PURE__ */ ft(q), lo = /* @__PURE__ */ pt(q), uo = /* @__PURE__ */ mt(q), fo = /* @__PURE__ */ ht(q);
-//#endregion
-//#region node_modules/zod/v4/classic/schemas.js
-function po() {
- A.localeError || j(ti());
-}
-function mo() {
- A.memoizer || j({ memoizer: Qr() });
-}
-var J = /*@__PURE__*/ O("ZodType", (e, t) => (po(), N.init(e, t), e.def = t, e.type = t.type, e), {
- check(...e) {
- let t = this.def;
- return this.clone(h(t, { checks: [...t.checks ?? [], ...e.map((e) => typeof e == "function" ? { _zod: {
- check: e,
- def: { check: "custom" },
- onattach: []
- } } : e)] }), { parent: !0 });
- },
- with(...e) {
- return this.check(...e);
- },
- clone(e, t) {
- return y(this, e, t);
- },
- brand() {
- return this;
- },
- register(e, t) {
- return e.add(this, t), this;
- },
- refine(e, t) {
- return this.check(Os(e, t));
- },
- superRefine(e, t) {
- return this.check(ks(e, t));
- },
- overwrite(e) {
- return this.check(/* @__PURE__ */ z(e));
- },
- optional() {
- return us(this);
- },
- exactOptional() {
- return fs(this);
- },
- nullable() {
- return ms(this);
- },
- nullish() {
- return us(ms(this));
- },
- nonoptional(e) {
- return bs(this, e);
- },
- array() {
- return Yo(this);
- },
- or(e) {
- return Qo([this, e]);
- },
- and(e) {
- return ns(this, e);
- },
- transform(e) {
- return ws(this, cs(e));
- },
- default(e) {
- return gs(this, e);
- },
- prefault(e) {
- return vs(this, e);
- },
- catch(e) {
- return Ss(this, e);
- },
- pipe(e) {
- return ws(this, e);
- },
- readonly() {
- return Es(this);
- },
- describe(e) {
- let t = this.clone();
- return R.add(t, { description: e }), t;
- },
- meta(...e) {
- if (e.length === 0) return R.get(this);
- let t = this.clone();
- return R.add(t, e[0]), t;
- },
- isOptional() {
- return this.safeParse(void 0).success;
- },
- isNullable() {
- return this.safeParse(null).success;
- },
- apply(e, ...t) {
- return t.length === 0 ? e(this) : e(this, ...t);
- },
- get "~standard"() {
- return De(this, "~standard", {
- ...hn(this),
- jsonSchema: {
- input: _a(this, "input"),
- output: _a(this, "output")
- }
- });
- },
- set "~standard"(e) {
- T(this, "~standard", e);
- },
- parse: function e(t, n) {
- return eo(this, t, n, { callee: e });
- },
- parseAsync: async function e(t, n) {
- return await to(this, t, n, { callee: e });
- },
- safeParse(e, t) {
- return no(this, e, t);
- },
- async safeParseAsync(e, t) {
- return ro(this, e, t);
- },
- get spa() {
- return this?.safeParseAsync;
- },
- set spa(e) {
- T(this, "spa", e);
- },
- validate(e, t) {
- return at(this, e, t);
- },
- validateAsync(e, t) {
- return st(this, e, t);
- },
- encode: function e(t, n) {
- return io(this, t, n, { callee: e });
- },
- decode: function e(t, n) {
- return ao(this, t, n, { callee: e });
- },
- encodeAsync: async function e(t, n) {
- return await oo(this, t, n, { callee: e });
- },
- decodeAsync: async function e(t, n) {
- return await so(this, t, n, { callee: e });
- },
- safeEncode(e, t) {
- return co(this, e, t);
- },
- safeDecode(e, t) {
- return lo(this, e, t);
- },
- async safeEncodeAsync(e, t) {
- return uo(this, e, t);
- },
- async safeDecodeAsync(e, t) {
- return fo(this, e, t);
- },
- toJSONSchema(e) {
- return ga(this, {})(e);
- },
- get description() {
- return R.get(this)?.description;
- },
- get _def() {
- return this._zod.def;
- }
-}), ho = /*@__PURE__*/ O("_ZodString", (e, t) => {
- gn.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Aa(e, t, n, r);
-}, /*@__PURE__*/ Oe({
- format: (e) => K(e).format ?? null,
- minLength: (e) => K(e).minimum ?? null,
- maxLength: (e) => K(e).maximum ?? null
-}, {
- regex(...e) {
- return this.check(/* @__PURE__ */ Gi(...e));
- },
- includes(...e) {
- return this.check(/* @__PURE__ */ Ji(...e));
- },
- startsWith(...e) {
- return this.check(/* @__PURE__ */ Yi(...e));
- },
- endsWith(...e) {
- return this.check(/* @__PURE__ */ Xi(...e));
- },
- min(...e) {
- return this.check(/* @__PURE__ */ Ui(...e));
- },
- max(...e) {
- return this.check(/* @__PURE__ */ Hi(...e));
- },
- length(...e) {
- return this.check(/* @__PURE__ */ Wi(...e));
- },
- nonempty(...e) {
- return this.check(/* @__PURE__ */ Ui(1, ...e));
- },
- lowercase(e) {
- return this.check(/* @__PURE__ */ Ki(e));
- },
- uppercase(e) {
- return this.check(/* @__PURE__ */ qi(e));
- },
- trim() {
- return this.check(/* @__PURE__ */ Qi());
- },
- normalize(...e) {
- return this.check(/* @__PURE__ */ Zi(...e));
- },
- toLowerCase() {
- return this.check(/* @__PURE__ */ $i());
- },
- toUpperCase() {
- return this.check(/* @__PURE__ */ ea());
- },
- slugify() {
- return this.check(/* @__PURE__ */ ta());
- }
-})), go = /*@__PURE__*/ O("ZodString", (e, t) => {
- gn.init(e, t), ho.init(e, t);
-}, {
- email(e) {
- return this.check(/* @__PURE__ */ si(So, e));
- },
- url(e) {
- return this.check(/* @__PURE__ */ pi(To, e));
- },
- jwt(e) {
- return this.check(/* @__PURE__ */ Oi(Bo, e));
- },
- emoji(e) {
- return this.check(/* @__PURE__ */ mi(Eo, e));
- },
- guid(e) {
- return this.check(/* @__PURE__ */ ci(Co, e));
- },
- uuid(e) {
- return this.check(/* @__PURE__ */ li(wo, e));
- },
- uuidv4(e) {
- return this.check(/* @__PURE__ */ ui(wo, e));
- },
- uuidv6(e) {
- return this.check(/* @__PURE__ */ di(wo, e));
- },
- uuidv7(e) {
- return this.check(/* @__PURE__ */ fi(wo, e));
- },
- nanoid(e) {
- return this.check(/* @__PURE__ */ hi(Do, e));
- },
- cuid(e) {
- return this.check(/* @__PURE__ */ gi(Oo, e));
- },
- cuid2(e) {
- return this.check(/* @__PURE__ */ _i(ko, e));
- },
- ulid(e) {
- return this.check(/* @__PURE__ */ vi(Ao, e));
- },
- base64(e) {
- return this.check(/* @__PURE__ */ Ti(Lo, e));
- },
- base64url(e) {
- return this.check(/* @__PURE__ */ Ei(Ro, e));
- },
- xid(e) {
- return this.check(/* @__PURE__ */ yi(jo, e));
- },
- ksuid(e) {
- return this.check(/* @__PURE__ */ bi(Mo, e));
- },
- ipv4(e) {
- return this.check(/* @__PURE__ */ xi(No, e));
- },
- ipv6(e) {
- return this.check(/* @__PURE__ */ Si(Po, e));
- },
- cidrv4(e) {
- return this.check(/* @__PURE__ */ Ci(Fo, e));
- },
- cidrv6(e) {
- return this.check(/* @__PURE__ */ wi(Io, e));
- },
- e164(e) {
- return this.check(/* @__PURE__ */ Di(zo, e));
- },
- datetime(e) {
- return this.check(/* @__PURE__ */ ki(vo, e));
- },
- date(e) {
- return this.check(/* @__PURE__ */ Ai(yo, e));
- },
- time(e) {
- return this.check(/* @__PURE__ */ ji(bo, e));
- },
- duration(e) {
- return this.check(/* @__PURE__ */ Mi(xo, e));
- }
-});
-function _o(e) {
- return /* @__PURE__ */ oi(go, e);
-}
-var Y = /*@__PURE__*/ O("ZodStringFormat", (e, t) => {
- P.init(e, t), ho.init(e, t);
-}), vo = /*@__PURE__*/ O("ZodISODateTime", (e, t) => {
- Fn.init(e, t), Y.init(e, t);
-}), yo = /*@__PURE__*/ O("ZodISODate", (e, t) => {
- In.init(e, t), Y.init(e, t);
-}), bo = /*@__PURE__*/ O("ZodISOTime", (e, t) => {
- Ln.init(e, t), Y.init(e, t);
-}), xo = /*@__PURE__*/ O("ZodISODuration", (e, t) => {
- Rn.init(e, t), Y.init(e, t);
-}), So = /*@__PURE__*/ O("ZodEmail", (e, t) => {
- yn.init(e, t), Y.init(e, t);
-}), Co = /*@__PURE__*/ O("ZodGUID", (e, t) => {
- _n.init(e, t), Y.init(e, t);
-}), wo = /*@__PURE__*/ O("ZodUUID", (e, t) => {
- vn.init(e, t), Y.init(e, t);
-}), To = /*@__PURE__*/ O("ZodURL", (e, t) => {
- Dn.init(e, t), Y.init(e, t);
-}), Eo = /*@__PURE__*/ O("ZodEmoji", (e, t) => {
- On.init(e, t), Y.init(e, t);
-}), Do = /*@__PURE__*/ O("ZodNanoID", (e, t) => {
- kn.init(e, t), Y.init(e, t);
-}), Oo = /*@__PURE__*/ O("ZodCUID", (e, t) => {
- An.init(e, t), Y.init(e, t);
-}), ko = /*@__PURE__*/ O("ZodCUID2", (e, t) => {
- jn.init(e, t), Y.init(e, t);
-}), Ao = /*@__PURE__*/ O("ZodULID", (e, t) => {
- Mn.init(e, t), Y.init(e, t);
-}), jo = /*@__PURE__*/ O("ZodXID", (e, t) => {
- Nn.init(e, t), Y.init(e, t);
-}), Mo = /*@__PURE__*/ O("ZodKSUID", (e, t) => {
- Pn.init(e, t), Y.init(e, t);
-}), No = /*@__PURE__*/ O("ZodIPv4", (e, t) => {
- zn.init(e, t), Y.init(e, t);
-}), Po = /*@__PURE__*/ O("ZodIPv6", (e, t) => {
- Hn.init(e, t), Y.init(e, t);
-}), Fo = /*@__PURE__*/ O("ZodCIDRv4", (e, t) => {
- Un.init(e, t), Y.init(e, t);
-}), Io = /*@__PURE__*/ O("ZodCIDRv6", (e, t) => {
- Gn.init(e, t), Y.init(e, t);
-}), Lo = /*@__PURE__*/ O("ZodBase64", (e, t) => {
- Jn.init(e, t), Y.init(e, t);
-}), Ro = /*@__PURE__*/ O("ZodBase64URL", (e, t) => {
- Zn.init(e, t), Y.init(e, t);
-}), zo = /*@__PURE__*/ O("ZodE164", (e, t) => {
- Qn.init(e, t), Y.init(e, t);
-}), Bo = /*@__PURE__*/ O("ZodJWT", (e, t) => {
- er.init(e, t), Y.init(e, t);
-}), Vo = /*@__PURE__*/ O("ZodNumber", (e, t) => {
- tr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => ja(e, t, n, r), e.isFinite = !0;
-}, /*@__PURE__*/ Oe({
- minValue: (e) => {
- let { minimum: t, exclusiveMinimum: n } = K(e);
- return Math.max(t ?? -Infinity, n ?? -Infinity);
- },
- maxValue: (e) => {
- let { maximum: t, exclusiveMaximum: n } = K(e);
- return Math.min(t ?? Infinity, n ?? Infinity);
- },
- isInt: (e) => {
- let { isInt: t, multipleOf: n } = K(e);
- return !!t || !!n?.some(Number.isSafeInteger);
- },
- format: (e) => K(e).format ?? null
-}, {
- gt(e, t) {
- return this.check(/* @__PURE__ */ zi(e, t));
- },
- gte(e, t) {
- return this.check(/* @__PURE__ */ Bi(e, t));
- },
- min(e, t) {
- return this.check(/* @__PURE__ */ Bi(e, t));
- },
- lt(e, t) {
- return this.check(/* @__PURE__ */ Li(e, t));
- },
- lte(e, t) {
- return this.check(/* @__PURE__ */ Ri(e, t));
- },
- max(e, t) {
- return this.check(/* @__PURE__ */ Ri(e, t));
- },
- int(e) {
- return this.check(Uo(e));
- },
- safe(e) {
- return this.check(Uo(e));
- },
- positive(e) {
- return this.check(/* @__PURE__ */ zi(0, e));
- },
- nonnegative(e) {
- return this.check(/* @__PURE__ */ Bi(0, e));
- },
- negative(e) {
- return this.check(/* @__PURE__ */ Li(0, e));
- },
- nonpositive(e) {
- return this.check(/* @__PURE__ */ Ri(0, e));
- },
- multipleOf(e, t) {
- return this.check(/* @__PURE__ */ Vi(e, t));
- },
- step(e, t) {
- return this.check(/* @__PURE__ */ Vi(e, t));
- },
- finite() {
- return this;
- }
-}));
-function X(e) {
- return /* @__PURE__ */ Ni(Vo, e);
-}
-var Ho = /*@__PURE__*/ O("ZodNumberFormat", (e, t) => {
- nr.init(e, t), Vo.init(e, t);
-});
-function Uo(e) {
- return /* @__PURE__ */ Pi(Ho, e);
-}
-var Wo = /*@__PURE__*/ O("ZodUnknown", (e, t) => {
- rr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (e, t, n) => void 0;
-});
-function Go() {
- return /* @__PURE__ */ Fi(Wo);
-}
-var Ko = /*@__PURE__*/ O("ZodNever", (e, t) => {
- ir.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ma(e, t, n, r);
-});
-function qo(e) {
- return /* @__PURE__ */ Ii(Ko, e);
-}
-var Jo = /*@__PURE__*/ O("ZodArray", (e, t) => {
- mo(), or.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => La(e, t, n, r), e.element = t.element;
-}, {
- min(e, t) {
- return this.check(/* @__PURE__ */ Ui(e, t));
- },
- nonempty(e) {
- return this.check(/* @__PURE__ */ Ui(1, e));
- },
- max(e, t) {
- return this.check(/* @__PURE__ */ Hi(e, t));
- },
- length(e, t) {
- return this.check(/* @__PURE__ */ Wi(e, t));
- },
- unwrap() {
- return this.element;
- }
-});
-function Yo(e, t) {
- return /* @__PURE__ */ na(Jo, e, t);
-}
-var Xo = /*@__PURE__*/ O("ZodObject", (e, t) => {
- mo(), fr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => za(e, t, n, r), Ne(e, "shape", (e) => e._zod.def.shape, !1);
-}, {
- keyof() {
- return is(Object.keys(this._zod.def.shape));
- },
- catchall(e) {
- return this.clone(h(this._zod.def, { catchall: e }));
- },
- passthrough() {
- return this.clone(h(this._zod.def, { catchall: Go() }));
- },
- loose() {
- return this.clone(h(this._zod.def, { catchall: Go() }));
- },
- strict() {
- return this.clone(h(this._zod.def, { catchall: qo() }));
- },
- strip() {
- return this.clone(h(this._zod.def, { catchall: void 0 }));
- },
- extend(e) {
- return pe(this, e);
- },
- safeExtend(e) {
- return he(this, e);
- },
- merge(e) {
- return ge(this, e);
- },
- pick(e) {
- return ue(this, e);
- },
- omit(e) {
- return fe(this, e);
- },
- partial(...e) {
- return _e(ls, this, e[0]);
- },
- exactPartial(...e) {
- return _e(ds, this, e[0], "exactPartial");
- },
- required(...e) {
- return ve(ys, this, e[0]);
- }
-});
-function Z(e, t) {
- return new Xo({
- type: "object",
- shape: e ?? {},
- ...b(t)
- });
-}
-var Zo = /*@__PURE__*/ O("ZodUnion", (e, t) => {
- mr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ba(e, t, n, r), e.options = t.options;
-});
-function Qo(e, t) {
- return new Zo({
- type: "union",
- options: e,
- ...b(t)
- });
-}
-var $o = /*@__PURE__*/ O("ZodDiscriminatedUnion", (e, t) => {
- Zo.init(e, t), gr.init(e, t);
-});
-function es(e, t, n) {
- return new $o({
- type: "union",
- options: t,
- discriminator: e,
- ...b(n)
- });
-}
-var ts = /*@__PURE__*/ O("ZodIntersection", (e, t) => {
- _r.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Va(e, t, n, r);
-});
-function ns(e, t) {
- return new ts({
- type: "intersection",
- left: e,
- right: t
- });
-}
-var rs = /*@__PURE__*/ O("ZodEnum", (e, t) => {
- br.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Na(e, t, n, r), e.enum = t.entries, e.options = [...e._zod.values];
- let n = new Set(Object.keys(t.entries));
- e.extract = (e, r) => {
- let i = {};
- for (let r of e) if (n.has(r)) i[r] = t.entries[r];
- else throw Error(`Key ${r} not found in enum`);
- return new rs({
- ...t,
- checks: [],
- ...b(r),
- entries: i
- });
- }, e.exclude = (e, r) => {
- let i = { ...t.entries };
- for (let t of e) if (n.has(t)) delete i[t];
- else throw Error(`Key ${t} not found in enum`);
- return new rs({
- ...t,
- checks: [],
- ...b(r),
- entries: i
- });
- };
-});
-function is(e, t) {
- return new rs({
- type: "enum",
- entries: Array.isArray(e) ? Object.fromEntries(e.map((e) => [e, e])) : e,
- ...b(t)
- });
-}
-var as = /*@__PURE__*/ O("ZodLiteral", (e, t) => {
- xr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Pa(e, t, n, r), e.values = new Set(t.values), Object.defineProperty(e, "value", { get() {
- if (t.values.length > 1) throw Error("This schema contains multiple valid literal values. Use `.values` instead.");
- return t.values[0];
- } });
-});
-function os(e, t) {
- return new as({
- type: "literal",
- values: Array.isArray(e) ? e : [e],
- ...b(t)
- });
-}
-var ss = /*@__PURE__*/ O("ZodTransform", (e, t) => {
- mo(), Sr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ia(e, t, n, r), e._zod.parse = (n, r) => {
- if (r.direction === "backward") throw new Be(e.constructor.name);
- n.addIssue = (r) => {
- if (typeof r == "string") n.issues.push(w(r, n.value, t));
- else {
- let t = r;
- t.fatal && (t.continue = !1), t.code ??= "custom", "input" in t || (t.input = n.value), t.inst ??= e, n.issues.push(w(t));
- }
- };
- let i = t.transform(n.value, n);
- return i instanceof Promise ? i.then((e) => (n.value = e, n)) : (n.value = i, n);
- };
-});
-function cs(e) {
- return new ss({
- type: "transform",
- transform: e
- });
-}
-var ls = /*@__PURE__*/ O("ZodOptional", (e, t) => {
- wr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Za(e, t, n, r), e.unwrap = () => e._zod.def.innerType;
-});
-function us(e) {
- return new ls({
- type: "optional",
- innerType: e
- });
-}
-var ds = /*@__PURE__*/ O("ZodExactOptional", (e, t) => {
- Tr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Za(e, t, n, r), e.unwrap = () => e._zod.def.innerType;
-});
-function fs(e) {
- return new ds({
- type: "optional",
- innerType: e
- });
-}
-var ps = /*@__PURE__*/ O("ZodNullable", (e, t) => {
- Er.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ha(e, t, n, r), e.unwrap = () => e._zod.def.innerType;
-});
-function ms(e) {
- return new ps({
- type: "nullable",
- innerType: e
- });
-}
-var hs = /*@__PURE__*/ O("ZodDefault", (e, t) => {
- Dr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ka(e, t, n, r), e.unwrap = () => e._zod.def.innerType, e.removeDefault = e.unwrap;
-});
-function gs(e, t) {
- return new hs({
- type: "default",
- innerType: e,
- get defaultValue() {
- return typeof t == "function" ? t() : ie(t);
- }
- });
-}
-var _s = /*@__PURE__*/ O("ZodPrefault", (e, t) => {
- kr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => qa(e, t, n, r), e.unwrap = () => e._zod.def.innerType;
-});
-function vs(e, t) {
- return new _s({
- type: "prefault",
- innerType: e,
- get defaultValue() {
- return typeof t == "function" ? t() : ie(t);
- }
- });
-}
-var ys = /*@__PURE__*/ O("ZodNonOptional", (e, t) => {
- Ar.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ua(e, t, n, r), e.unwrap = () => e._zod.def.innerType;
-});
-function bs(e, t) {
- return new ys({
- type: "nonoptional",
- innerType: e,
- ...b(t)
- });
-}
-var xs = /*@__PURE__*/ O("ZodCatch", (e, t) => {
- Nr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ja(e, t, n, r), e.unwrap = () => e._zod.def.innerType, e.removeCatch = e.unwrap;
-});
-function Ss(e, t) {
- return new xs({
- type: "catch",
- innerType: e,
- catchValue: typeof t == "function" ? t : Fe(t)
- });
-}
-var Cs = /*@__PURE__*/ O("ZodPipe", (e, t) => {
- Pr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Ya(e, t, n, r), e.in = t.in, e.out = t.out;
-});
-function ws(e, t) {
- return new Cs({
- type: "pipe",
- in: e,
- out: t
- });
-}
-var Ts = /*@__PURE__*/ O("ZodReadonly", (e, t) => {
- Fr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Xa(e, t, n, r), e.unwrap = () => e._zod.def.innerType;
-});
-function Es(e) {
- return new Ts({
- type: "readonly",
- innerType: e
- });
-}
-var Ds = /*@__PURE__*/ O("ZodCustom", (e, t) => {
- Lr.init(e, t), J.init(e, t), e._zod.processJSONSchema = (t, n, r) => Fa(e, t, n, r);
-});
-function Os(e, t = {}) {
- return /* @__PURE__ */ ra(Ds, e, t);
-}
-function ks(e, t) {
- return /* @__PURE__ */ ia(e, t);
-}
-//#endregion
-//#region app/javascript/utils/create-byte-limited-string-schema/index.ts
-var As = new TextEncoder();
-function Q(e, { prefix: t, required: n = !1 } = {}) {
- return _o().refine((r) => (!n || r !== "") && (!t || r === "" || r.startsWith(t)) && As.encode(r).length <= e);
-}
-//#endregion
-//#region app/javascript/utils/review-anchor/constants.ts
-var js = 16384, Ms = 2048, Ns = 2048, Ps = 1024, Fs = 4096, Is = 1e3, Ls = 2e3, Rs = 1e6, zs = 1e5, Bs = new TextEncoder(), Vs = X().min(0).max(Rs), $ = X().min(-Rs).max(Rs), Hs = X().min(0).max(Rs), Us = Z({
- x: X().min(0).max(1),
- y: X().min(0).max(1)
-}).strict(), Ws = Z({
- pathname: Q(Ms, {
- prefix: "/",
- required: !0
- }),
- search: Q(Ns, { prefix: "?" }),
- hash: Q(Ps, { prefix: "#" })
-}).strict(), Gs = Z({
- x: Vs,
- y: Vs,
- width: Hs,
- height: Hs
-}).strict();
-Z({
- x: $,
- y: $
-}).strict();
-var Ks = Z({
- width: X().min(1).max(zs),
- height: X().min(1).max(zs),
- scrollX: Vs,
- scrollY: Vs
-}).strict(), qs = Z({
- schemaVersion: os(1),
- kind: os("element"),
- route: Ws,
- selector: Q(Fs, { required: !0 }),
- accessibleName: Q(Is),
- tagName: Q(64, { required: !0 }).regex(/^[a-z][a-z0-9-]*$/),
- selectedText: Q(Ls),
- rect: Gs,
- viewport: Ks,
- elementOffset: Us
-}).strict().refine((e) => Bs.encode(JSON.stringify(e)).length <= js), Js = Z({
- selector: Q(Fs, { required: !0 }),
- accessibleName: Q(Is),
- tagName: Q(64, { required: !0 }).regex(/^[a-z][a-z0-9-]*$/),
- role: Q(64),
- textExcerpt: Q(500),
- rect: Gs
-}).strict(), Ys = es("kind", [qs, Z({
- schemaVersion: os(1),
- kind: os("area"),
- route: Ws,
- path: Yo(Us).min(2).max(160),
- rect: Gs,
- viewport: Ks,
- elements: Yo(Js).max(8)
-}).strict().refine((e) => Math.hypot(e.rect.width, e.rect.height) >= 8).refine((e) => Bs.encode(JSON.stringify(e)).length <= js)]);
-es("status", [Z({
- commentId: X().int().positive().max(2 ** 53 - 1),
- status: is(["resolved", "moved"]),
- rect: Z({
- x: $,
- y: $,
- width: Hs,
- height: Hs
- }).strict(),
- point: Z({
- x: $,
- y: $
- }).strict()
-}).strict(), Z({
- commentId: X().int().positive().max(2 ** 53 - 1),
- status: is([
- "changed",
- "missing",
- "route-mismatch"
- ])
-}).strict()]);
-//#endregion
-//#region app/javascript/utils/review-anchor/validate-anchor.ts
-function Xs(e) {
- return Ys.parse(e);
-}
-//#endregion
-export { Xs as validateAnchor };
+Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0])a(n);else{if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}(e.metadataRegistry.get(n[0])?.id||r.cycle||r.count>1&&e.reused===`ref`)&&a(n)}}e.external&&(e.sharedDefsExtractedFor=e.external)}function la(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;la(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}var ua=/* @__PURE__ */ new Set([`type`,`properties`,`required`,`additionalProperties`]),da=[`oneOf`,`anyOf`];function fa(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function pa(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!ua.has(e))return null;t.push(n)}let n={},r=/* @__PURE__ */ new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??fa(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}c(n,r,e.length===1?e[0]:pa(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=fa(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function ma(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of ua)if(t in e)return;let n=t.filter(e=>da.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=pa(t);else{let e=n[0],i=da.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>pa([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,B(e,r))}function ha(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):B(i,s),B(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())la(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=/* @__PURE__ */ new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])ma(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}B(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,c(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:_a(t,`input`,e.processors),output:_a(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function U(e,t){let n=t??{seen:/* @__PURE__ */ new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return U(r.element,n);if(r.type===`set`)return U(r.valueType,n);if(r.type===`lazy`)return U(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return U(r.innerType,n);if(r.type===`intersection`)return U(r.left,n)||U(r.right,n);if(r.type===`record`||r.type===`map`)return U(r.keyType,n)||U(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:U(r.in,n)||U(r.out,n);if(r.type===`object`){for(let e in r.shape)if(U(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(U(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(U(e,n))return!0;return!!(r.rest&&U(r.rest,n))}return!1}var ga=(e,t={})=>n=>{let r=oa({...n,processors:t});return H(e,r),ca(r,e),ha(r,e)},_a=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=oa({...i??{},target:a,io:t,processors:n});return H(e,o),ca(o,e),ha(o,e)},W=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},G=(e,t,n)=>{(e[t]===void 0||n{W(e,`minimum`,t),G(e,`maximum`,t)},ya=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},ba=(e,t)=>{e.patterns??=/* @__PURE__ */ new Set,e.patterns.add(t)},xa=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},Sa=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},Ca=(e,t)=>W(e,`minimum`,t.minimum),wa=(e,t)=>G(e,`maximum`,t.maximum),Ta=e=>(t,n)=>{Sa(t,n.format);let[r,i]=e[n.format];W(t,`minimum`,r),G(t,`maximum`,i)},Ea={greater_than:(e,t)=>W(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>G(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>ya(e,t.value),number_format:Ta(ce),bigint_format:Ta(le),min_length:Ca,max_length:wa,length_equals:(e,t)=>va(e,t.length),min_size:Ca,max_size:wa,size_equals:(e,t)=>va(e,t.size),string_format:(e,t)=>{Sa(e,t.format),t.pattern&&ba(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>xa(e,t.mime)};function K(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)Ea[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&W(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&W(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&G(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&G(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&ya(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&xa(t,i.mime);for(let e of i.patterns??[])ba(t,e);return t}var Da={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Oa=/* @__PURE__ */ new Map([[qn,Nt],[Yn,Pt]]),ka=e=>Oa.get(e)??e,Aa=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=K(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Da[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map(ka);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},ja=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=K(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=/* @__PURE__ */ new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):V(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},Ma=(e,t,n,r)=>{n.not={}},Na=(t,n,r,i)=>{let a=t._zod.def,o=e(a.entries);o.length===0?r.not={}:(o.every(e=>typeof e==`number`)&&(r.type=`number`),o.every(e=>typeof e==`string`)&&(r.type=`string`),r.enum=o)},Pa=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(V(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(V(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Fa=(e,t,n,r)=>{V(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},Ia=(e,t,n,r)=>{V(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},La=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=K(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=H(a.element,t,{...r,path:[...r.path,`items`]})};function Ra(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?Ra(t.out):t.type===`catch`?Ra(t.innerType):e._zod.optin}var za=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&V(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)c(i.properties,e,H(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?Ra(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=H(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Ba=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>H(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Va=(e,t,n,r)=>{let i=e._zod.def,a=H(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=H(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)},Ha=(e,t,n,r)=>{let i=e._zod.def,a=H(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Ua=(e,t,n,r)=>{let i=e._zod.def;H(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Wa=Symbol();function Ga(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(V(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),Wa):JSON.parse(o)}var Ka=(e,t,n,r)=>{let i=e._zod.def;H(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=Ga(i.defaultValue,e,t,n,r);o!==Wa&&(n.default=o)},qa=(e,t,n,r)=>{let i=e._zod.def;H(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=Ga(i.defaultValue,e,t,n,r);o!==Wa&&(n._prefault=o)},Ja=(e,t,n,r)=>{let i=e._zod.def;H(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{V(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},Ya=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;H(o,t,r);let s=t.seen.get(e);s.ref=o},Xa=(e,t,n,r)=>{let i=e._zod.def;H(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},Za=(e,t,n,r)=>{let i=e._zod.def;H(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Qa=/* @__PURE__ */ new WeakSet([Object.prototype,Error.prototype]);function $a(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}var q=/*@__PURE__*/ O(`ZodError`,(e,t)=>{qe.init(e,t),e.name=`ZodError`;let r=Object.getPrototypeOf(e);Qa.has(r)||(Qa.add(r),$a(r,`format`,e=>t=>Xe(e,t)),$a(r,`flatten`,e=>t=>Ye(e,t)),$a(r,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,n,2)}),$a(r,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,n,2)}),Object.defineProperty(r,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},void 0,{Parent:Error}),eo=/* @__PURE__ */ Qe(q),to=/* @__PURE__ */ $e(q),no=/* @__PURE__ */ et(q),ro=/* @__PURE__ */ nt(q),io=/* @__PURE__ */ ct(q),ao=/* @__PURE__ */ lt(q),oo=/* @__PURE__ */ ut(q),so=/* @__PURE__ */ dt(q),co=/* @__PURE__ */ ft(q),lo=/* @__PURE__ */ pt(q),uo=/* @__PURE__ */ mt(q),fo=/* @__PURE__ */ ht(q);function po(){A.localeError||j(ti())}function mo(){A.memoizer||j({memoizer:Qr()})}var J=/*@__PURE__*/ O(`ZodType`,(e,t)=>(po(),N.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone(h(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return y(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Os(e,t))},superRefine(e,t){return this.check(ks(e,t))},overwrite(e){return this.check(/* @__PURE__ */ z(e))},optional(){return us(this)},exactOptional(){return fs(this)},nullable(){return ms(this)},nullish(){return us(ms(this))},nonoptional(e){return bs(this,e)},array(){return Yo(this)},or(e){return Qo([this,e])},and(e){return ns(this,e)},transform(e){return ws(this,cs(e))},default(e){return gs(this,e)},prefault(e){return vs(this,e)},catch(e){return Ss(this,e)},pipe(e){return ws(this,e)},readonly(){return Es(this)},describe(e){let t=this.clone();return R.add(t,{description:e}),t},meta(...e){if(e.length===0)return R.get(this);let t=this.clone();return R.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return De(this,`~standard`,{...hn(this),jsonSchema:{input:_a(this,`input`),output:_a(this,`output`)}})},set"~standard"(e){T(this,`~standard`,e)},parse:function e(t,n){return eo(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await to(this,t,n,{callee:e})},safeParse(e,t){return no(this,e,t)},async safeParseAsync(e,t){return ro(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){T(this,`spa`,e)},validate(e,t){return at(this,e,t)},validateAsync(e,t){return st(this,e,t)},encode:function e(t,n){return io(this,t,n,{callee:e})},decode:function e(t,n){return ao(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await oo(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await so(this,t,n,{callee:e})},safeEncode(e,t){return co(this,e,t)},safeDecode(e,t){return lo(this,e,t)},async safeEncodeAsync(e,t){return uo(this,e,t)},async safeDecodeAsync(e,t){return fo(this,e,t)},toJSONSchema(e){return ga(this,{})(e)},get description(){return R.get(this)?.description},get _def(){return this._zod.def}}),ho=/*@__PURE__*/ O(`_ZodString`,(e,t)=>{gn.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Aa(e,t,n,r)},/*@__PURE__*/ Oe({format:e=>K(e).format??null,minLength:e=>K(e).minimum??null,maxLength:e=>K(e).maximum??null},{regex(...e){return this.check(/* @__PURE__ */ Gi(...e))},includes(...e){return this.check(/* @__PURE__ */ Ji(...e))},startsWith(...e){return this.check(/* @__PURE__ */ Yi(...e))},endsWith(...e){return this.check(/* @__PURE__ */ Xi(...e))},min(...e){return this.check(/* @__PURE__ */ Ui(...e))},max(...e){return this.check(/* @__PURE__ */ Hi(...e))},length(...e){return this.check(/* @__PURE__ */ Wi(...e))},nonempty(...e){return this.check(/* @__PURE__ */ Ui(1,...e))},lowercase(e){return this.check(/* @__PURE__ */ Ki(e))},uppercase(e){return this.check(/* @__PURE__ */ qi(e))},trim(){return this.check(/* @__PURE__ */ Qi())},normalize(...e){return this.check(/* @__PURE__ */ Zi(...e))},toLowerCase(){return this.check(/* @__PURE__ */ $i())},toUpperCase(){return this.check(/* @__PURE__ */ ea())},slugify(){return this.check(/* @__PURE__ */ ta())}})),go=/*@__PURE__*/ O(`ZodString`,(e,t)=>{gn.init(e,t),ho.init(e,t)},{email(e){return this.check(/* @__PURE__ */ si(So,e))},url(e){return this.check(/* @__PURE__ */ pi(To,e))},jwt(e){return this.check(/* @__PURE__ */ Oi(Bo,e))},emoji(e){return this.check(/* @__PURE__ */ mi(Eo,e))},guid(e){return this.check(/* @__PURE__ */ ci(Co,e))},uuid(e){return this.check(/* @__PURE__ */ li(wo,e))},uuidv4(e){return this.check(/* @__PURE__ */ ui(wo,e))},uuidv6(e){return this.check(/* @__PURE__ */ di(wo,e))},uuidv7(e){return this.check(/* @__PURE__ */ fi(wo,e))},nanoid(e){return this.check(/* @__PURE__ */ hi(Do,e))},cuid(e){return this.check(/* @__PURE__ */ gi(Oo,e))},cuid2(e){return this.check(/* @__PURE__ */ _i(ko,e))},ulid(e){return this.check(/* @__PURE__ */ vi(Ao,e))},base64(e){return this.check(/* @__PURE__ */ Ti(Lo,e))},base64url(e){return this.check(/* @__PURE__ */ Ei(Ro,e))},xid(e){return this.check(/* @__PURE__ */ yi(jo,e))},ksuid(e){return this.check(/* @__PURE__ */ bi(Mo,e))},ipv4(e){return this.check(/* @__PURE__ */ xi(No,e))},ipv6(e){return this.check(/* @__PURE__ */ Si(Po,e))},cidrv4(e){return this.check(/* @__PURE__ */ Ci(Fo,e))},cidrv6(e){return this.check(/* @__PURE__ */ wi(Io,e))},e164(e){return this.check(/* @__PURE__ */ Di(zo,e))},datetime(e){return this.check(/* @__PURE__ */ ki(vo,e))},date(e){return this.check(/* @__PURE__ */ Ai(yo,e))},time(e){return this.check(/* @__PURE__ */ ji(bo,e))},duration(e){return this.check(/* @__PURE__ */ Mi(xo,e))}});function _o(e){return/* @__PURE__ */ oi(go,e)}var Y=/*@__PURE__*/ O(`ZodStringFormat`,(e,t)=>{P.init(e,t),ho.init(e,t)}),vo=/*@__PURE__*/ O(`ZodISODateTime`,(e,t)=>{Fn.init(e,t),Y.init(e,t)}),yo=/*@__PURE__*/ O(`ZodISODate`,(e,t)=>{In.init(e,t),Y.init(e,t)}),bo=/*@__PURE__*/ O(`ZodISOTime`,(e,t)=>{Ln.init(e,t),Y.init(e,t)}),xo=/*@__PURE__*/ O(`ZodISODuration`,(e,t)=>{Rn.init(e,t),Y.init(e,t)}),So=/*@__PURE__*/ O(`ZodEmail`,(e,t)=>{yn.init(e,t),Y.init(e,t)}),Co=/*@__PURE__*/ O(`ZodGUID`,(e,t)=>{_n.init(e,t),Y.init(e,t)}),wo=/*@__PURE__*/ O(`ZodUUID`,(e,t)=>{vn.init(e,t),Y.init(e,t)}),To=/*@__PURE__*/ O(`ZodURL`,(e,t)=>{Dn.init(e,t),Y.init(e,t)}),Eo=/*@__PURE__*/ O(`ZodEmoji`,(e,t)=>{On.init(e,t),Y.init(e,t)}),Do=/*@__PURE__*/ O(`ZodNanoID`,(e,t)=>{kn.init(e,t),Y.init(e,t)}),Oo=/*@__PURE__*/ O(`ZodCUID`,(e,t)=>{An.init(e,t),Y.init(e,t)}),ko=/*@__PURE__*/ O(`ZodCUID2`,(e,t)=>{jn.init(e,t),Y.init(e,t)}),Ao=/*@__PURE__*/ O(`ZodULID`,(e,t)=>{Mn.init(e,t),Y.init(e,t)}),jo=/*@__PURE__*/ O(`ZodXID`,(e,t)=>{Nn.init(e,t),Y.init(e,t)}),Mo=/*@__PURE__*/ O(`ZodKSUID`,(e,t)=>{Pn.init(e,t),Y.init(e,t)}),No=/*@__PURE__*/ O(`ZodIPv4`,(e,t)=>{zn.init(e,t),Y.init(e,t)}),Po=/*@__PURE__*/ O(`ZodIPv6`,(e,t)=>{Hn.init(e,t),Y.init(e,t)}),Fo=/*@__PURE__*/ O(`ZodCIDRv4`,(e,t)=>{Un.init(e,t),Y.init(e,t)}),Io=/*@__PURE__*/ O(`ZodCIDRv6`,(e,t)=>{Gn.init(e,t),Y.init(e,t)}),Lo=/*@__PURE__*/ O(`ZodBase64`,(e,t)=>{Jn.init(e,t),Y.init(e,t)}),Ro=/*@__PURE__*/ O(`ZodBase64URL`,(e,t)=>{Zn.init(e,t),Y.init(e,t)}),zo=/*@__PURE__*/ O(`ZodE164`,(e,t)=>{Qn.init(e,t),Y.init(e,t)}),Bo=/*@__PURE__*/ O(`ZodJWT`,(e,t)=>{er.init(e,t),Y.init(e,t)}),Vo=/*@__PURE__*/ O(`ZodNumber`,(e,t)=>{tr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ja(e,t,n,r),e.isFinite=!0},/*@__PURE__*/ Oe({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=K(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=K(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=K(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>K(e).format??null},{gt(e,t){return this.check(/* @__PURE__ */ zi(e,t))},gte(e,t){return this.check(/* @__PURE__ */ Bi(e,t))},min(e,t){return this.check(/* @__PURE__ */ Bi(e,t))},lt(e,t){return this.check(/* @__PURE__ */ Li(e,t))},lte(e,t){return this.check(/* @__PURE__ */ Ri(e,t))},max(e,t){return this.check(/* @__PURE__ */ Ri(e,t))},int(e){return this.check(Uo(e))},safe(e){return this.check(Uo(e))},positive(e){return this.check(/* @__PURE__ */ zi(0,e))},nonnegative(e){return this.check(/* @__PURE__ */ Bi(0,e))},negative(e){return this.check(/* @__PURE__ */ Li(0,e))},nonpositive(e){return this.check(/* @__PURE__ */ Ri(0,e))},multipleOf(e,t){return this.check(/* @__PURE__ */ Vi(e,t))},step(e,t){return this.check(/* @__PURE__ */ Vi(e,t))},finite(){return this}}));function X(e){return/* @__PURE__ */ Ni(Vo,e)}var Ho=/*@__PURE__*/ O(`ZodNumberFormat`,(e,t)=>{nr.init(e,t),Vo.init(e,t)});function Uo(e){return/* @__PURE__ */ Pi(Ho,e)}var Wo=/*@__PURE__*/ O(`ZodUnknown`,(e,t)=>{rr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function Go(){return/* @__PURE__ */ Fi(Wo)}var Ko=/*@__PURE__*/ O(`ZodNever`,(e,t)=>{ir.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ma(e,t,n,r)});function qo(e){return/* @__PURE__ */ Ii(Ko,e)}var Jo=/*@__PURE__*/ O(`ZodArray`,(e,t)=>{mo(),or.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>La(e,t,n,r),e.element=t.element},{min(e,t){return this.check(/* @__PURE__ */ Ui(e,t))},nonempty(e){return this.check(/* @__PURE__ */ Ui(1,e))},max(e,t){return this.check(/* @__PURE__ */ Hi(e,t))},length(e,t){return this.check(/* @__PURE__ */ Wi(e,t))},unwrap(){return this.element}});function Yo(e,t){return/* @__PURE__ */ na(Jo,e,t)}var Xo=/*@__PURE__*/ O(`ZodObject`,(e,t)=>{mo(),fr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>za(e,t,n,r),Ne(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return is(Object.keys(this._zod.def.shape))},catchall(e){return this.clone(h(this._zod.def,{catchall:e}))},passthrough(){return this.clone(h(this._zod.def,{catchall:Go()}))},loose(){return this.clone(h(this._zod.def,{catchall:Go()}))},strict(){return this.clone(h(this._zod.def,{catchall:qo()}))},strip(){return this.clone(h(this._zod.def,{catchall:void 0}))},extend(e){return pe(this,e)},safeExtend(e){return he(this,e)},merge(e){return ge(this,e)},pick(e){return ue(this,e)},omit(e){return fe(this,e)},partial(...e){return _e(ls,this,e[0])},exactPartial(...e){return _e(ds,this,e[0],`exactPartial`)},required(...e){return ve(ys,this,e[0])}});function Z(e,t){return new Xo({type:`object`,shape:e??{},...b(t)})}var Zo=/*@__PURE__*/ O(`ZodUnion`,(e,t)=>{mr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ba(e,t,n,r),e.options=t.options});function Qo(e,t){return new Zo({type:`union`,options:e,...b(t)})}var $o=/*@__PURE__*/ O(`ZodDiscriminatedUnion`,(e,t)=>{Zo.init(e,t),gr.init(e,t)});function es(e,t,n){return new $o({type:`union`,options:t,discriminator:e,...b(n)})}var ts=/*@__PURE__*/ O(`ZodIntersection`,(e,t)=>{_r.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Va(e,t,n,r)});function ns(e,t){return new ts({type:`intersection`,left:e,right:t})}var rs=/*@__PURE__*/ O(`ZodEnum`,(e,t)=>{br.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Na(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new rs({...t,checks:[],...b(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new rs({...t,checks:[],...b(r),entries:i})}});function is(e,t){return new rs({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...b(t)})}var as=/*@__PURE__*/ O(`ZodLiteral`,(e,t)=>{xr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pa(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function os(e,t){return new as({type:`literal`,values:Array.isArray(e)?e:[e],...b(t)})}var ss=/*@__PURE__*/ O(`ZodTransform`,(e,t)=>{mo(),Sr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ia(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new Be(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(w(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(w(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function cs(e){return new ss({type:`transform`,transform:e})}var ls=/*@__PURE__*/ O(`ZodOptional`,(e,t)=>{wr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Za(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function us(e){return new ls({type:`optional`,innerType:e})}var ds=/*@__PURE__*/ O(`ZodExactOptional`,(e,t)=>{Tr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Za(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function fs(e){return new ds({type:`optional`,innerType:e})}var ps=/*@__PURE__*/ O(`ZodNullable`,(e,t)=>{Er.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ha(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ms(e){return new ps({type:`nullable`,innerType:e})}var hs=/*@__PURE__*/ O(`ZodDefault`,(e,t)=>{Dr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ka(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function gs(e,t){return new hs({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ie(t)}})}var _s=/*@__PURE__*/ O(`ZodPrefault`,(e,t)=>{kr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qa(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function vs(e,t){return new _s({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ie(t)}})}var ys=/*@__PURE__*/ O(`ZodNonOptional`,(e,t)=>{Ar.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ua(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function bs(e,t){return new ys({type:`nonoptional`,innerType:e,...b(t)})}var xs=/*@__PURE__*/ O(`ZodCatch`,(e,t)=>{Nr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ja(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Ss(e,t){return new xs({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:Fe(t)})}var Cs=/*@__PURE__*/ O(`ZodPipe`,(e,t)=>{Pr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ya(e,t,n,r),e.in=t.in,e.out=t.out});function ws(e,t){return new Cs({type:`pipe`,in:e,out:t})}var Ts=/*@__PURE__*/ O(`ZodReadonly`,(e,t)=>{Fr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xa(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Es(e){return new Ts({type:`readonly`,innerType:e})}var Ds=/*@__PURE__*/ O(`ZodCustom`,(e,t)=>{Lr.init(e,t),J.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fa(e,t,n,r)});function Os(e,t={}){return/* @__PURE__ */ ra(Ds,e,t)}function ks(e,t){return/* @__PURE__ */ ia(e,t)}var As=new TextEncoder;function Q(e,{prefix:t,required:n=!1}={}){return _o().refine(r=>(!n||r!==``)&&(!t||r===``||r.startsWith(t))&&As.encode(r).length<=e)}var js=16384,Ms=2048,Ns=2048,Ps=1024,Fs=4096,Is=1e3,Ls=2e3,Rs=1e6,zs=1e5,Bs=new TextEncoder,Vs=X().min(0).max(Rs),$=X().min(-Rs).max(Rs),Hs=X().min(0).max(Rs),Us=Z({x:X().min(0).max(1),y:X().min(0).max(1)}).strict(),Ws=Z({pathname:Q(Ms,{prefix:`/`,required:!0}),search:Q(Ns,{prefix:`?`}),hash:Q(Ps,{prefix:`#`})}).strict(),Gs=Z({x:Vs,y:Vs,width:Hs,height:Hs}).strict();Z({x:$,y:$}).strict();var Ks=Z({width:X().min(1).max(zs),height:X().min(1).max(zs),scrollX:Vs,scrollY:Vs}).strict(),qs=Z({schemaVersion:os(1),kind:os(`element`),route:Ws,selector:Q(Fs,{required:!0}),accessibleName:Q(Is),tagName:Q(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),selectedText:Q(Ls),rect:Gs,viewport:Ks,elementOffset:Us}).strict().refine(e=>Bs.encode(JSON.stringify(e)).length<=js),Js=Z({selector:Q(Fs,{required:!0}),accessibleName:Q(Is),tagName:Q(64,{required:!0}).regex(/^[a-z][a-z0-9-]*$/),role:Q(64),textExcerpt:Q(500),rect:Gs}).strict(),Ys=es(`kind`,[qs,Z({schemaVersion:os(1),kind:os(`area`),route:Ws,path:Yo(Us).min(2).max(160),rect:Gs,viewport:Ks,elements:Yo(Js).max(8)}).strict().refine(e=>Math.hypot(e.rect.width,e.rect.height)>=8).refine(e=>Bs.encode(JSON.stringify(e)).length<=js)]);es(`status`,[Z({commentId:X().int().positive().max(2**53-1),status:is([`resolved`,`moved`]),rect:Z({x:$,y:$,width:Hs,height:Hs}).strict(),point:Z({x:$,y:$}).strict()}).strict(),Z({commentId:X().int().positive().max(2**53-1),status:is([`changed`,`missing`,`route-mismatch`])}).strict()]);function Xs(e){return Ys.parse(e)}export{Xs as validateAnchor};
\ No newline at end of file
diff --git a/docs/testing-and-review.md b/docs/testing-and-review.md
index 962f693f..504fe329 100644
--- a/docs/testing-and-review.md
+++ b/docs/testing-and-review.md
@@ -20,6 +20,8 @@ Start with the intended behavior and the regression a test should catch. Inspect
Choose assertions that survive an equivalent implementation. Check outcomes such as saved state, returned data, navigation, access decisions, and usable controls. Exact protocol values, serialization, accessible names, meaningful state mappings, and safety restrictions can be contracts worth asserting. Ordinary copy, icon counts, internal markup, and whole configuration snapshots usually are not. A text query that identifies a control is different from a test whose only purpose is freezing its wording. For agent instructions, distinguish discoverable metadata and required safety guidance from incidental phrasing; phrase presence alone does not prove agent behavior.
+Use human review for visual appearance, supported by relevant screenshots or recordings in pull requests with meaningful UI changes. Do not freeze colors, spacing, typography, icon pixels, or cosmetic CSS structure in automated assertions. Test behavior and accessibility instead. Geometry that defines functional data, such as a captured selection's bounds, is different from checking rendered styling.
+
Keep each behavior at its owning layer and use integration tests to prove important connections. Repeating all lower-level cases through every consumer adds cost without necessarily adding confidence. Keep separate cases for distinct failures; combine assertions when they describe one coherent scenario. Parameterization improves readability but still runs every input. Fewer case names or assertions do not establish a faster suite.
For a bug fix, reproduce the failure before the fix when feasible. For new behavior, establish an expected-result failure before implementation when the interface allows it. A missing dependency, syntax error, or test setup failure is not evidence that the test catches the regression. If the implementation already exists, explain the plausible incorrect behavior the test would reject; report red-phase evidence as unavailable unless it was actually observed.
diff --git a/hub/app/javascript/application/prototype-canvas/index.tsx b/hub/app/javascript/application/prototype-canvas/index.tsx
index 5d4c8b50..f96c89de 100644
--- a/hub/app/javascript/application/prototype-canvas/index.tsx
+++ b/hub/app/javascript/application/prototype-canvas/index.tsx
@@ -59,6 +59,7 @@ export function App({ config }: Props) {
collapsedGroups: {},
})
const [hubOpen, setHubOpen] = useState(false)
+ const [improvementControls, setImprovementControls] = useState(null)
const [buildDetailsOpen, setBuildDetailsOpen] = useState(false)
const closeHub = useCallback(() => {
setHubOpen(false)
@@ -210,6 +211,7 @@ export function App({ config }: Props) {
setHubOpen(false),
onNavigate: navigate,
diff --git a/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx b/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx
index f3bf41df..068c5f9d 100644
--- a/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx
+++ b/hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx
@@ -234,7 +234,7 @@ describe("App()", () => {
view.unmount()
})
- it("keeps a failed save visible inside the padded composer with the draft intact", async () => {
+ it("keeps a failed save visible in the composer with the draft intact", async () => {
vi.spyOn(crypto, "randomUUID").mockReturnValue(nonce)
const { fetch, saved } = savedNotesFixture()
const original = fetch.getMockImplementation()!
@@ -274,7 +274,6 @@ describe("App()", () => {
const alert = await composer.findByRole("alert")
expect(alert).toBeVisible()
expect(alert).toHaveTextContent("Notes could not be saved.")
- expect(alert).toHaveClass("improvement-demo__notice")
expect(composer.getByRole("textbox", { name: copy.label })).toHaveValue(
"Keep the save action visible.",
)
@@ -334,7 +333,6 @@ describe("App()", () => {
expect(screen.queryByRole("complementary", { name: copy.notes })).not.toBeInTheDocument()
const marker = screen.getByRole("button", { name: threadCopy.point(1) })
expect(marker).toBeVisible()
- expect(marker).toHaveStyle({ left: "80px", top: "50px" })
fireEvent.click(marker)
const dialog = screen.getByRole("dialog", { name: threadCopy.conversation })
expect(dialog).toBeVisible()
@@ -395,10 +393,8 @@ describe("App()", () => {
if (visible) {
const alert = await screen.findByText(syncError)
expect(alert).toHaveAttribute("role", "alert")
- expect(alert).toHaveClass("thread-sample__error")
} else {
expect(screen.queryByText(syncError)).not.toBeInTheDocument()
- expect(view.container.querySelector(".thread-sample__error")).toBeNull()
}
expect(saved.syncError).toBe(syncError)
view.unmount()
@@ -458,12 +454,7 @@ describe("App()", () => {
const controls = within(await screen.findByRole("group", { name: copy.title }))
const annotate = controls.getByRole("button", { name: copy.annotate })
expect(annotate).toBeDisabled()
- expect(screen.getByRole("complementary", { name: copy.notes })).toHaveClass("hub-sidebar")
- expect(screen.queryByText(copy.demo)).not.toBeInTheDocument()
- expect(screen.queryByText(copy.canvasDemoNotice)).not.toBeInTheDocument()
- expect(screen.queryByText(copy.owner)).not.toBeInTheDocument()
- expect(screen.queryByText(copy.authorContext)).not.toBeInTheDocument()
- expect(screen.queryByText(copy.syncControls)).not.toBeInTheDocument()
+ expect(screen.getByRole("complementary", { name: copy.notes })).toBeVisible()
expect(screen.getByRole("button", { name: threadCopy.simulate(0) })).toBeDisabled()
expect(view.container.querySelector(".canvas-review-controls")).toBeNull()
const initialWrites = fetch.mock.calls.filter(([, options]) => options?.method === "POST")
@@ -549,17 +540,13 @@ describe("App()", () => {
type: "replica:canvas:resolved",
results: [{ id: 1, x: 80, y: 50 }],
})
- expect(screen.getByRole("button", { name: "Open improvement 1" })).toHaveStyle({
- left: "80px",
- top: "50px",
- })
+ expect(screen.getByRole("button", { name: "Open improvement 1" })).toBeVisible()
expect(screen.getAllByText("Clarify this action.")).toHaveLength(2)
fireEvent.click(screen.getByRole("button", { name: threadCopy.back }))
expect(
controls.queryByRole("button", { name: threadCopy.simulate(1) }),
).not.toBeInTheDocument()
fireEvent.click(screen.getByRole("button", { name: threadCopy.simulate(1) }))
- expect(screen.queryByRole("dialog", { name: copy.handoff })).not.toBeInTheDocument()
await waitFor(() =>
expect(screen.getByRole("button", { name: threadCopy.simulate(0) })).toBeDisabled(),
)
@@ -658,10 +645,7 @@ describe("App()", () => {
type: "replica:canvas:resolved",
results: [{ id: 1, x: 80, y: 50 }],
})
- expect(await screen.findByRole("button", { name: "Open improvement 1" })).toHaveStyle({
- left: "80px",
- top: "50px",
- })
+ expect(await screen.findByRole("button", { name: "Open improvement 1" })).toBeVisible()
view.unmount()
})
@@ -688,8 +672,8 @@ describe("App()", () => {
canvas={{
token: "local",
frameRef: { current: null },
+ toolbarTarget: null,
prototypeUrl: origin,
- branch: "prototype/demo",
hubOpen: false,
onOpenNotes: vi.fn(),
onNavigate: vi.fn(),
@@ -770,8 +754,8 @@ describe("App()", () => {
canvas={{
token: "local",
frameRef: { current: null },
+ toolbarTarget: null,
prototypeUrl: origin,
- branch: "prototype/demo",
hubOpen: false,
onOpenNotes: vi.fn(),
onNavigate: vi.fn(),
diff --git a/hub/app/javascript/components/hub-counter/index.test.tsx b/hub/app/javascript/components/hub-counter/index.test.tsx
index d23570bf..4e9849f6 100644
--- a/hub/app/javascript/components/hub-counter/index.test.tsx
+++ b/hub/app/javascript/components/hub-counter/index.test.tsx
@@ -2,7 +2,6 @@ import { render, screen } from "@testing-library/react"
import { describe, expect, it } from "vitest"
import { HubCounter } from "."
-import styles from "./styles.css?inline"
describe("HubCounter()", () => {
it("preserves exact counts and caller accessibility attributes", () => {
@@ -12,13 +11,5 @@ describe("HubCounter()", () => {
,
)
expect(screen.getByLabelText("27 pending requests")).toHaveTextContent("27")
- expect(screen.getByLabelText("27 pending requests")).toHaveClass("hub-counter", "pending")
- })
-
- it("supports a scoped background while retaining its default and inherited foreground", () => {
- expect(styles).toContain(
- "background: var(--hub-counter-background, color-mix(in srgb, currentColor 10%, Canvas))",
- )
- expect(styles).toContain("color: inherit")
})
})
diff --git a/hub/app/javascript/components/prototype-build-details-dialog/index.test.tsx b/hub/app/javascript/components/prototype-build-details-dialog/index.test.tsx
index 52d3d172..b8153898 100644
--- a/hub/app/javascript/components/prototype-build-details-dialog/index.test.tsx
+++ b/hub/app/javascript/components/prototype-build-details-dialog/index.test.tsx
@@ -44,9 +44,6 @@ describe("BuildDetailsDialog()", () => {
expect(screen.getByRole("button", { name: "Close build details" })).toHaveClass(
"hub-icon-button",
)
- expect(screen.getByRole("button", { name: "Close build details" })).not.toHaveClass(
- "hub-icon-button--invisible",
- )
const branch = screen.getByText("prototype/welcome")
expect(branch).toBeInTheDocument()
expect(branch.closest("dd")?.querySelector(".octicon-git-branch")).toBeInTheDocument()
diff --git a/hub/app/javascript/components/prototype-canvas-toolbar/index.test.tsx b/hub/app/javascript/components/prototype-canvas-toolbar/index.test.tsx
index baf6df7b..0aacaa5a 100644
--- a/hub/app/javascript/components/prototype-canvas-toolbar/index.test.tsx
+++ b/hub/app/javascript/components/prototype-canvas-toolbar/index.test.tsx
@@ -4,7 +4,6 @@ import { createRef } from "react"
import { describe, expect, it, vi } from "vitest"
import { Toolbar } from "."
-import styles from "./styles.css?inline"
const config = { name: "Demo", prototypeUrl: "http://localhost:3000", token: "local-token" }
const props = {
@@ -17,27 +16,6 @@ const props = {
}
describe("Toolbar()", () => {
- it("uses existing hover and pressed fills only for enabled selected toolbar toggles", () => {
- expect(styles).not.toContain("--hub-toolbar-button-bg-")
- expect(styles).not.toContain("--brand-button-secondary-bgColor-rest:")
- const rules = styles.match(/\.canvas-toolbar\s+button:is\([^}]+\}/g)
- expect(rules).toHaveLength(2)
- expect(styles).toContain(
- "--hub-toolbar-selected-bg: var(--brand-button-secondary-bgColor-hover)",
- )
- expect(styles).toContain(
- "--hub-toolbar-selected-hover-bg: var(--brand-button-secondary-bgColor-active)",
- )
- expect(rules?.[0]).toContain("background-color: var(--hub-toolbar-selected-bg)")
- expect(rules?.[1]).toContain(":is(:hover, :active)")
- expect(rules?.[1]).toContain("background-color: var(--hub-toolbar-selected-hover-bg)")
- for (const rule of rules ?? []) {
- expect(rule).toContain('[aria-pressed="true"], [aria-expanded="true"]')
- expect(rule).toContain(".canvas-title,\n .canvas-publish-button")
- expect(rule).toContain(':not(:disabled):not([aria-disabled="true"])')
- }
- })
-
it("preserves the full long branch in its accessible name and hover title", () => {
const branch = "prototype/refine-project-navigation-and-review-workflow"
render(
@@ -47,7 +25,6 @@ describe("Toolbar()", () => {
)
const title = screen.getByRole("button", { name: branch })
expect(title).toHaveAttribute("title", expect.stringContaining(branch))
- expect(title).toHaveClass("canvas-title")
expect(title).toHaveTextContent(branch)
})
@@ -89,8 +66,6 @@ describe("Toolbar()", () => {
expect(hubButtonRef.current).toBe(button)
expect(button).toHaveAttribute("aria-expanded", "true")
expect(button).toHaveAttribute("title", "Edit details")
- expect(button).toHaveClass("canvas-toolbar-compact-button")
- expect(button.querySelector(".octicon-pencil")).not.toBeNull()
fireEvent.click(button)
expect(onHub).toHaveBeenCalledOnce()
expect(screen.queryByRole("button", { name: "Hub" })).not.toBeInTheDocument()
diff --git a/hub/app/javascript/components/prototype-canvas-toolbar/index.tsx b/hub/app/javascript/components/prototype-canvas-toolbar/index.tsx
index 0f926c13..8225fb59 100644
--- a/hub/app/javascript/components/prototype-canvas-toolbar/index.tsx
+++ b/hub/app/javascript/components/prototype-canvas-toolbar/index.tsx
@@ -1,6 +1,6 @@
import { CheckCircleIcon, LinkIcon, PencilIcon, SyncIcon, UploadIcon } from "@primer/octicons-react"
import { Button, Tooltip } from "@primer/react-brand"
-import type { RefObject } from "react"
+import type { Ref, RefObject } from "react"
import { ControlsToggle } from "../prototype-controls-toggle"
import { HubIconButton } from "@components/hub-icon-button"
@@ -14,6 +14,7 @@ import "./styles.css"
type Props = {
toolbarRef?: RefObject
+ improvementControlsRef?: Ref
config: CanvasConfig
onPublish: () => void
publishButtonRef: RefObject
@@ -35,6 +36,7 @@ type Props = {
export function Toolbar({
toolbarRef,
+ improvementControlsRef,
config,
onPublish,
publishButtonRef,
@@ -122,7 +124,7 @@ export function Toolbar({
{config.pickAndPolish || config.improvementNotesDemo ? (
-
+
) : null}
{onControls ? (
diff --git a/hub/app/javascript/components/prototype-controls-panel/index.test.tsx b/hub/app/javascript/components/prototype-controls-panel/index.test.tsx
index 6ff52c30..b61be322 100644
--- a/hub/app/javascript/components/prototype-controls-panel/index.test.tsx
+++ b/hub/app/javascript/components/prototype-controls-panel/index.test.tsx
@@ -141,22 +141,16 @@ beforeEach(() => {
})
describe("ControlsPanel()", () => {
- it("links to the Controls README only at the bottom of the genuine empty state", () => {
+ it("links to the Controls README only in the genuine empty state", () => {
const empty: PanelState = { ...ready, scopes: [], status: "no-controls" }
const view = render()
const link = screen.getByRole("link", { name: "Learn more" })
- expect(link.closest("footer")).toHaveClass("canvas-controls-footer")
expect(link).toHaveAttribute(
"href",
"https://github.com/github/replica/blob/main/starter/README.md#prototype-controls",
)
expect(link).toHaveAttribute("target", "_blank")
expect(link).toHaveAttribute("rel", "noopener noreferrer")
- expect(link).toHaveClass("canvas-controls-learn-more")
- const externalIcon = link.querySelector("svg.octicon-link-external")
- expect(externalIcon).toHaveAttribute("aria-hidden", "true")
- expect(externalIcon).not.toHaveAttribute("tabindex")
- expect(link.lastElementChild).toBe(externalIcon)
expect(link).toHaveAccessibleName("Learn more")
expect(screen.getByText(/^No active controls\./)).toBeVisible()
for (const state of [
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/capture/index.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/capture/index.ts
deleted file mode 100644
index e8ffdc4c..00000000
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/capture/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import type { Rect } from "../types"
-
-export function capturePreview(svg: SVGSVGElement, rect: Rect): string {
- const snapshot = svg.cloneNode(true)
- if (!(snapshot instanceof SVGSVGElement))
- throw new Error("The demo preview could not be captured.")
- snapshot.setAttribute("viewBox", `${rect.x} ${rect.y} ${rect.width} ${rect.height}`)
- snapshot.setAttribute("width", String(rect.width))
- snapshot.setAttribute("height", String(rect.height))
- snapshot.removeAttribute("class")
- return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(snapshot))}`
-}
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts
index e2791a45..a2d271fb 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts
@@ -1,115 +1,32 @@
export const copy = {
title: "Pick & polish",
localAuthor: "Local author",
- branch: "prototype/welcome",
- demo: "UI prototype",
- demoNotice: "Sample preview. Notes reset on reload. No Hub API calls or agent work.",
- canvasDemoNotice:
- "UI-only notes over the live preview. Notes reset on canvas reload. Captures, Hub sync and agent results are simulated.",
- canvasBatchSource: "Live preview · UI-only batch",
- sampleBatchSource: "Local, uncommitted sample",
bridgeUnavailable:
"Annotation needs the updated Replica preview bridge. Reconnect or reload the preview after updating the canvas.",
- capturePlaceholder: "UI-only capture placeholder",
sourceUnavailable:
"You can still save this improvement locally, but it cannot sync without a captured source.",
annotate: "Pick & polish",
- fix: "Fix all",
openNotes: (count: number) => `Open improvement notes (${count})`,
- fixAll: (count: number) => `Fix all (${count})`,
notes: "Pick & polish",
- closeNotes: "Close pick & polish",
- owner: "Only your notes appear here. Authorized API callers can request other authors' notes.",
selectHint:
"Click an element or drag a rectangle. For a keyboard region, focus the preview, press Shift+Enter, then use arrows and Enter to choose two corners. Escape exits annotation mode.",
- keyboardHint:
- "Click an element or drag a rectangle. Focus the preview and press Shift+Enter for keyboard region selection; arrows move the corner and Enter selects it.",
- regionHint: "Choose two corners in the preview. Use arrow keys to move the corner, then Enter.",
- firstCorner: "First corner selected. Choose the second corner.",
regionSmall: "Choose a larger region, at least 8 preview pixels wide and high.",
add: "Add improvement note",
- edit: "Edit improvement note",
label: "What should change?",
placeholder: "Describe the improvement you want Copilot to make...",
save: "Save note",
- saveEdit: "Save changes",
cancel: "Cancel",
discard: "Discard draft",
keep: "Keep writing",
discardTitle: "Discard your unsaved note?",
discardBody: "Your saved notes will stay unchanged.",
capture: "Captured target",
- empty: "A little feedback goes a long way",
- emptyBody:
- "Select an element or draw around an area. Collect notes across screens, then fix them together.",
- emptyFilter: "No notes in this view.",
- allActive: "Active notes",
- readyFilter: "Ready to review",
- resolvedFilter: "Resolved",
- filter: "Filter improvement notes",
- viewTarget: "View target",
- noteActions: (target: string) => `Note actions: ${target}`,
editAction: "Edit",
- deleteAction: "Delete",
- deleteTitle: "Delete this improvement note?",
- deleteBody: "This removes the note. It does not change the prototype.",
- resolve: "Confirm resolved",
- solution: "Solution",
- solutionUnavailable: "The solution summary is not available in this canvas.",
- readyReadOnly: "Ready notes are read-only. Add a new note to request further changes.",
- reopen: "Reopen",
- retryFix: "Retry fix",
- noteSent: "Sent in the simulated batch. No real agent has started.",
- noteReady: "Simulated change is ready. Review the target before resolving.",
- noteBlocked: "Simulated agent could not safely identify the change. Edit the note or retry.",
- handoff: "Demo handoff to Copilot",
- handoffNotice:
- "This is the captured batch, not a live agent request. New notes stay out of this batch.",
- complete: "Simulate ready to review",
- block: "Simulate blocked",
- closeHandoff: "Continue annotating",
- sent: "Demo batch captured. No code was changed.",
- finished: "Simulated result received. Review each note before resolving.",
- fixBusy: "Finish or close the current simulated batch before sending another.",
- syncControls: "Demo connection",
- offline: "Offline",
- connected: "Connected",
- syncFailure: "Sync failure",
- syncRetry: "Retry demo sync",
- syncFailed: "Demo sync failed. Your note remains in this demo; retry when connected.",
- syncSuccess: "Demo sync completed.",
- targetMissing: "This sample target is no longer available. The saved capture is still shown.",
- previewUnavailable: "The demo preview is unavailable. Try selecting the target again.",
+ previewUnavailable: "The preview selection is unavailable. Try selecting the target again.",
saved: "Note added.",
- savedLocally: "Notes are saved locally.",
storageLoading: "Loading your notes...",
- productionSent: "Notes sent to Copilot. Review the changes before confirming resolution.",
- productionBusy: "Copilot is working on the captured batch.",
branchChanged: "The prototype branch changed. Close this draft and select the target again.",
workChanged: "The open improvements changed while syncing. Review them and select Fix all again.",
- returnToActive: "Return to active",
- regionTarget: "Selected region",
closeComposer: "Close note composer",
closeDiscard: "Close discard confirmation",
- closeDelete: "Close delete confirmation",
- closeBatch: "Close demo handoff",
- exit: "Exit annotation mode",
- sampleScreens: "Sample prototype screens",
- sampleWorkspace: "Octocat's workspace",
- projects: "Projects",
- settings: "Settings",
- navigationHint: "Navigate between screens. Your notes stay together.",
- authorContext: "Across this prototype · Demo author: octocat",
- batchHint:
- "Fix only this batch. Do not commit, push, or publish. Report per-note results for the author to review.",
- perNoteResult: "Simulate a result for this note",
- batchLabel: (count: number) => `View demo batch (${count})`,
- statuses: {
- open: "Open",
- sent: "Sent to Copilot",
- ready: "Ready to review",
- resolved: "Resolved",
- blocked: "Needs attention",
- },
- sync: { local: "Demo: local only", synced: "Demo: synced", failed: "Demo: sync failed" },
}
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/fixtures.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/fixtures.ts
deleted file mode 100644
index 8c102867..00000000
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/fixtures.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-import type { Note, Target } from "./types"
-
-export const targets: Target[] = [
- {
- id: "projects-heading",
- label: "Projects heading",
- route: "/projects",
- rect: { x: 40, y: 35, width: 640, height: 78 },
- },
- {
- id: "new-project",
- label: "New project button",
- route: "/projects",
- rect: { x: 764, y: 42, width: 156, height: 42 },
- },
- {
- id: "activity",
- label: "Activity summary",
- route: "/projects",
- rect: { x: 40, y: 144, width: 880, height: 100 },
- },
- {
- id: "welcome-card",
- label: "Welcome project card",
- route: "/projects",
- rect: { x: 40, y: 285, width: 420, height: 230 },
- },
- {
- id: "onboarding-card",
- label: "Onboarding project card",
- route: "/projects",
- rect: { x: 500, y: 285, width: 420, height: 230 },
- },
- {
- id: "settings-heading",
- label: "Settings heading",
- route: "/settings",
- rect: { x: 40, y: 35, width: 700, height: 78 },
- },
- {
- id: "workspace-name",
- label: "Workspace name field",
- route: "/settings",
- rect: { x: 40, y: 152, width: 880, height: 138 },
- },
- {
- id: "notifications",
- label: "Notifications settings",
- route: "/settings",
- rect: { x: 40, y: 318, width: 880, height: 130 },
- },
- {
- id: "save-settings",
- label: "Save settings button",
- route: "/settings",
- rect: { x: 40, y: 478, width: 166, height: 42 },
- },
-]
-
-export const sampleNotes: Note[] = [
- {
- id: 1,
- kind: "improvement_note",
- author: "octocat",
- body: "Make the primary action more prominent and shorten the label to 'New project'.",
- route: "/projects",
- target: "New project button",
- selector: '[data-improvement-target="new-project"]',
- rect: { x: 764, y: 42, width: 156, height: 42 },
- capture: "",
- status: "open",
- sync: "local",
- revision: 1,
- },
- {
- id: 2,
- kind: "improvement_note",
- author: "octocat",
- body: "Give the two cards a little more breathing room and align their metadata.",
- route: "/projects",
- target: "Selected region",
- selector: null,
- rect: { x: 28, y: 273, width: 904, height: 250 },
- capture: "",
- status: "open",
- sync: "local",
- revision: 1,
- },
- {
- id: 3,
- kind: "improvement_note",
- author: "octocat",
- body: "Explain what notifications this switch controls before asking me to enable it.",
- route: "/settings",
- target: "Notifications settings",
- selector: '[data-improvement-target="notifications"]',
- rect: { x: 40, y: 318, width: 880, height: 130 },
- capture: "",
- status: "ready",
- sync: "synced",
- revision: 1,
- },
-]
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/index.test.tsx b/hub/app/javascript/features/prototype-canvas-improvement-notes/index.test.tsx
deleted file mode 100644
index feb38246..00000000
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/index.test.tsx
+++ /dev/null
@@ -1,475 +0,0 @@
-import { fireEvent, render, screen, within } from "@testing-library/react"
-
-import { ImprovementNotesPrototype } from "."
-import { copy } from "./en"
-import { sampleNotes, targets } from "./fixtures"
-
-function addNote(body: string, target = "new-project") {
- const annotate = within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- })
- if (annotate.getAttribute("aria-pressed") !== "true") {
- fireEvent.click(
- within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- }),
- )
- }
- const selected = targets.find((item) => item.id === target)
- if (!selected) throw new Error(`Unknown sample target: ${target}`)
- fireEvent.click(screen.getByRole("button", { name: selected.label }))
- fireEvent.change(screen.getByRole("textbox", { name: copy.label }), { target: { value: body } })
- fireEvent.click(screen.getByRole("button", { name: copy.save }))
-}
-
-function pointerStage() {
- class DemoPointerEvent extends MouseEvent {
- pointerId: number
- constructor(type: string, options: PointerEventInit = {}) {
- super(type, options)
- this.pointerId = options.pointerId ?? 1
- }
- }
- vi.stubGlobal("PointerEvent", DemoPointerEvent)
- const stage = screen.getByLabelText("Selectable preview")
- vi.spyOn(stage, "getBoundingClientRect").mockReturnValue(new DOMRect(0, 0, 960, 560))
- stage.setPointerCapture = vi.fn()
- stage.releasePointerCapture = vi.fn()
- return stage
-}
-
-function fixAll(count: number) {
- if (!screen.queryByRole("complementary", { name: copy.notes })) {
- fireEvent.click(screen.getByRole("button", { name: /Open improvement notes/ }))
- }
- selectFilter(copy.allActive)
- return screen.getByRole("button", { name: copy.fixAll(count) })
-}
-
-function selectFilter(label: string) {
- fireEvent.click(screen.getByRole("button", { name: new RegExp(`^${copy.filter}:`) }))
- fireEvent.click(screen.getByRole("menuitemradio", { name: label }))
-}
-
-describe("ImprovementNotesPrototype()", () => {
- it("shows the comment first and target with clickable route at the bottom of the card", () => {
- render()
- const note = sampleNotes[0]!
- const card = screen.getByRole("article", { name: `Improvement note ${note.id}` })
- const target = within(card).getByText(note.target)
- expect(within(card).queryByText(copy.viewTarget)).not.toBeInTheDocument()
- const route = within(card).getByRole("button", {
- name: `${copy.viewTarget}: ${note.target} (${note.route})`,
- })
- const body = within(card).getByText(note.body)
- expect(target.parentElement).toBe(route.parentElement)
- expect(route.parentElement?.previousElementSibling).toHaveClass("improvement-demo__note-header")
- expect(route.parentElement?.querySelector(".improvement-demo__note-separator")).toHaveAttribute(
- "aria-hidden",
- "true",
- )
- expect(within(card).queryByText("Improvement note")).not.toBeInTheDocument()
- expect(body.compareDocumentPosition(target) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy()
- expect(target.compareDocumentPosition(route) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy()
- expect(within(card).queryByText(String(note.id))).not.toBeInTheDocument()
- expect(within(card).queryByText(copy.statuses.open)).not.toBeInTheDocument()
- expect(within(card).queryByRole("button", { name: copy.editAction })).not.toBeInTheDocument()
- const trigger = within(card).getByRole("button", { name: copy.noteActions(note.target) })
- expect(trigger.querySelector("svg")).not.toBeNull()
- fireEvent.click(trigger)
- for (const name of [copy.editAction, copy.deleteAction]) {
- expect(screen.getByRole("menuitem", { name }).querySelector("svg")).not.toBeNull()
- }
- expect(screen.getByRole("menuitem", { name: copy.deleteAction })).toHaveClass(
- "improvement-demo__delete-item",
- )
- fireEvent.keyDown(screen.getByRole("menuitem", { name: copy.editAction }), { key: "Enter" })
- expect(screen.getByRole("textbox", { name: copy.label })).toHaveValue(note.body)
- expect(screen.getByRole("textbox", { name: copy.label })).toHaveFocus()
- })
-
- it("opens notes from the toolbar counter and fixes eligible notes only from the active sidebar", () => {
- render()
- const toolbar = within(screen.getByRole("group", { name: copy.title }))
- expect(toolbar.getByRole("button", { name: copy.annotate })).toBeVisible()
- expect(toolbar.getByRole("button", { name: copy.annotate })).toHaveAttribute(
- "title",
- copy.annotate,
- )
- expect(toolbar.getByRole("button", { name: copy.annotate })).toHaveClass(
- "canvas-toolbar-compact-button",
- )
- const counter = toolbar.getByRole("button", { name: copy.openNotes(3) })
- expect(counter).toHaveTextContent("3")
- expect(counter.querySelector("svg")).toBeNull()
- expect(toolbar.getAllByRole("button")).toHaveLength(2)
- expect(toolbar.queryByRole("button", { name: /Fix/ })).not.toBeInTheDocument()
- expect(screen.queryByRole("button", { name: "Improvement notes (3)" })).not.toBeInTheDocument()
- fireEvent.click(screen.getByRole("button", { name: copy.closeNotes }))
- fireEvent.click(counter)
- expect(counter).toHaveAttribute("aria-expanded", "true")
- const sidebar = within(screen.getByRole("complementary", { name: copy.notes }))
- expect(sidebar.getByRole("button", { name: copy.fixAll(2) })).toBeEnabled()
- for (const label of [copy.readyFilter, copy.resolvedFilter]) {
- selectFilter(label)
- expect(sidebar.queryByRole("button", { name: /Fix all/ })).not.toBeInTheDocument()
- }
- selectFilter(copy.allActive)
- fireEvent.click(sidebar.getByRole("button", { name: copy.fixAll(2) }))
- const handoff = within(screen.getByRole("dialog", { name: copy.handoff }))
- for (const note of sampleNotes) {
- if (note.status === "open") expect(handoff.getByText(note.body)).toBeVisible()
- else expect(handoff.queryByText(note.body)).not.toBeInTheDocument()
- }
- })
-
- it("labels the simulation and disables Fix until a note is saved", () => {
- render()
- expect(screen.getByText(copy.demoNotice)).toBeVisible()
- expect(fixAll(0)).toBeDisabled()
- addNote("Make the action easier to find.")
- expect(fixAll(1)).toBeEnabled()
- expect(screen.getByText("Make the action easier to find.")).toBeVisible()
- expect(
- screen.getByRole("img", { name: "Captured target: New project button" }),
- ).toHaveAttribute("src", expect.stringContaining("data:image/svg+xml"))
- })
-
- it("hides even the disabled Fix all button outside Active notes", () => {
- render()
- expect(screen.getByRole("button", { name: copy.fixAll(0) })).toBeDisabled()
- for (const label of [copy.readyFilter, copy.resolvedFilter]) {
- selectFilter(label)
- expect(screen.queryByRole("button", { name: /Fix all/ })).not.toBeInTheDocument()
- }
- selectFilter(copy.allActive)
- expect(screen.getByRole("button", { name: copy.fixAll(0) })).toBeDisabled()
- })
-
- it("keeps notes across screens and navigates to their targets", () => {
- render()
- addNote("Improve the primary action.")
- fireEvent.click(screen.getByRole("button", { name: "Settings" }))
- addNote("Explain notifications.", "notifications")
- expect(fixAll(2)).toBeEnabled()
- fireEvent.click(
- screen.getByRole("button", { name: "View target: New project button (/projects)" }),
- )
- expect(screen.getByRole("button", { name: "Projects" })).toHaveAttribute("aria-current", "page")
- expect(
- screen.getByRole("button", { name: "Open improvement note 1: New project button" }),
- ).toBeVisible()
- })
-
- it("captures an immutable batch and leaves later notes for the next batch", () => {
- render()
- addNote("First requested improvement.")
- fireEvent.click(fixAll(1))
- const handoff = screen.getByRole("dialog", { name: copy.handoff })
- expect(within(handoff).getByText("First requested improvement.")).toBeVisible()
- fireEvent.click(within(handoff).getByRole("button", { name: copy.closeHandoff }))
- addNote("Second requested improvement.")
- expect(fixAll(1)).toBeDisabled()
- fireEvent.click(screen.getByRole("button", { name: "View demo batch (1)" }))
- expect(
- within(screen.getByRole("dialog", { name: copy.handoff })).queryByText(
- "Second requested improvement.",
- ),
- ).not.toBeInTheDocument()
- fireEvent.click(
- within(screen.getByRole("dialog", { name: copy.handoff })).getByRole("button", {
- name: copy.complete,
- }),
- )
- expect(fixAll(1)).toBeEnabled()
- expect(screen.getByText(copy.statuses.ready, { selector: "span" })).toBeVisible()
- expect(screen.queryByText(copy.statuses.open)).not.toBeInTheDocument()
- })
-
- it("requires author confirmation and supports reopening a resolved note", () => {
- render()
- fireEvent.click(fixAll(1))
- fireEvent.click(
- within(screen.getByRole("dialog", { name: copy.handoff })).getByRole("button", {
- name: copy.complete,
- }),
- )
- expect(screen.getByText(copy.statuses.ready, { selector: "span" })).toBeVisible()
- fireEvent.click(screen.getByRole("button", { name: copy.resolve }))
- expect(fixAll(0)).toBeDisabled()
- selectFilter(copy.resolvedFilter)
- fireEvent.click(screen.getByRole("button", { name: copy.reopen }))
- expect(fixAll(1)).toBeEnabled()
- })
-
- it("puts ready status first, keeps metadata below the note and collapses the solution", () => {
- render()
- const note = sampleNotes[2]!
- const card = screen.getByRole("article", { name: `Improvement note ${note.id}` })
- const body = within(card).getByText(note.body)
- const status = within(card).getByText(copy.statuses.ready, { selector: "span" })
- expect(status.compareDocumentPosition(body) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy()
- expect(status.getBoundingClientRect().bottom).toBeLessThanOrEqual(
- body.getBoundingClientRect().top,
- )
- const metadata = card.querySelector(".improvement-demo__note-meta")
- if (!metadata) throw new Error("Expected the note metadata.")
- expect(metadata.previousElementSibling).toBe(body.parentElement)
- const disclosure = card.querySelector("details")
- if (!disclosure) throw new Error("Expected the solution disclosure.")
- expect(
- metadata.compareDocumentPosition(disclosure) & Node.DOCUMENT_POSITION_FOLLOWING,
- ).toBeTruthy()
- expect(disclosure).not.toHaveAttribute("open")
- expect(within(disclosure).getByText(copy.noteReady)).not.toBeVisible()
- fireEvent.click(within(disclosure).getByText(copy.solution))
- expect(disclosure).toHaveAttribute("open")
- const solution = within(disclosure).getByText(copy.noteReady)
- expect(solution).toBeVisible()
- expect(Number.parseFloat(getComputedStyle(solution).fontSize)).toBeGreaterThan(
- Number.parseFloat(getComputedStyle(within(disclosure).getByText(copy.solution)).fontSize),
- )
- expect(getComputedStyle(solution).whiteSpace).toBe("pre-wrap")
- expect(getComputedStyle(solution).overflowWrap).toBe("anywhere")
- const resolve = within(card).getByRole("button", { name: copy.resolve })
- expect(
- disclosure.compareDocumentPosition(resolve) & Node.DOCUMENT_POSITION_FOLLOWING,
- ).toBeTruthy()
- expect(within(card).getByText(copy.readyReadOnly)).toBeVisible()
- fireEvent.click(within(card).getByRole("button", { name: copy.noteActions(note.target) }))
- expect(screen.getByRole("menuitem", { name: copy.editAction })).toHaveAttribute(
- "aria-disabled",
- "true",
- )
- fireEvent.click(screen.getByRole("menuitem", { name: copy.editAction }))
- expect(screen.queryByRole("textbox", { name: copy.label })).not.toBeInTheDocument()
- })
-
- it("preserves unsaved text until the author explicitly discards it", () => {
- render()
- fireEvent.click(
- within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- }),
- )
- fireEvent.click(screen.getByRole("button", { name: "New project button" }))
- fireEvent.change(screen.getByRole("textbox", { name: copy.label }), {
- target: { value: "Unfinished feedback" },
- })
- fireEvent.click(screen.getByRole("button", { name: copy.closeComposer }))
- fireEvent.click(screen.getByRole("button", { name: copy.keep }))
- expect(screen.getByRole("textbox", { name: copy.label })).toHaveValue("Unfinished feedback")
- fireEvent.click(screen.getByRole("button", { name: copy.closeComposer }))
- fireEvent.click(screen.getByRole("button", { name: copy.discard }))
- expect(screen.queryByRole("textbox", { name: copy.label })).not.toBeInTheDocument()
- expect(fixAll(0)).toBeDisabled()
- })
-
- it("ignores an old batch result after a sent note is edited", () => {
- render()
- fireEvent.click(fixAll(1))
- fireEvent.click(screen.getByRole("button", { name: copy.closeHandoff }))
- fireEvent.click(screen.getByRole("button", { name: copy.noteActions(sampleNotes[0]!.target) }))
- fireEvent.click(screen.getByRole("menuitem", { name: copy.editAction }))
- fireEvent.change(screen.getByRole("textbox", { name: copy.label }), {
- target: { value: "Revised request" },
- })
- fireEvent.click(screen.getByRole("button", { name: copy.saveEdit }))
- expect(screen.queryByText(copy.statuses.open)).not.toBeInTheDocument()
- expect(fixAll(1)).toBeEnabled()
- })
-
- it("retains notes during simulated sync failure and allows retry", () => {
- render()
- fireEvent.change(screen.getByLabelText(copy.syncControls), { target: { value: "failed" } })
- addNote("Keep this note when sync fails.")
- expect(screen.getByText("Keep this note when sync fails.")).toBeVisible()
- expect(screen.getByText(copy.sync.failed)).toBeVisible()
- fireEvent.click(screen.getByRole("button", { name: copy.syncRetry }))
- expect(screen.getByText(copy.sync.synced)).toBeVisible()
- expect(fixAll(1)).toBeEnabled()
- })
-
- it("supports region selection with a keyboard without dragging", () => {
- render()
- fireEvent.click(
- within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- }),
- )
- fireEvent.keyDown(screen.getByLabelText("Selectable preview"), { key: "Enter", shiftKey: true })
- const stage = screen.getByRole("button", { name: "Choose region corners" })
- fireEvent.keyDown(stage, { key: "Enter" })
- fireEvent.keyDown(stage, { key: "ArrowRight" })
- fireEvent.keyDown(stage, { key: "ArrowDown" })
- fireEvent.keyDown(stage, { key: "Enter" })
- expect(screen.getByRole("dialog", { name: copy.add })).toBeVisible()
- expect(screen.queryByText("Selected region")).not.toBeInTheDocument()
- fireEvent.change(screen.getByRole("textbox", { name: copy.label }), {
- target: { value: "Improve the keyboard-selected area." },
- })
- fireEvent.click(screen.getByRole("button", { name: copy.save }))
- expect(screen.getByText("Selected region")).toBeVisible()
- })
-
- it("shows blocked results without claiming the note is fixed", () => {
- render()
- fireEvent.click(fixAll(1))
- fireEvent.click(
- within(screen.getByRole("dialog", { name: copy.handoff })).getByRole("button", {
- name: copy.block,
- }),
- )
- expect(screen.getByText(copy.statuses.blocked)).toBeVisible()
- expect(screen.queryByRole("button", { name: copy.resolve })).not.toBeInTheDocument()
- fireEvent.click(screen.getByRole("button", { name: copy.retryFix }))
- expect(fixAll(1)).toBeEnabled()
- })
-
- it("only deletes a saved note after confirmation", () => {
- render()
- fireEvent.click(screen.getByRole("button", { name: copy.noteActions(sampleNotes[0]!.target) }))
- fireEvent.click(screen.getByRole("menuitem", { name: copy.deleteAction }))
- const dialog = screen.getByRole("dialog", { name: copy.deleteTitle })
- expect(within(dialog).getByText(copy.deleteBody)).toBeVisible()
- expect(dialog.querySelector("blockquote")).toHaveTextContent(sampleNotes[0]!.body)
- expect(within(dialog).getByRole("button", { name: copy.deleteAction })).toHaveClass(
- "improvement-demo__delete-confirm",
- )
- fireEvent.click(screen.getByRole("button", { name: copy.cancel }))
- expect(fixAll(1)).toBeEnabled()
- fireEvent.click(screen.getByRole("button", { name: copy.noteActions(sampleNotes[0]!.target) }))
- fireEvent.keyDown(screen.getByRole("menuitem", { name: copy.deleteAction }), { key: " " })
- fireEvent.click(
- within(screen.getByRole("dialog", { name: copy.deleteTitle })).getByRole("button", {
- name: copy.deleteAction,
- }),
- )
- expect(fixAll(0)).toBeDisabled()
- })
-
- it("quotes the selected note as safe text with its original line breaks", () => {
- render()
- const body = `
\n${"LongUnbrokenNote".repeat(80)}`
- addNote(body)
- fireEvent.click(screen.getByRole("button", { name: copy.noteActions("New project button") }))
- fireEvent.click(screen.getByRole("menuitem", { name: copy.deleteAction }))
- const dialog = screen.getByRole("dialog", { name: copy.deleteTitle })
- const quote = dialog.querySelector("blockquote")
- expect(quote?.textContent).toBe(body)
- expect(quote?.querySelector("img")).toBeNull()
- fireEvent.click(within(dialog).getByRole("button", { name: copy.cancel }))
- expect(fixAll(1)).toBeEnabled()
- })
-
- it("clicks an actual target and crops exactly its element bounds", () => {
- render()
- fireEvent.click(
- within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- }),
- )
- const stage = pointerStage()
- const target = screen.getByRole("button", { name: "New project button" })
- fireEvent.pointerDown(target, { button: 0, clientX: 780, clientY: 60 })
- expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
- fireEvent.pointerUp(stage, { clientX: 780, clientY: 60 })
- expect(within(screen.getByRole("dialog", { name: copy.add })).queryByRole("img")).toBeNull()
- fireEvent.change(screen.getByRole("textbox", { name: copy.label }), {
- target: { value: "Improve the selected action." },
- })
- fireEvent.click(screen.getByRole("button", { name: copy.save }))
- const image = screen.getByRole("img", { name: "Captured target: New project button" })
- expect(decodeURIComponent(image.getAttribute("src") ?? "")).toContain('viewBox="764 42 156 42"')
- })
-
- it("draws a rectangle in reverse and saves the exact normalized region", () => {
- render()
- fireEvent.click(
- within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- }),
- )
- const stage = pointerStage()
- fireEvent.pointerDown(stage, { button: 0, clientX: 400, clientY: 300 })
- fireEvent.pointerMove(stage, { clientX: 100, clientY: 100 })
- fireEvent.pointerUp(stage, { clientX: 100, clientY: 100 })
- expect(within(screen.getByRole("dialog", { name: copy.add })).queryByRole("img")).toBeNull()
- fireEvent.change(screen.getByRole("textbox", { name: copy.label }), {
- target: { value: "Improve this whole area." },
- })
- fireEvent.click(screen.getByRole("button", { name: copy.save }))
- const image = screen.getByRole("img", { name: "Captured target: Selected region" })
- expect(decodeURIComponent(image.getAttribute("src") ?? "")).toContain(
- 'viewBox="100 100 300 200"',
- )
- expect(
- screen.getByRole("button", { name: "Open improvement note 1: Selected region" }),
- ).toBeVisible()
- })
-
- it("rejects a seven-pixel region and aborts a cancelled pointer gesture", () => {
- render()
- fireEvent.click(
- within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- }),
- )
- const stage = pointerStage()
- fireEvent.pointerDown(stage, { button: 0, clientX: 100, clientY: 100 })
- fireEvent.pointerUp(stage, { clientX: 107, clientY: 107 })
- expect(screen.getByRole("status")).toHaveTextContent(copy.regionSmall)
- expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
- fireEvent.pointerDown(stage, { button: 0, clientX: 100, clientY: 100 })
- fireEvent.pointerMove(stage, { clientX: 400, clientY: 300 })
- fireEvent.pointerCancel(stage)
- fireEvent.pointerUp(stage, { clientX: 400, clientY: 300 })
- expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
- fireEvent.pointerDown(stage, { button: 0, clientX: 100, clientY: 100 })
- fireEvent.pointerUp(stage, { clientX: 108, clientY: 108 })
- expect(screen.getByRole("dialog", { name: copy.add })).toBeVisible()
- })
-
- it("completes a two-corner region on pointer release, not pointer down", () => {
- render()
- fireEvent.click(
- within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- }),
- )
- const stage = pointerStage()
- fireEvent.keyDown(stage, { key: "Enter", shiftKey: true })
- fireEvent.pointerDown(stage, { button: 0, clientX: 100, clientY: 100 })
- fireEvent.pointerUp(stage, { clientX: 100, clientY: 100 })
- fireEvent.pointerDown(stage, { button: 0, clientX: 400, clientY: 300 })
- expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
- fireEvent.pointerUp(stage, { clientX: 400, clientY: 300 })
- expect(screen.getByRole("dialog", { name: copy.add })).toBeVisible()
- })
-
- it("supports mixed per-note outcomes without resolving either note", () => {
- render()
- fireEvent.click(fixAll(2))
- fireEvent.click(screen.getByRole("button", { name: copy.closeHandoff }))
- const first = within(screen.getByRole("article", { name: "Improvement note 1" }))
- const second = within(screen.getByRole("article", { name: "Improvement note 2" }))
- fireEvent.click(first.getByText(copy.perNoteResult))
- fireEvent.click(first.getByRole("button", { name: copy.complete }))
- fireEvent.click(second.getByText(copy.perNoteResult))
- fireEvent.click(second.getByRole("button", { name: copy.block }))
- expect(first.getByText(copy.statuses.ready)).toBeVisible()
- expect(second.getByText(copy.statuses.blocked)).toBeVisible()
- expect(screen.queryByText(copy.statuses.resolved, { selector: "span" })).not.toBeInTheDocument()
- })
-
- it("exits annotation mode with Escape from the toolbar", () => {
- render()
- const button = within(screen.getByRole("group", { name: copy.title })).getByRole("button", {
- name: copy.annotate,
- })
- fireEvent.click(button)
- fireEvent.keyDown(button, { key: "Escape" })
- expect(button).toHaveAttribute("aria-pressed", "false")
- expect(screen.queryByRole("button", { name: "New project button" })).not.toBeInTheDocument()
- })
-})
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx b/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx
index a4b44797..0671a104 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/index.tsx
@@ -1,162 +1,65 @@
-import {
- CheckCircleIcon,
- ChevronRightIcon,
- CrosshairsIcon,
- KebabHorizontalIcon,
- PencilIcon,
- SparkleIcon,
- TrashIcon,
-} from "@primer/octicons-react"
-import { ActionMenu, Button, FormControl, Textarea } from "@primer/react-brand"
-import {
- useCallback,
- useLayoutEffect,
- useRef,
- useState,
- type PointerEvent,
- type RefObject,
-} from "react"
+import { CrosshairsIcon } from "@primer/octicons-react"
+import { Button, FormControl, Textarea } from "@primer/react-brand"
+import { useCallback, useLayoutEffect, useRef, useState, type RefObject } from "react"
import { createPortal } from "react-dom"
-import { renderToStaticMarkup } from "react-dom/server"
-import { HubSidebar } from "@components/hub-sidebar"
import { HubCounter } from "@components/hub-counter"
+import { CanvasDialog } from "@components/prototype-canvas-dialog"
import { ImprovementThreads } from "@features/prototype-canvas-improvement-threads"
-import { improvementThreadView } from "./thread-view"
import type { ReviewAnchor } from "@utils/review-anchor/types"
-import { CanvasDialog } from "@components/prototype-canvas-dialog"
-import { capturePreview } from "./capture"
import { copy } from "./en"
-import { sampleNotes, targets } from "./fixtures"
-import { ImprovementPreview } from "./preview"
-import type { Note, Rect, Route, Selection, Target } from "./types"
+import { improvementThreadView } from "./thread-view"
import { usePreviewSelection } from "./use-preview-selection"
import { useSavedNotes } from "./use-saved-notes"
import "./styles.css"
type Props = {
- initial?: "empty" | "single" | "multiple"
- canvas?: {
+ canvas: {
token?: string
frameRef: RefObject
+ toolbarTarget: HTMLDivElement | null
prototypeUrl: string
previewUrl?: string
- branch: string
hubOpen: boolean
onOpenNotes: () => void
onNavigate: (url: string) => void
}
}
-type Point = { x: number; y: number }
+type Source = { identity: string; sourceId: string }
+type Selection = { identity?: string; sourceId?: string; anchor: ReviewAnchor }
-export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props) {
- const [demoNotes, setNotes] = useState(() =>
- sampleNotes.slice(0, initial === "empty" ? 0 : initial === "single" ? 1 : 3).map((note) => {
- const document = new DOMParser().parseFromString(
- renderToStaticMarkup(),
- "image/svg+xml",
- )
- const svg = document.documentElement
- if (!(svg instanceof SVGSVGElement))
- throw new Error("The sample preview could not be captured.")
- return {
- ...note,
- capture: capturePreview(svg, note.rect),
- }
- }),
- )
- const saved = useSavedNotes(canvas?.token)
- const syncError =
- saved.state?.syncError === "Notes are saved locally until Hub discovers this branch."
- ? null
- : saved.state?.syncError
- const notes = canvas?.token ? (saved.state?.notes ?? []) : demoNotes
- const [route, setRoute] = useState("/projects")
+export function ImprovementNotesPrototype({ canvas }: Props) {
+ const saved = useSavedNotes(canvas.token)
+ const notes = saved.state?.notes ?? []
+ const [route, setRoute] = useState("")
const [annotating, setAnnotating] = useState(false)
const [capturingSource, setCapturingSource] = useState(false)
- const [selectedSource, setSelectedSource] = useState<{
- identity: string
- sourceId: string
- } | null>(null)
- const captureGeneration = useRef(0)
- const [panelOpen, setPanelOpen] = useState(true)
+ const [selectedSource, setSelectedSource] = useState(null)
const [selection, setSelection] = useState(null)
- const [editing, setEditing] = useState(null)
const [draft, setDraft] = useState("")
const [discarding, setDiscarding] = useState(false)
- const [deleting, setDeleting] = useState<{
- id: number
- revision: number
- body: string
- identity?: string
- } | null>(null)
- const [filter, setFilter] = useState("active")
- const [connection, setConnection] = useState<"offline" | "connected" | "failed">("offline")
- const [batch, setBatch] = useState([])
- const [handoffOpen, setHandoffOpen] = useState(false)
+ const [panelOpen, setPanelOpen] = useState(true)
const [message, setMessage] = useState("")
- const [focused, setFocused] = useState(null)
- const [regionMode, setRegionMode] = useState(false)
- const [corner, setCorner] = useState({ x: 160, y: 160 })
- const [firstCorner, setFirstCorner] = useState(null)
- const [toolbarTarget, setToolbarTarget] = useState(null)
- const [dragRect, setDragRect] = useState(null)
- const drag = useRef<{ start: Point; target: Target | undefined; pointerId: number } | null>(null)
- const previewRef = useRef(null)
+ const captureGeneration = useRef(0)
const annotateRef = useRef(null)
const draftRef = useRef(null)
const notesToggleRef = useRef(null)
- const nextId = useRef(initial === "empty" ? 1 : initial === "single" ? 2 : 4)
- const eligible = notes.filter((note) => note.status === "open")
- const notesAvailable = !canvas?.token || saved.state !== null
- const composerOpen = selection !== null && !discarding && notesAvailable
- useLayoutEffect(() => {
- if (composerOpen) draftRef.current?.focus()
- }, [composerOpen])
- const selectionChanged =
- Boolean(canvas?.token) && selection !== null && selection.identity !== saved.state?.identity
- const editingReady =
- editing !== null && notes.some((note) => note.id === editing && note.status === "ready")
+ const selectionChanged = selection !== null && selection.identity !== saved.state?.identity
+ const composerOpen = selection !== null && !discarding && saved.state !== null
const notesCount = notes.filter((note) => note.status !== "resolved").length
- const filterLabel =
- filter === "ready"
- ? copy.readyFilter
- : filter === "resolved"
- ? copy.resolvedFilter
- : copy.allActive
- const visible = notes.filter((note) =>
- filter === "resolved"
- ? note.status === "resolved"
- : filter === "ready"
- ? note.status === "ready"
- : note.status !== "resolved",
- )
- const activeBatch =
- Boolean(saved.state?.activeBatch) ||
- batch.some((item) =>
- notes.some(
- (note) => note.id === item.id && note.revision === item.revision && note.status === "sent",
- ),
- )
- const currentNotes = notes.filter((note) => note.route === route && note.status !== "resolved")
- const focusedNote = notes.find((note) => note.id === focused && note.route === route)
+ const syncError =
+ saved.state?.syncError === "Notes are saved locally until Hub discovers this branch."
+ ? null
+ : saved.state?.syncError
+
const receiveSelection = useCallback(
(anchor: ReviewAnchor) => {
- const target =
- anchor.kind === "element" ? anchor.accessibleName || anchor.tagName : copy.regionTarget
setSelection({
identity: selectedSource?.identity ?? saved.state?.identity,
sourceId: selectedSource?.sourceId,
anchor,
- route: anchor.route.pathname + anchor.route.search + anchor.route.hash,
- target,
- selector: anchor.kind === "element" ? anchor.selector : null,
- rect: anchor.rect,
- capture: "",
- capturePlaceholder: true,
})
- setEditing(null)
setDraft("")
},
[saved.state?.identity, selectedSource],
@@ -167,25 +70,10 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
if (annotateRef.current?.getAttribute("aria-pressed") === "true") annotateRef.current.focus()
setAnnotating(false)
}, [])
- async function beginSelection() {
- const generation = ++captureGeneration.current
- setCapturingSource(true)
- const source = canvas?.token ? await saved.capture() : null
- if (generation !== captureGeneration.current) return
- setCapturingSource(false)
- setSelectedSource(source)
- setAnnotating(true)
- setPanelOpen(false)
- setMessage(copy.selectHint)
- setRegionMode(false)
- setFirstCorner(null)
- setDragRect(null)
- }
- const canvasFrameRef = canvas?.frameRef
const preview = usePreviewSelection({
- frameRef: canvasFrameRef,
- prototypeUrl: canvas?.prototypeUrl,
- previewUrl: canvas?.previewUrl,
+ frameRef: canvas.frameRef,
+ prototypeUrl: canvas.prototypeUrl,
+ previewUrl: canvas.previewUrl,
notes,
annotating,
composing: selection !== null,
@@ -194,967 +82,156 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
onCancel: cancelPreviewSelection,
onProblem: setMessage,
})
- const embedded = Boolean(canvas)
+
useLayoutEffect(() => {
- if (!canvasFrameRef) return
- setToolbarTarget(
- canvasFrameRef.current
- ?.closest(".canvas-shell")
- ?.querySelector("#canvas-improvement-controls") ?? null,
- )
- }, [canvasFrameRef])
+ if (composerOpen) draftRef.current?.focus()
+ }, [composerOpen])
function openNotes() {
setPanelOpen(true)
- canvas?.onOpenNotes()
+ canvas.onOpenNotes()
}
- function select(rect: Rect, target?: Target) {
- const svg = previewRef.current?.querySelector("svg")
- if (!svg) {
- setMessage(copy.previewUnavailable)
- return
- }
- setSelection({
- route,
- target: target?.label ?? copy.regionTarget,
- selector: target ? `[data-improvement-target="${target.id}"]` : null,
- rect,
- capture: capturePreview(svg, rect),
- })
- setDraft("")
- setEditing(null)
- setDragRect(null)
- setFirstCorner(null)
- setRegionMode(false)
- }
-
- function rectangle(start: Point, end: Point): Rect {
- return {
- x: Math.min(start.x, end.x),
- y: Math.min(start.y, end.y),
- width: Math.abs(end.x - start.x),
- height: Math.abs(end.y - start.y),
- }
- }
-
- function point(event: PointerEvent): Point | null {
- const bounds = previewRef.current?.getBoundingClientRect()
- if (!bounds?.width || !bounds.height) {
- setMessage(copy.previewUnavailable)
- return null
- }
- return {
- x: Math.max(0, Math.min(960, ((event.clientX - bounds.left) / bounds.width) * 960)),
- y: Math.max(0, Math.min(560, ((event.clientY - bounds.top) / bounds.height) * 560)),
- }
- }
-
- function finishRegion(start: Point, end: Point) {
- const rect = rectangle(start, end)
- setDragRect(null)
- setFirstCorner(null)
- if (rect.width < 8 || rect.height < 8) {
- setMessage(copy.regionSmall)
- return
- }
- select(rect)
+ async function beginSelection() {
+ const generation = ++captureGeneration.current
+ setCapturingSource(true)
+ const source = await saved.capture()
+ if (generation !== captureGeneration.current) return
+ setCapturingSource(false)
+ setSelectedSource(source)
+ setAnnotating(true)
+ setPanelOpen(false)
+ setMessage(copy.selectHint)
}
function closeComposer() {
- const original = selection?.originalBody ?? ""
- if (draft !== original) {
+ if (draft !== "") {
setDiscarding(true)
return
}
setSelection(null)
- setEditing(null)
- if (canvas?.token) cancelPreviewSelection()
+ cancelPreviewSelection()
}
async function save() {
- if (editingReady) {
- setMessage(copy.readyReadOnly)
- return
- }
if (!selection || !draft.trim() || saved.busy || selectionChanged) return
- if (canvas?.token) {
- if (
- !(await saved.change(editing === null ? "create" : "edit", {
- id: editing,
- identity: selection.identity,
- sourceId: selection.sourceId,
- expectedNoteRevision: selection.noteRevision,
- body: draft.trim(),
- anchor: selection.anchor,
- capture: selection.capturePlaceholder ? "" : selection.capture,
- }))
- )
- return
- setFilter("active")
- openNotes()
- cancelPreviewSelection()
- setSelection(null)
- setEditing(null)
- setMessage(copy.saved)
- return
- }
- const sync =
- connection === "connected" ? "synced" : connection === "failed" ? "failed" : "local"
- if (editing !== null) {
- setNotes((items) =>
- items.map((note) =>
- note.id === editing
- ? { ...note, body: draft.trim(), revision: note.revision + 1, status: "open", sync }
- : note,
- ),
- )
- } else {
- const note: Note = {
- ...selection,
- id: nextId.current++,
+ if (
+ !(await saved.change("create", {
+ identity: selection.identity,
+ sourceId: selection.sourceId,
body: draft.trim(),
- kind: "improvement_note",
- author: "octocat",
- status: "open",
- sync,
- revision: 1,
- }
- setNotes((items) => [...items, note])
- setFocused(note.id)
- }
- setFilter("active")
- openNotes()
- setSelection(null)
- setEditing(null)
- setMessage(connection === "failed" ? copy.syncFailed : copy.saved)
- }
-
- async function fix() {
- if (!eligible.length || activeBatch) return
- if (canvas?.token) {
- if (await saved.change("fix")) setMessage(copy.productionSent)
- return
- }
- setBatch(eligible.map((note) => ({ ...note })))
- setNotes((items) =>
- items.map((note) => (note.status === "open" ? { ...note, status: "sent" } : note)),
- )
- setHandoffOpen(true)
- setMessage(copy.sent)
- }
-
- function result(status: "ready" | "blocked") {
- setNotes((items) =>
- items.map((note) =>
- batch.some((item) => item.id === note.id && item.revision === note.revision) &&
- note.status === "sent"
- ? { ...note, status }
- : note,
- ),
+ anchor: selection.anchor,
+ capture: "",
+ }))
)
- setHandoffOpen(false)
- setPanelOpen(true)
- setMessage(copy.finished)
- }
-
- async function changeStatus(selected: Note, status: Note["status"]) {
- if (canvas?.token) {
- if (
- await saved.change("status", {
- id: selected.id,
- status,
- identity: saved.state?.identity,
- expectedNoteRevision: selected.revision,
- })
- )
- notesToggleRef.current?.focus()
return
- }
- setNotes((items) =>
- items.map((note) =>
- note.id === selected.id
- ? {
- ...note,
- status,
- sync:
- connection === "connected"
- ? "synced"
- : connection === "failed"
- ? "failed"
- : "local",
- }
- : note,
- ),
- )
- notesToggleRef.current?.focus()
+ openNotes()
+ cancelPreviewSelection()
+ setSelection(null)
+ setMessage(copy.saved)
}
- const annotationControls = (
-
-
- }
- aria-pressed={annotating}
- disabled={
- capturingSource ||
- (embedded && (!preview.ready || (Boolean(canvas?.token) && !saved.state)))
- }
- onClick={() => {
- if (annotating) cancelPreviewSelection()
- else void beginSelection()
- }}
- >
- {copy.annotate}
-
-
-
-
- )
-
return (
{
- if (
- event.key !== "Escape" ||
- event.defaultPrevented ||
- selection ||
- deleting !== null ||
- handoffOpen
- )
- return
- setAnnotating(false)
- setRegionMode(false)
- setFirstCorner(null)
- setDragRect(null)
- drag.current = null
- if (annotating) annotateRef.current?.focus()
+ if (event.key === "Escape" && !event.defaultPrevented && !selection)
+ cancelPreviewSelection()
}}
>
- {!embedded ? (
-
-
- localhost:5173{route}
- {copy.demo}
-
- ) : null}
- {embedded ? (
- toolbarTarget && createPortal(annotationControls, toolbarTarget)
- ) : (
-
- )}
- {!embedded ? {copy.demoNotice}
: null}
-
- {!embedded ? (
-
-
- {
- if (event.key === "Escape") {
- event.preventDefault()
- setAnnotating(false)
- setRegionMode(false)
- setFirstCorner(null)
- setDragRect(null)
- drag.current = null
- annotateRef.current?.focus()
- } else if (annotating && event.shiftKey && event.key === "Enter") {
- event.preventDefault()
- setRegionMode(!regionMode)
- setFirstCorner(null)
- setDragRect(null)
- setMessage(regionMode ? copy.selectHint : copy.regionHint)
- } else if (
- regionMode &&
- ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Enter", " "].includes(
- event.key,
- )
- ) {
- event.preventDefault()
- if (event.key === "Enter" || event.key === " ") {
- if (firstCorner) finishRegion(firstCorner, corner)
- else {
- setFirstCorner(corner)
- setMessage(copy.firstCorner)
- }
- } else {
- const next = {
- x: Math.max(
- 0,
- Math.min(
- 960,
- corner.x +
- (event.key === "ArrowRight" ? 10 : event.key === "ArrowLeft" ? -10 : 0),
- ),
- ),
- y: Math.max(
- 0,
- Math.min(
- 560,
- corner.y +
- (event.key === "ArrowDown" ? 10 : event.key === "ArrowUp" ? -10 : 0),
- ),
- ),
- }
- setCorner(next)
- if (firstCorner) setDragRect(rectangle(firstCorner, next))
- }
- }
- }}
- onPointerDown={(event) => {
- if (
- !annotating ||
- event.button !== 0 ||
- (event.target instanceof Element && event.target.closest("[data-note-pin]"))
- )
- return
- event.preventDefault()
- const start = point(event)
- if (!start) return
- if (regionMode) {
- setCorner(start)
- drag.current = { start, target: undefined, pointerId: event.pointerId }
- event.currentTarget.setPointerCapture(event.pointerId)
- return
- }
- const element =
- event.target instanceof Element
- ? event.target.closest("[data-improvement-target]")
- : null
- drag.current = {
- start,
- target: targets.find(
- (target) => target.id === element?.getAttribute("data-improvement-target"),
- ),
- pointerId: event.pointerId,
- }
- event.currentTarget.setPointerCapture(event.pointerId)
- }}
- onPointerMove={(event) => {
- if (!drag.current || drag.current.pointerId !== event.pointerId) return
- const end = point(event)
- if (!end) return
- if (regionMode) {
- setCorner(end)
- if (firstCorner) setDragRect(rectangle(firstCorner, end))
- return
- }
- const rect = rectangle(drag.current.start, end)
- if (Math.hypot(rect.width, rect.height) >= 8) setDragRect(rect)
- }}
- onPointerUp={(event) => {
- const active = drag.current
- if (!active || active.pointerId !== event.pointerId) return
- drag.current = null
- event.currentTarget.releasePointerCapture(event.pointerId)
- const end = point(event)
- if (!end) return
- if (regionMode) {
- setCorner(end)
- if (firstCorner) finishRegion(firstCorner, end)
- else {
- setFirstCorner(end)
- setMessage(copy.firstCorner)
- }
- return
- }
- const rect = rectangle(active.start, end)
- if (Math.hypot(rect.width, rect.height) >= 8) finishRegion(active.start, end)
- else if (active.target) select(active.target.rect, active.target)
- setDragRect(null)
- }}
- onPointerCancel={() => {
- drag.current = null
- setDragRect(null)
- }}
- onLostPointerCapture={() => {
- drag.current = null
- setDragRect(null)
+ {canvas.toolbarTarget &&
+ createPortal(
+
+
}
+ aria-pressed={annotating}
+ disabled={capturingSource || !preview.ready || !saved.state}
+ onClick={() => {
+ if (annotating) cancelPreviewSelection()
+ else void beginSelection()
}}
>
-
- {annotating && !regionMode
- ? targets
- .filter((target) => target.route === route)
- .map((target) => (
-
-
-
- ) : null}
- {embedded && !canvas?.token ? (
-
- {currentNotes.map((note) => {
- const resolution = preview.resolutions.get(note.id)
- if (
- !resolution ||
- (resolution.status !== "resolved" && resolution.status !== "moved")
- )
- return null
- return (
- {
- setFocused(note.id)
- setFilter(note.status === "ready" ? "ready" : "active")
- openNotes()
- }}
- >
- {note.id}
-
- )
- })}
-
- ) : null}
- {canvas?.token ? (
-
{
- setPanelOpen(false)
- notesToggleRef.current?.focus()
- }}
- threads={notes.map((note) =>
- improvementThreadView(note, preview.resolutions.get(note.id)),
- )}
- busy={saved.busy || !saved.state}
- activeBatch={Boolean(saved.state?.activeBatch)}
- error={
- saved.error ||
- syncError ||
- saved.state?.profileError ||
- (!saved.state ? copy.storageLoading : !preview.ready ? copy.bridgeUnavailable : "")
- }
- onSelect={(id) => {
- const note = notes.find((item) => item.id === id)
- if (note && note.route !== route)
- canvas.onNavigate(new URL(note.route, canvas.prototypeUrl).href)
- }}
- onFollowUp={(thread, body) =>
- saved.change("follow-up", {
- id: thread.id,
- expectedNoteRevision: thread.revision,
- body,
- })
- }
- onResolve={(thread) =>
- saved.change("status", {
- id: thread.id,
- expectedNoteRevision: thread.revision,
- status: "resolved",
- })
- }
- onDelete={(thread) =>
- saved.change("delete", {
- id: thread.id,
- expectedNoteRevision: thread.revision,
- })
- }
- onFix={() => saved.change("fix")}
- onRetry={(thread) =>
- saved.change("status", {
- id: thread.id,
- expectedNoteRevision: thread.revision,
- status: "open",
- })
- }
- />
- ) : (
- {
- setPanelOpen(false)
- notesToggleRef.current?.focus()
- }}
- >
- {saved.error && (!selection || !notesAvailable) ? (
-
- {saved.error}
-
- ) : null}
- {syncError ? (
-
- {syncError}
-
- ) : null}
- {canvas?.token && !saved.state ? (
-
- {copy.storageLoading}
-
- ) : null}
- {embedded && !preview.ready ? (
-
- {copy.bridgeUnavailable}
-
- ) : null}
-
-
-
- {filterLabel}
-
-
- {[
- { value: "active", label: copy.allActive },
- { value: "ready", label: copy.readyFilter },
- { value: "resolved", label: copy.resolvedFilter },
- ].map((item) => (
- {
- if (event.key !== " " && event.key !== "Enter") return
- event.preventDefault()
- event.stopPropagation()
- event.currentTarget.click()
- }}
- >
- {item.label}
-
- ))}
-
-
- {filter === "active" ? (
-
}
- aria-label={copy.fixAll(eligible.length)}
- disabled={!eligible.length || activeBatch || saved.busy}
- title={activeBatch ? (embedded ? copy.productionBusy : copy.fixBusy) : undefined}
- onClick={() => void fix()}
- >
-
- {copy.fix}
- {eligible.length}
-
-
- ) : null}
-
-
- {!visible.length ? (
-
-
-
{notes.length ? copy.emptyFilter : copy.empty}
- {!notes.length ? (
- <>
-
{copy.emptyBody}
-
}
- disabled={
- capturingSource || (embedded && (!preview.ready || !notesAvailable))
- }
- onClick={() => {
- void beginSelection()
- annotateRef.current?.focus()
- }}
- >
- {copy.annotate}
-
- >
- ) : null}
-
- ) : null}
- {visible.map((note) => (
-
-
- {note.status === "ready" ? (
-
- {copy.statuses.ready}
-
- ) : null}
-
{note.body}
-
-
- }
- >
- {""}
-
-
- }
- disabled={note.status === "ready"}
- title={note.status === "ready" ? copy.readyReadOnly : undefined}
- onClick={() => {
- if (note.status === "ready") {
- setMessage(copy.readyReadOnly)
- return
- }
- setSelection({
- ...note,
- identity: saved.state?.identity,
- noteRevision: note.revision,
- originalBody: note.body,
- })
- setEditing(note.id)
- setDraft(note.body)
- }}
- onKeyDownCapture={(event) => {
- if (event.key !== " " && event.key !== "Enter") return
- event.preventDefault()
- event.stopPropagation()
- event.currentTarget.click()
- }}
- >
- {copy.editAction}
-
- }
- onClick={() =>
- setDeleting({
- id: note.id,
- revision: note.revision,
- body: note.body,
- identity: saved.state?.identity,
- })
- }
- onKeyDownCapture={(event) => {
- if (event.key !== " " && event.key !== "Enter") return
- event.preventDefault()
- event.stopPropagation()
- event.currentTarget.click()
- }}
- >
- {copy.deleteAction}
-
-
-
-
-
-
- {note.target}
-
- {
- if (canvas && note.anchor) {
- const destination = new URL(canvas.prototypeUrl)
- destination.pathname = note.anchor.route.pathname
- destination.search = note.anchor.route.search
- destination.hash = note.anchor.route.hash
- canvas.onNavigate(destination.href)
- } else setRoute(note.route)
- setFocused(note.id)
- }}
- >
- {note.route}
-
-
- {note.status !== "open" && note.status !== "ready" ? (
-
- {copy.statuses[note.status]}
-
- ) : null}
- {note.status === "ready" ? (
- <>
-
-
-
- {copy.solution}
-
-
- {note.result || (embedded ? copy.solutionUnavailable : copy.noteReady)}
-
-
- {copy.readyReadOnly}
- >
- ) : note.result ? (
- {note.result}
- ) : null}
- {note.capture && !note.capturePlaceholder ? (
-
- ) : null}
- {!embedded && (note.status === "sent" || note.status === "blocked") ? (
-
- {note.status === "sent" ? copy.noteSent : copy.noteBlocked}
-
- ) : null}
-
- {embedded && note.status === "sent" ? (
- void changeStatus(note, "open")}
- >
- {copy.returnToActive}
-
- ) : null}
- {note.status === "ready" ? (
- }
- onClick={() => changeStatus(note, "resolved")}
- >
- {copy.resolve}
-
- ) : null}
- {note.status === "resolved" ? (
- changeStatus(note, "open")}
- >
- {copy.reopen}
-
- ) : null}
- {note.status === "blocked" ? (
- changeStatus(note, "open")}
- >
- {copy.retryFix}
-
- ) : null}
-
- {!embedded && note.status === "sent" ? (
-
- {copy.perNoteResult}
- changeStatus(note, "ready")}
- >
- {copy.complete}
-
- changeStatus(note, "blocked")}
- >
- {copy.block}
-
-
- ) : null}
- {!embedded ? (
-
- {copy.sync[note.sync]}
-
- ) : null}
-
- ))}
-
- {!embedded && activeBatch ? (
- setHandoffOpen(true)}>
- {copy.batchLabel(batch.length)}
-
- ) : null}
- {!embedded ? (
-
- ) : null}
-
+ {copy.annotate}
+
+
+ {notesCount}
+
+ ,
+ canvas.toolbarTarget,
)}
-
-
+ {
+ setPanelOpen(false)
+ notesToggleRef.current?.focus()
+ }}
+ threads={notes.map((note) => improvementThreadView(note, preview.resolutions.get(note.id)))}
+ busy={saved.busy || !saved.state}
+ activeBatch={Boolean(saved.state?.activeBatch)}
+ error={
+ saved.error ||
+ syncError ||
+ saved.state?.profileError ||
+ (!saved.state ? copy.storageLoading : !preview.ready ? copy.bridgeUnavailable : "")
+ }
+ onSelect={(id) => {
+ const note = notes.find((item) => item.id === id)
+ if (note && note.route !== route)
+ canvas.onNavigate(new URL(note.route, canvas.prototypeUrl).href)
+ }}
+ onFollowUp={(thread, body) =>
+ saved.change("follow-up", {
+ id: thread.id,
+ expectedNoteRevision: thread.revision,
+ body,
+ })
+ }
+ onResolve={(thread) =>
+ saved.change("status", {
+ id: thread.id,
+ expectedNoteRevision: thread.revision,
+ status: "resolved",
+ })
+ }
+ onDelete={(thread) =>
+ saved.change("delete", {
+ id: thread.id,
+ expectedNoteRevision: thread.revision,
+ })
+ }
+ onFix={() => saved.change("fix")}
+ onRetry={(thread) =>
+ saved.change("status", {
+ id: thread.id,
+ expectedNoteRevision: thread.revision,
+ status: "open",
+ })
+ }
+ />
+
{message}
{composerOpen ? (
) : null}
- {editingReady ? (
-
- {copy.readyReadOnly}
-
- ) : null}
) : null}
- {discarding && notesAvailable ? (
+ {discarding && saved.state ? (
{
setDiscarding(false)
setSelection(null)
- setEditing(null)
setDraft("")
- if (canvas?.token) cancelPreviewSelection()
+ cancelPreviewSelection()
}}
>
{copy.discard}
@@ -1235,94 +305,6 @@ export function ImprovementNotesPrototype({ initial = "empty", canvas }: Props)
) : null}
- {deleting !== null && notesAvailable ? (
- setDeleting(null)}
- >
- {copy.deleteBody}
- {deleting.body}
-
- setDeleting(null)}>
- {copy.cancel}
-
- {
- if (
- canvas?.token &&
- !(await saved.change("delete", {
- id: deleting.id,
- identity: deleting.identity,
- expectedNoteRevision: deleting.revision,
- }))
- )
- return
- setNotes((items) => items.filter((note) => note.id !== deleting.id))
- setDeleting(null)
- setFocused(null)
- }}
- >
- {copy.deleteAction}
-
-
-
- ) : null}
- {handoffOpen ? (
- setHandoffOpen(false)}
- className="improvement-demo__handoff"
- >
- {copy.handoffNotice}
-
- {canvas?.branch ?? copy.branch}
-
- {embedded ? copy.canvasBatchSource : copy.sampleBatchSource} · {batch.length} notes
-
-
-
- {batch.map((note) => (
- -
-
- #{note.id} · {note.target}
-
-
- {note.route} · revision {note.revision}
-
- {note.body}
-
-
- {note.selector ??
- `Region: ${note.rect.x}, ${note.rect.y}, ${note.rect.width} × ${note.rect.height}`}
-
-
- ))}
-
- {copy.batchHint}
-
- setHandoffOpen(false)}>
- {copy.closeHandoff}
-
- result("blocked")}>
- {copy.block}
-
- result("ready")}>
- {copy.complete}
-
-
-
- ) : null}
)
}
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/preview/index.tsx b/hub/app/javascript/features/prototype-canvas-improvement-notes/preview/index.tsx
deleted file mode 100644
index 12616862..00000000
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/preview/index.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import { targets } from "../fixtures"
-import type { Route } from "../types"
-
-type Props = {
- route: Route
-}
-
-export function ImprovementPreview({ route }: Props) {
- return (
-
- )
-}
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/stories.tsx b/hub/app/javascript/features/prototype-canvas-improvement-notes/stories.tsx
deleted file mode 100644
index 4edd093c..00000000
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/stories.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import type { Meta, StoryObj } from "@storybook/react-vite"
-
-import { ImprovementNotesPrototype } from "."
-
-const meta = {
- title: "Components/Prototype canvas/Improvement notes prototype",
- component: ImprovementNotesPrototype,
- parameters: {
- layout: "fullscreen",
- docs: {
- description: {
- component:
- "Interactive UI-only Pick & polish prototype. Raised, theme-aware note cards show compact target and clickable route metadata directly below the comment, with Edit and Delete in each card's actions menu. Ready notes show their status above the comment, a collapsed Solution disclosure and Confirm resolved below it; they cannot be edited. Delete confirmation quotes the selected note and uses a danger-colored confirmation button. Selection and cropped SVG captures work on the authored two-screen preview. Notes and batches are in-memory; Hub synchronization and agent outcomes are explicitly simulated. No real API requests, source edits, or publication.",
- },
- },
- },
- args: { initial: "empty" },
-} satisfies Meta
-
-export default meta
-type Story = StoryObj
-
-export const Empty: Story = {}
-export const Single: Story = { args: { initial: "single" } }
-export const Multiple: Story = { args: { initial: "multiple" } }
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/styles.css b/hub/app/javascript/features/prototype-canvas-improvement-notes/styles.css
index d787c727..3567f0f5 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/styles.css
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/styles.css
@@ -1,92 +1,7 @@
.improvement-demo {
- position: relative;
- height: 100vh;
- min-height: 100vh;
- overflow: hidden;
- background: var(--hub-canvas-muted);
- color: var(--hub-fg-default);
- font-size: 0.875rem;
-}
-
-.improvement-demo--embedded,
-.improvement-demo--embedded > .improvement-demo__workspace {
display: contents;
}
-.improvement-notes-sidebar {
- --hub-sidebar-top: var(--canvas-preview-top, 8.5rem);
-}
-
-.canvas-improvement-markers {
- position: absolute;
- z-index: 10;
- inset: var(--canvas-preview-top) 0 0;
- overflow: hidden;
- pointer-events: none;
-}
-
-.canvas-improvement-markers button {
- pointer-events: auto;
-}
-
-.improvement-demo__browser,
-.improvement-demo__toolbar,
-.improvement-demo__actions,
-.improvement-demo__pages,
-.improvement-demo__note-header,
-.improvement-demo__dialog-actions {
- display: flex;
- align-items: center;
- gap: 0.75rem;
-}
-
-.improvement-demo__browser {
- padding: 0.625rem 1rem;
- border-bottom: 1px solid var(--hub-border-muted);
- background: var(--hub-canvas-default);
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
-}
-
-.improvement-demo__browser code {
- flex: 1;
-}
-
-.improvement-demo__browser-dot {
- width: 0.5rem;
- height: 0.5rem;
- border-radius: 50%;
- background: var(--hub-fg-success);
-}
-
-.improvement-demo__badge {
- padding: 0.125rem 0.5rem;
- border: 1px solid var(--hub-border-default);
- border-radius: 1rem;
-}
-
-.improvement-demo__toolbar {
- justify-content: space-between;
- flex-wrap: wrap;
- padding: 0.875rem 1rem;
- background: var(--hub-canvas-default);
- border-bottom: 1px solid var(--hub-border-default);
-}
-
-.improvement-demo__identity {
- display: grid;
- gap: 0.25rem;
-}
-
-.improvement-demo__identity span {
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
-}
-
-.improvement-demo__actions {
- flex-wrap: wrap;
-}
-
.improvement-demo__split {
display: flex;
}
@@ -111,163 +26,6 @@
z-index: 1;
}
-.improvement-demo__disclaimer {
- padding: 0.5rem 1rem;
- border-bottom: 1px solid var(--hub-border-muted);
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
-}
-
-.improvement-demo__workspace {
- display: grid;
- gap: 1rem;
- padding: 1rem;
- align-items: start;
-}
-
-.improvement-demo__preview {
- min-width: 0;
- border: 1px solid var(--hub-border-default);
- border-radius: 0.75rem;
- overflow: hidden;
- background: var(--hub-canvas-default);
-}
-
-.improvement-demo__pages {
- flex-wrap: wrap;
- padding: 1rem;
- border-bottom: 1px solid var(--hub-border-default);
-}
-
-.improvement-demo__app-name {
- flex: 1;
- min-width: 10rem;
- font-weight: 600;
-}
-
-.improvement-demo__pages button {
- padding: 0.375rem 0.75rem;
- border: 0;
- border-radius: 0.375rem;
- background: transparent;
- color: var(--hub-fg-muted);
- cursor: pointer;
-}
-
-.improvement-demo__pages button[aria-current="page"] {
- background: var(--hub-accent-subtle);
- color: var(--hub-fg-default);
-}
-
-.improvement-demo select {
- max-width: 100%;
- padding: 0.375rem 0.5rem;
- border: 1px solid var(--hub-border-default);
- border-radius: 0.375rem;
- background: var(--hub-canvas-default);
- color: var(--hub-fg-default);
-}
-
-.improvement-demo__stage {
- position: relative;
- aspect-ratio: 960 / 560;
-}
-
-.improvement-demo__stage--selecting {
- cursor: crosshair;
- touch-action: none;
- user-select: none;
-}
-
-.improvement-demo__scene {
- display: block;
- width: 100%;
- height: 100%;
-}
-
-.improvement-demo__element-target {
- position: absolute;
- padding: 0;
- border: 2px solid transparent;
- border-radius: 0.375rem;
- background: transparent;
- cursor: crosshair;
-}
-
-.improvement-demo__element-target:hover {
- border-color: #155d3d;
- background: rgb(21 93 61 / 5%);
-}
-
-.improvement-demo__outline {
- position: absolute;
- pointer-events: none;
- border: 2px solid var(--hub-fg-success);
- background: color-mix(in srgb, var(--hub-fg-success) 8%, transparent);
- border-radius: 0.25rem;
-}
-
-.improvement-demo__outline--saved {
- border-style: dashed;
- background: transparent;
-}
-
-.improvement-demo__corner {
- position: absolute;
- width: 0.75rem;
- height: 0.75rem;
- border: 2px solid var(--hub-fg-on-emphasis);
- background: var(--hub-primary-bg);
- transform: translate(-50%, -50%);
- pointer-events: none;
-}
-
-.improvement-demo__pin {
- position: absolute;
- z-index: 1;
- min-width: 1.75rem;
- height: 1.75rem;
- padding: 0 0.25rem;
- border: 2px solid var(--hub-canvas-default);
- border-radius: 50% 50% 50% 0;
- background: var(--hub-primary-bg);
- color: var(--hub-primary-fg);
- box-shadow: var(--hub-shadow-selection);
- cursor: pointer;
- transform: translate(-30%, -40%);
- font-size: 0.75rem;
- font-weight: 600;
-}
-
-.improvement-demo__pin--selected {
- outline: 2px solid var(--hub-focus);
- outline-offset: 2px;
-}
-
-.improvement-demo__preview-footer {
- display: flex;
- justify-content: space-between;
- gap: 1rem;
- padding: 0.75rem 1rem;
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
-}
-
-.improvement-demo__panel {
- display: flex;
- flex-direction: column;
- gap: 0.875rem;
- min-width: 0;
- padding: 1rem;
-}
-
-.improvement-demo__owner {
- margin: 0.375rem 0 0;
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
- line-height: 1.5;
-}
-
.improvement-demo__notice {
flex: none;
margin: 0;
@@ -275,369 +33,20 @@
overflow-wrap: anywhere;
}
-.improvement-demo__filters {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 0.5rem;
-}
-
-.improvement-demo__fix-label {
- display: inline-flex;
- align-items: center;
- gap: 0.5rem;
-}
-
-.improvement-demo__note-list {
- display: grid;
- gap: 0.75rem;
-}
-
-.improvement-demo__empty {
- padding: 2.5rem 0.5rem;
- text-align: center;
- color: var(--hub-fg-muted);
-}
-
-.improvement-demo__empty h2 {
- color: var(--hub-fg-default);
- font-size: 0.875rem;
-}
-
-.improvement-demo__empty p {
- margin-bottom: 0.5rem;
- font-size: 0.8125rem;
- line-height: 1.6;
-}
-
-.improvement-demo__note {
- min-width: 0;
- padding: 0.875rem;
- border: 1px solid var(--hub-border-default);
- border-radius: 0.5rem;
- background: var(--hub-canvas-default);
- box-shadow: var(--hub-shadow-selection);
-}
-
-.improvement-demo__note--focused {
- border-color: var(--hub-focus);
- box-shadow: 0 0 0 1px var(--hub-focus);
-}
-
-.improvement-demo__note-header {
- display: block;
- position: relative;
- padding-right: calc(var(--brand-control-small-size, 1.5rem) + 0.5rem);
-}
-
-.improvement-demo__note-menu {
- position: absolute;
- top: 0;
- right: 0;
-}
-
-.improvement-demo__note-meta {
- display: flex;
- align-items: baseline;
- flex-wrap: wrap;
- gap: 0.375rem;
- margin-top: 0.5rem;
- color: var(--hub-fg-muted);
- font-size: 0.6875rem;
- line-height: 1.5;
- overflow-wrap: anywhere;
-}
-
-.improvement-demo__note-meta > span:first-child {
- min-width: 0;
- max-width: 100%;
-}
-
-.improvement-demo__note-separator {
- width: 0.1875rem;
- height: 0.1875rem;
- flex-shrink: 0;
- align-self: center;
- border-radius: 50%;
- background: currentColor;
-}
-
-.improvement-demo__menu-item {
- column-gap: var(--brand-control-medium-gap, 0.5rem);
-}
-
-.improvement-demo__menu-trigger {
- width: var(--brand-control-small-size);
- min-width: var(--brand-control-small-size);
- height: var(--brand-control-small-size);
- min-height: var(--brand-control-small-size);
- padding: 0;
- gap: 0;
- border-color: transparent;
- background: transparent;
- flex-shrink: 0;
-}
-
-.improvement-demo__menu-trigger > [data-testid="Button-trailing-visual"],
-.improvement-demo__menu-trigger > span:nth-child(2) {
- display: none;
-}
-
-.improvement-demo__delete-item,
-.improvement-demo__delete-item span {
- color: var(--hub-fg-danger);
-}
-
-.improvement-demo__note-route {
- display: block;
- min-width: 0;
- max-width: 100%;
- margin: 0;
- padding: 0;
- border: 0;
- background: transparent;
- color: var(--hub-fg-muted);
- font: inherit;
- text-align: left;
- cursor: pointer;
- overflow-wrap: anywhere;
-}
-
-.improvement-demo__note-route:focus-visible {
- outline: 2px solid var(--hub-focus);
- outline-offset: 2px;
- border-radius: 0.125rem;
-}
-
-.improvement-demo__status {
- display: inline-block;
- padding: 0.125rem 0.375rem;
- border: 1px solid var(--hub-border-default);
- border-radius: 1rem;
- font-size: 0.6875rem;
-}
-
-.improvement-demo__status--ready,
-.improvement-demo__status--resolved {
- color: var(--hub-fg-success);
- background: var(--hub-success-subtle);
-}
-
-.improvement-demo__status--blocked {
- color: var(--hub-fg-danger);
- background: var(--hub-danger-subtle);
-}
-
-.improvement-demo__body {
- min-width: 0;
- flex: 1;
- margin: 0;
- line-height: 1.55;
- overflow-wrap: anywhere;
- white-space: pre-wrap;
-}
-
-.improvement-demo__note-header + :not(.improvement-demo__note-actions) {
- margin-top: 0.75rem;
-}
-
-.improvement-demo__note-header > .improvement-demo__status {
- margin-bottom: 0.5rem;
-}
-
-.improvement-demo__note > .improvement-demo__note-meta {
- margin-top: 0.5rem;
-}
-
-.improvement-demo__solution {
- margin-top: 0.75rem;
-}
-
-.improvement-demo__solution summary {
- display: flex;
- align-items: center;
- gap: 0.25rem;
- list-style: none;
- cursor: pointer;
- font-size: 0.75rem;
- font-weight: 600;
-}
-
-.improvement-demo__solution summary::-webkit-details-marker {
- display: none;
-}
-
-.improvement-demo__solution summary svg {
- flex-shrink: 0;
-}
-
-.improvement-demo__solution[open] summary svg {
- transform: rotate(90deg);
-}
-
-.improvement-demo__solution summary:focus-visible {
- outline: 2px solid var(--hub-focus);
- outline-offset: 2px;
-}
-
-.improvement-demo__solution p {
- margin: 0.5rem 0 0;
- font-size: 0.875rem;
- line-height: 1.55;
- white-space: pre-wrap;
- overflow-wrap: anywhere;
-}
-
-.improvement-demo__read-only {
- margin: 0.75rem 0 0;
- font-size: 0.75rem;
- line-height: 1.5;
- color: var(--hub-fg-muted);
-}
-
-.improvement-demo__note > :last-child {
- margin-bottom: 0;
-}
-
-.improvement-demo__thumbnail {
- display: block;
- max-width: 100%;
- max-height: 6rem;
- border: 1px solid var(--hub-border-muted);
- border-radius: 0.25rem;
-}
-
-.improvement-demo__result,
-.improvement-demo__form-hint {
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
- line-height: 1.5;
-}
-
-.improvement-demo__note-actions {
- display: flex;
- flex-wrap: wrap;
- gap: 0.25rem;
- margin: 0.75rem 0;
-}
-
-.improvement-demo__note-actions:empty {
- display: none;
-}
-
-.improvement-demo__note small {
- color: var(--hub-fg-muted);
- font-size: 0.6875rem;
-}
-
-.improvement-demo__simulation {
- margin-bottom: 0.75rem;
- font-size: 0.75rem;
-}
-
-.improvement-demo__simulation summary {
- margin-bottom: 0.5rem;
- cursor: pointer;
-}
-
-.improvement-demo__simulation button {
- margin: 0.25rem 0.25rem 0 0;
-}
-
-.improvement-demo__note .improvement-demo__sync-error {
- color: var(--hub-fg-danger);
-}
-
-.improvement-demo__connection {
- padding-top: 0.875rem;
- border-top: 1px solid var(--hub-border-muted);
- font-size: 0.75rem;
-}
-
-.improvement-demo__connection label {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- align-items: center;
- gap: 0.5rem;
-}
-
-.improvement-demo__connection p {
- color: var(--hub-fg-danger);
- line-height: 1.5;
-}
-
-.improvement-demo__announcement {
- margin: 0;
- padding: 0 1rem 1rem;
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
-}
-
-.improvement-demo__composer,
-.improvement-demo__handoff {
+.improvement-demo__composer {
width: min(34rem, calc(100vw - 2rem));
}
-.improvement-demo__batch-context {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- gap: 0.5rem;
- margin: 1rem 0;
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
-}
-
.improvement-demo__dialog-actions {
+ display: flex;
+ align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
+ gap: 0.75rem;
margin-top: 1rem;
}
-.improvement-demo__delete-preview {
- margin: 1rem 0;
- padding-inline-start: 1rem;
- border-inline-start: 3px solid var(--hub-border-default);
- color: var(--hub-fg-muted);
- line-height: 1.5;
- white-space: pre-wrap;
- overflow-wrap: anywhere;
-}
-
-.improvement-demo__delete-confirm {
- --brand-button-primary-bgColor-rest: var(--hub-danger-emphasis);
- --brand-button-primary-bgColor-hover: color-mix(
- in srgb,
- var(--hub-danger-emphasis) 85%,
- var(--hub-fg-default)
- );
- --brand-button-primary-bgColor-active: var(--brand-button-primary-bgColor-hover);
- --brand-button-primary-borderColor-active: var(--brand-button-primary-bgColor-active);
- --brand-button-primary-fgColor-rest: var(--hub-fg-on-danger);
-
- border-color: var(--hub-danger-emphasis);
-}
-
-.improvement-demo__handoff li {
- padding: 0.75rem 0;
- border-bottom: 1px solid var(--hub-border-muted);
-}
-
-.improvement-demo__handoff li code {
- display: block;
- margin-top: 0.375rem;
- color: var(--hub-fg-muted);
- font-size: 0.75rem;
-}
-
-.improvement-demo__handoff li p {
- margin-bottom: 0;
- overflow-wrap: anywhere;
-}
-
.improvement-demo button:focus-visible,
-.improvement-demo select:focus-visible,
.improvement-demo [tabindex]:focus-visible {
outline: 2px solid var(--hub-focus);
outline-offset: 3px;
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/thread-view/index.test.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/thread-view/index.test.ts
index 429b98e9..ac8b90cd 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/thread-view/index.test.ts
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/thread-view/index.test.ts
@@ -1,10 +1,27 @@
import { describe, expect, it } from "vitest"
import { improvementThreadView } from "."
-import { sampleNotes } from "../fixtures"
+import type { Note } from "../types"
+
+function createNote(): Note {
+ return {
+ id: 1,
+ kind: "improvement_note",
+ author: "octocat",
+ body: "Clarify the save action.",
+ route: "/projects",
+ target: "Save",
+ selector: "#save",
+ rect: { x: 0, y: 0, width: 120, height: 40 },
+ capture: "",
+ status: "open",
+ sync: "local",
+ revision: 1,
+ }
+}
describe("improvementThreadView()", () => {
it("preserves original and follow-up author snapshots instead of replacing them with a current profile", () => {
- const note = structuredClone(sampleNotes[0]!)
+ const note = createNote()
note.authorProfile = {
id: 1,
login: "renamed-owner",
@@ -42,7 +59,7 @@ describe("improvementThreadView()", () => {
})
it("keeps an unowned legacy author unattributed and uses only server-projected matching profiles for known authors", () => {
- const note = structuredClone(sampleNotes[0]!)
+ const note = createNote()
note.author = "local"
expect(improvementThreadView(note)).toMatchObject({
author: "Local author",
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts b/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts
index 5c3867ed..05793d69 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts
+++ b/hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts
@@ -1,13 +1,6 @@
import type { ReviewAnchor } from "@utils/review-anchor/types"
-export type Route = string
export type Rect = { x: number; y: number; width: number; height: number }
-export type Target = {
- id: string
- label: string
- route: Route
- rect: Rect
-}
export type Note = {
id: number
kind: "improvement_note"
@@ -16,7 +9,7 @@ export type Note = {
localId?: string
result?: string
body: string
- route: Route
+ route: string
target: string
selector: string | null
rect: Rect
@@ -48,7 +41,3 @@ export type Note = {
)[]
}
}
-export type Selection = Pick<
- Note,
- "route" | "target" | "selector" | "rect" | "capture" | "anchor" | "capturePlaceholder"
-> & { identity?: string; sourceId?: string; noteRevision?: number; originalBody?: string }
diff --git a/hub/app/javascript/features/prototype-canvas-improvement-threads/index.test.tsx b/hub/app/javascript/features/prototype-canvas-improvement-threads/index.test.tsx
index 50b2bfb3..e79821d9 100644
--- a/hub/app/javascript/features/prototype-canvas-improvement-threads/index.test.tsx
+++ b/hub/app/javascript/features/prototype-canvas-improvement-threads/index.test.tsx
@@ -53,9 +53,6 @@ describe("ImprovementThreads()", () => {
expect(menuDelete).toHaveAttribute("aria-disabled", "false")
fireEvent.click(menuDelete)
const confirmation = screen.getByRole("dialog", { name: copy.deleteTitle })
- expect(confirmation.querySelector(".canvas-dialog-header .hub-icon-button")).not.toHaveClass(
- "hub-icon-button--invisible",
- )
expect(confirmation.querySelector("blockquote")).toHaveTextContent(thread.body)
expect(confirmation).not.toHaveTextContent(
"This improvement and its follow-ups will be removed",
@@ -76,7 +73,6 @@ describe("ImprovementThreads()", () => {
expect(confirmation).toHaveTextContent("The improvement could not be deleted.")
for (const alert of screen.getAllByRole("alert")) {
expect(alert).toBeVisible()
- expect(alert).toHaveClass("thread-sample__error")
}
expect(screen.getByRole("button", { name: copy.point(1) })).toHaveAttribute(
"aria-expanded",
@@ -172,14 +168,7 @@ describe("ImprovementThreads()", () => {
/>,
)
const fix = screen.getByRole("button", { name: copy.simulate(count) })
- expect(fix.querySelector(".hub-counter")).toHaveTextContent(String(count))
- expect(fix.querySelector(".hub-counter")).toHaveAttribute("aria-hidden", "true")
- expect(fix.querySelector(".hub-counter")?.parentElement).toHaveClass(
- "thread-sample__fix-label",
- )
- expect(fix.querySelector(".hub-counter")?.parentElement).toHaveTextContent(copy.fix)
- expect(fix.querySelector('[data-testid="Button-trailing-visual"]')).toBeNull()
- expect(fix).not.toHaveTextContent(/[()]/)
+ expect(fix).toHaveTextContent(String(count))
if (count) expect(fix).toBeEnabled()
else expect(fix).toBeDisabled()
expect(onFix).not.toHaveBeenCalled()
@@ -228,7 +217,6 @@ describe("ImprovementThreads()", () => {
return
}
if (!resolve) throw new Error("Expected the ready-work resolution action.")
- expect(resolve.querySelector("svg")).toHaveClass("octicon-check-circle")
expect(resolve).toBeEnabled()
fireEvent.click(resolve)
expect(onResolve).toHaveBeenCalledExactlyOnceWith(thread)
diff --git a/hub/app/javascript/features/prototype-canvas-thread-sample/index.test.tsx b/hub/app/javascript/features/prototype-canvas-thread-sample/index.test.tsx
index 64935c8f..2c9a2c0d 100644
--- a/hub/app/javascript/features/prototype-canvas-thread-sample/index.test.tsx
+++ b/hub/app/javascript/features/prototype-canvas-thread-sample/index.test.tsx
@@ -5,40 +5,9 @@ import { copy } from "./en"
import { sampleThreads } from "./fixtures"
describe("PrototypeCanvasThreadSample()", () => {
- it("uses the canonical avatar slot for Copilot answers without changing human avatars", () => {
- render()
- fireEvent.click(
- screen.getByRole("button", { name: `Open improvement: ${sampleThreads[0]!.body}` }),
- )
- const dialog = screen.getByRole("dialog", { name: copy.conversation })
- const copilot = within(dialog).getAllByText(copy.copilot, { exact: true })[0]!
- const heading = copilot.closest(".review-thread-message__header")
- const avatar = heading?.querySelector(".thread-sample__copilot-avatar")
- expect(avatar).toHaveClass("hub-user-avatar", "hub-user-avatar--28")
- const image = avatar?.querySelector("img")
- expect(image).toHaveAttribute("alt", "")
- expect(decodeURIComponent(image?.getAttribute("src") ?? "")).toContain('fill="white"')
- expect(heading?.querySelector("svg")).toBeNull()
- expect(dialog.querySelector(".review-thread-message__header .hub-user-avatar")).not.toHaveClass(
- "thread-sample__copilot-avatar",
- )
- expect(screen.getByRole("button", { name: copy.point(1) })).not.toHaveClass(
- "thread-sample__copilot-avatar",
- )
- })
-
- it("keeps the kebab's accessible label and menu separate from its implicit hover label", () => {
+ it("exposes an accessible actions menu", () => {
render()
const trigger = screen.getByRole("button", { name: `${copy.actions}: 1` })
- const labelId = trigger.getAttribute("aria-labelledby")
- expect(labelId).toBeTruthy()
- if (!labelId) throw new Error("Expected the kebab's implicit label.")
- const label = document.getElementById(labelId)
- expect(label).toHaveAttribute("popover")
- expect(label).toHaveAttribute("aria-hidden", "true")
- expect(label?.previousElementSibling).toBe(trigger)
- expect(label?.closest(".thread-sample__menu")).not.toBeNull()
- expect(trigger).not.toHaveAttribute("title")
expect(trigger).toHaveAccessibleName(`${copy.actions}: 1`)
fireEvent.click(trigger)
expect(screen.getByRole("menuitem", { name: copy.delete })).toBeVisible()
@@ -100,16 +69,14 @@ describe("PrototypeCanvasThreadSample()", () => {
expect(screen.getByRole("button", { name: copy.open })).toHaveFocus()
})
- it("places ready status beside the author, omits open status and counts only human follow-ups", () => {
+ it("shows readiness and counts only human follow-ups", () => {
const fetch = vi.spyOn(window, "fetch")
render()
expect(screen.queryByText(/visual experiment/i)).not.toBeInTheDocument()
const first = screen.getByRole("button", {
name: `Open improvement: ${sampleThreads[0]!.body}`,
})
- const status = within(first).getByText(copy.ready)
- expect(first.querySelector(".hub-user-avatar")).toHaveClass("hub-user-avatar--20")
- expect(status.parentElement).toBe(within(first).getByText(copy.author).parentElement)
+ expect(within(first).getByText(copy.ready)).toBeVisible()
const card = first.closest("article")
if (!card) throw new Error("Expected the sample card.")
expect(within(card).queryByText(/follow-up/)).not.toBeInTheDocument()
@@ -119,21 +86,14 @@ describe("PrototypeCanvasThreadSample()", () => {
if (!second) throw new Error("Expected the second card.")
const followUps = within(second).getByText(copy.followUps(2))
expect(followUps).toBeVisible()
- const summaryIcon = followUps.querySelector('svg.octicon-reply[aria-hidden="true"]')
- expect(summaryIcon).toHaveAttribute("width", "12")
- expect(summaryIcon).toHaveAttribute("height", "12")
expect(followUps.closest("button, a")).toBeNull()
const open = screen.getByRole("button", {
name: `Open improvement: ${sampleThreads[2]!.body}`,
})
expect(within(open).queryByText(copy.openStatus)).not.toBeInTheDocument()
- expect(open.querySelector(".thread-sample__status")).toBeNull()
fireEvent.click(screen.getByRole("button", { name: `${copy.actions}: 2` }))
expect(screen.queryByRole("menuitem", { name: "Add follow-up" })).not.toBeInTheDocument()
- const menuIcon = screen.getByRole("menuitem", { name: copy.markResolved }).querySelector("svg")
- expect(menuIcon).toHaveClass("octicon-check-circle")
- expect(menuIcon).toHaveAttribute("width", "16")
- expect(menuIcon).toHaveAttribute("height", "16")
+ expect(screen.getByRole("menuitem", { name: copy.markResolved })).toBeEnabled()
expect(screen.queryByText(/\d+ replies/)).not.toBeInTheDocument()
expect(fetch).not.toHaveBeenCalled()
})
@@ -148,9 +108,7 @@ describe("PrototypeCanvasThreadSample()", () => {
const conversation = screen.getByRole("dialog", { name: copy.conversation })
expect(screen.getAllByRole("button", { name: /^Open improvement:/ })).toHaveLength(3)
expect(conversation.closest("aside")).toBeNull()
- expect(conversation.parentElement).toHaveClass("thread-sample__surface")
expect(within(conversation).getByText(copy.copilot)).toBeVisible()
- expect(conversation.querySelector(".hub-user-avatar")).toHaveClass("hub-user-avatar--28")
expect(conversation.querySelectorAll(".review-thread-message__body")[1]?.textContent).toBe(
sampleThreads[0]!.messages[0]!.body,
)
diff --git a/hub/docs/prototype-canvas.md b/hub/docs/prototype-canvas.md
index 8455da34..be1a79dc 100644
--- a/hub/docs/prototype-canvas.md
+++ b/hub/docs/prototype-canvas.md
@@ -54,7 +54,7 @@ The handoff contains batch identifiers and a count, not note text. The batch act
Returning sent work to active permanently invalidates its results for that batch, even if another clone later sends the same request again. Synchronization records invalidation when captured requests stop being sent and cancels a batch when all captured requests are invalidated; a new follow-up alone does not invalidate earlier work.
-Storybook remains an isolated presentation workbench with authored SVG captures and explicit simulated connection and agent-result controls. Those stories do not use disk, Hub, or Copilot dispatch.
+Storybook presents the real conversation component with small display fixtures for pins, active notes, answers, empty work and identity errors. It does not simulate a separate prototype app, source selection, storage, synchronization or agent workflow. Stories do not use disk, Hub, or Copilot dispatch.
### Sample follow-up conversations
@@ -66,7 +66,9 @@ The sample and real integration share `features/prototype-canvas-improvement-thr
Selecting a card or a point marker opens the conversation over the preview while keeping the sidebar list in place. The points are deterministic fixture positions, not captured DOM targets or evidence that the displayed routes match the current page. The conversation reuses the ordinary comments frame and anchor-positioning hook, including resize observation and full-viewport clamping. As in real mode, pins sit below the sidebar and the conversation sits above it; on narrow preview surfaces it uses the ordinary conversation's full-surface layout. Escape, the close button, and the review bridge's dismissal event protect unsaved drafts and return focus to the opener. No prototype interaction or route navigation is needed to place these points.
-After building the extension, run `node script/check-prototype-canvas-renderer.mjs` from `hub/` in the prepared container to smoke-test the canvas through the extension's actual HTTP server. It uses the existing build action's Playwright dependency and `/usr/bin/chromium`. Sample checks cover the approved styling, floating layout, draft behavior and isolation. Real-mode checks use an owned fixture preview, the actual selection bridge and notes API, temporary disk storage and a fake dispatch collector. They cover captured anchors, follow-ups during a pending batch, separate explicit batches, result history, resolution, filtering and reload. An ordinary-comments fixture checks toolbar, sidebar and reaction counters in both appearances. Pass `sample`, `real` or `comments` to run only a named fixture. No user notes, Hub account or real agent dispatch is involved. This complements source tests, whose browser-named Vitest project uses jsdom rather than Chromium; it does not prove native host or WebKit rendering.
+After building the extension, run `node script/check-prototype-canvas-renderer.mjs` from `hub/` in the prepared container to smoke-test the canvas through the extension's actual HTTP server. It uses the existing build action's Playwright dependency and `/usr/bin/chromium`. One functional flow uses a fixture preview, the actual selection bridge and notes API, temporary disk storage and a fake dispatch collector. It covers selection, saving, follow-ups during a pending batch, separate explicit batches, result history, resolution, filtering, reload and deletion. No user notes, Hub account or real agent dispatch is involved. This complements source tests, whose browser-named Vitest project uses jsdom rather than Chromium; it does not prove native host or WebKit rendering. Human review owns visual appearance, with relevant screenshots or recordings in PRs for meaningful UI changes rather than automated color, spacing or pixel assertions.
+
+Set `REPLICA_CANVAS_SCREENSHOT=/tmp/pick-and-polish.png` when running that command to save the completed conversation for PR review.
## Local prototype controls
@@ -514,7 +516,7 @@ Plugin releases, the Controls definition format and the Canvas interface are ver
Canvas frontend source follows Hub's normal layers under `hub/app/javascript/`. `application/prototype-canvas/` composes the interface; `application/start-prototype-canvas/` starts it, and `application/prototype-preview-bridge/` owns the injected preview entry point. Workflow panels belong in `features/`, reusable fields and dialogs in `components/`, and stateful browser behavior in `hooks/`. Shared contracts, locale copy, protocols and URL helpers live in `utils/`; the Controls engine and definition schema live in `utils/prototype-controls/`. Extension registration and server operations remain in `.github/extensions/replica-prototype/`.
-Pick & polish lives in `features/prototype-canvas-improvement-notes/`, with its selection and persistence hooks and presentation tests. The application loads it on demand; its generated feature and server-rendering chunks must stay in the server's public asset list. Anchor validation for the Node extension is built from `utils/review-anchor/validate-anchor.ts`, which is covered by Hub's shared type check.
+Pick & polish lives in `features/prototype-canvas-improvement-notes/`, with its selection and persistence hooks and presentation tests. The application loads it on demand; its generated feature and server-rendering chunks must stay in the server's public asset list. Anchor validation for the Node extension is built from `utils/review-anchor/validate-anchor.ts`, which is covered by Hub's shared type check. The build minifies the generated validator; its TypeScript source remains unminified.
Hub builds renderer files, Brand fonts and browser runtime into the plugin's `assets/`; commit them so installed users need no Node packages. Build configuration lives in `hub/vite.prototype-canvas.config.mjs` and `hub/script/`. Generated assets are excluded from formatting checks; do not edit them manually. There is no Vite/npm distribution or release preparation.
diff --git a/hub/docs/storybook.md b/hub/docs/storybook.md
index 8a02e9a5..aa1a8d20 100644
--- a/hub/docs/storybook.md
+++ b/hub/docs/storybook.md
@@ -72,7 +72,7 @@ Add another story only when it shows a meaningful product state, such as loading
## Story ownership
-`Components/Prototype canvas/Improvement notes prototype` is the isolated UI workbench for [Pick & polish](prototype-canvas.md#pick--polish). Empty, Single, and Multiple show the interactive flow over an authored Projects/Settings preview and reuse the real `HubSidebar`. Pick & polish selects an element or rectangle directly; its adjoining counter-only button opens the sidebar. Primer Brand ActionMenu selects Active notes, Ready to review, or Resolved. Only Active notes shows Fix all and its eligible-note counter. Shift+Enter starts keyboard two-corner region selection with arrows and Enter. Storybook supplies cropped SVG captures, simulated immutable batches and explicit connection/result controls; the author can edit, delete, resolve, reopen, and retry notes. Story state resets on reload and never calls disk, Hub, or Copilot APIs. Production persistence, synchronization, captures, and handoff belong to the canvas adapter, not these fixtures.
+`Components/Prototype canvas/Improvement threads` is the presentation workbench for [Pick & polish](prototype-canvas.md#pick--polish). Small fixtures render the real conversation component with pins, active notes, a Copilot answer, no pending work and an identity error. They do not implement a second prototype app, selection bridge, storage, synchronization or agent workflow. The former `Improvement notes prototype` stories and their standalone simulated app have been removed.
Keep `stories.tsx` beside the code it presents:
diff --git a/hub/script/build-prototype-preview-bridge.mjs b/hub/script/build-prototype-preview-bridge.mjs
index ffdbfd37..246f10d7 100644
--- a/hub/script/build-prototype-preview-bridge.mjs
+++ b/hub/script/build-prototype-preview-bridge.mjs
@@ -37,6 +37,8 @@ await build({
},
build: {
emptyOutDir: false,
+ minify: true,
+ rolldownOptions: { output: { minify: true } },
outDir: assets.pathname,
lib: {
entry: new URL("../app/javascript/utils/review-anchor/validate-anchor.ts", import.meta.url)
diff --git a/hub/script/check-prototype-canvas-renderer.mjs b/hub/script/check-prototype-canvas-renderer.mjs
index 235858a9..ec94d5ae 100644
--- a/hub/script/check-prototype-canvas-renderer.mjs
+++ b/hub/script/check-prototype-canvas-renderer.mjs
@@ -1,7 +1,6 @@
import assert from "node:assert/strict"
import { createServer } from "node:http"
import path from "node:path"
-import { readFile, writeFile } from "node:fs/promises"
import { chromium } from "../../actions/build/node_modules/playwright/index.mjs"
import { startCanvasServer } from "../../.github/extensions/replica-prototype/start-canvas-server/index.mjs"
@@ -9,1850 +8,271 @@ import { withContext } from "../../.github/extensions/replica-prototype/test-sup
import { createCanvasContext } from "../../.github/extensions/replica-prototype/create-canvas-context/index.mjs"
import { createImprovementNotes } from "../../.github/extensions/replica-prototype/improvement-notes/index.mjs"
+function sanitize(message) {
+ return String(message).replace(/https?:\/\/\S+/g, "[local resource]")
+}
const prototype = createServer((request, response) => {
if (request.url === "/controls.replica.json") {
- response.writeHead(404)
- response.end()
+ response.writeHead(404).end()
return
}
response.writeHead(200, { "Content-Type": "text/html" })
response.end(
- 'ProjectsSave project',
+ 'ProjectsSave project',
)
})
-await new Promise((resolve) => prototype.listen(0, "127.0.0.1", resolve))
-const address = prototype.address()
-assert.ok(address && typeof address === "object")
-
-const browser = await chromium.launch({
- executablePath: "/usr/bin/chromium",
- args: ["--no-sandbox"],
-})
-const branchDiscoveryNotice = "Notes are saved locally until Hub discovers this branch."
-const toolbarBranch = "prototype/refine-project-navigation-and-review-workflow"
-const fixtureAuthor = {
- id: 7,
- login: "mona",
- avatarUrl: "https://avatars.githubusercontent.com/u/7",
-}
-const modes = process.argv.length > 2 ? process.argv.slice(2) : ["sample", "real", "comments"]
-assert.ok(modes.every((mode) => ["sample", "real", "comments"].includes(mode)))
-const fixtureComment = {
- id: 1,
- kind: "root",
- buildNumber: 1,
- buildPath: "/repositories/1/prototypes/1?build=1",
- body: "Please align this control with the content above it.",
- anchor: {
- schemaVersion: 1,
- kind: "element",
- route: { pathname: "/projects", search: "?view=active", hash: "#list" },
- selector: "#save",
- accessibleName: "Save project",
- tagName: "button",
- selectedText: "",
- rect: { x: 80, y: 80, width: 120, height: 40 },
- viewport: { width: 1280, height: 900, scrollX: 0, scrollY: 0 },
- elementOffset: { x: 0.5, y: 0.5 },
- },
- createdAt: "2026-09-14T12:00:00Z",
- updatedAt: "2026-09-14T12:00:00Z",
- editedAt: null,
- deletedAt: null,
- resolvedAt: null,
- resolvedBy: null,
- activityVersion: 2,
- viewerLastSeenActivityVersion: 2,
- author: { ...fixtureAuthor, name: null },
- viewerCanEdit: true,
- viewerCanDelete: true,
- reactions: [
- { content: "heart", count: 1, viewerHasReacted: true },
- { content: "rocket", count: 2, viewerHasReacted: false },
- ],
-}
+let browser
+let phase = "startup"
+const errors = []
+const failedAssets = []
try {
- await withContext(async (fixtureContext) => {
+ await new Promise((resolve) => prototype.listen(0, "127.0.0.1", resolve))
+ const address = prototype.address()
+ assert.ok(address && typeof address === "object")
+ browser = await chromium.launch({
+ executablePath: "/usr/bin/chromium",
+ args: ["--no-sandbox"],
+ })
+ await withContext(async (fixture) => {
const context = await createCanvasContext({
prototypeUrl: `http://127.0.0.1:${address.port}/projects?view=active#list`,
name: "Renderer smoke",
sessionId: "renderer-smoke",
- repository: fixtureContext.target.repository,
- repositoryPath: fixtureContext.repositoryPath,
- sessionWorkspacePath: fixtureContext.sessionWorkspacePath,
+ repository: fixture.target.repository,
+ repositoryPath: fixture.repositoryPath,
+ sessionWorkspacePath: fixture.sessionWorkspacePath,
})
- for (const mode of modes) {
- const sample = mode === "sample"
- const ordinary = mode === "comments"
- const dispatched = []
- const session = { send: async (message) => dispatched.push(message) }
- const notesDirectory = path.join(context.sessionWorkspacePath, "notes")
- const store = createImprovementNotes(
- () => context,
- session,
- async () => null,
- { directory: notesDirectory },
- )
- const canvas = await startCanvasServer(
- { ...context, improvementThreadsSample: sample },
- session,
- {
- improvementNotesDirectory: path.join(context.sessionWorkspacePath, "notes"),
- hubOptions: { directory: path.join(context.sessionWorkspacePath, "credentials") },
- },
- )
- const page = await browser.newPage({ viewport: { width: 1280, height: 900 } })
- if (ordinary)
- await page.route(canvas.url, async (route) => {
- const response = await route.fetch()
- await route.fulfill({
- response,
- body: (await response.text()).replace('"pickAndPolish":true', '"pickAndPolish":false'),
- })
- })
- const errors = []
- const failedAssets = []
- const noteRequests = []
- let holdSync = false
- let releaseSync
- let syncHeld
- let holdDelete = false
- let releaseDelete
- let deleteHeld
- let deletionRequests = 0
- let failNextDelete = false
- let phase = "document"
- let sharedDialogStyle
- async function rowPresentation(row, state) {
- const evidence = []
- for (const width of [1280, 390]) {
- await page.setViewportSize({ width, height: 900 })
- for (const appearance of ["dark", "light"]) {
- phase = `${state} row ${appearance} at ${width}`
- await page
- .getByRole("button", {
- name: `${appearance === "dark" ? "Dark" : "Light"} appearance`,
- })
- .click()
- await row.hover()
- await page.mouse.move(0, 0)
- const before = await row.locator(".review-comment-row__body").boundingBox()
- await row.hover()
- const style = await row.evaluate((element) => {
- const sidebar = element.closest(".hub-sidebar")
- const sidebarBox = sidebar.getBoundingClientRect()
- const sidebarStyle = getComputedStyle(sidebar)
- const box = element.getBoundingClientRect()
- const highlight = getComputedStyle(element, "::before")
- const hit = getComputedStyle(
- element.querySelector(".review-comment-row__button"),
- "::after",
- )
- const author = getComputedStyle(element.querySelector(".review-comment-row__author"))
- const body = getComputedStyle(element.querySelector(".review-comment-row__body"))
- const probe = document.createElement("span")
- element.append(probe)
- function token(name) {
- probe.style.color = `var(${name})`
- return getComputedStyle(probe).color
- }
- const foreground = token("--hub-fg-default")
- const muted = token("--hub-fg-muted")
- probe.style.backgroundColor = "var(--brand-color-border-muted)"
- const background = getComputedStyle(probe).backgroundColor
- probe.remove()
- return {
- author: author.color,
- weight: author.fontWeight,
- body: body.color,
- foreground,
- muted,
- background: highlight.backgroundColor,
- expectedBackground: background,
- gutters: [
- box.left +
- parseFloat(highlight.left) -
- sidebarBox.left -
- parseFloat(sidebarStyle.borderLeftWidth),
- sidebarBox.right -
- box.right +
- parseFloat(highlight.right) -
- parseFloat(sidebarStyle.borderRightWidth),
- ],
- hitContainsHighlight:
- parseFloat(hit.left) <= parseFloat(highlight.left) &&
- parseFloat(hit.right) <= parseFloat(highlight.right),
- unread: element.classList.contains("review-comment-row--unread"),
- }
- })
- assert.equal(style.author, state === "active" ? style.foreground : style.muted)
- assert.equal(style.body, state === "active" ? style.foreground : style.muted)
- assert.equal(style.weight, state === "active" ? "600" : "400")
- assert.equal(style.unread, false)
- assert.equal(style.background, style.expectedBackground)
- assert.deepEqual(style.gutters.map(Math.round), [8, 12])
- assert.ok(style.hitContainsHighlight)
- const after = await row.locator(".review-comment-row__body").boundingBox()
- assert.equal(after.x, before.x)
- evidence.push({ width, appearance, state, ...style })
- }
- }
- await page.setViewportSize({ width: 1280, height: 900 })
- console.log(JSON.stringify({ rowPresentation: evidence }))
- }
- async function dialogStyle(dialog) {
- return dialog.evaluate((element) => {
- const shell = getComputedStyle(element)
- const header = getComputedStyle(element.querySelector(".canvas-dialog-header"))
- const close = element.querySelector(".canvas-dialog-header .hub-icon-button")
- return {
- width: shell.width,
- padding: shell.padding,
- border: shell.border,
- borderRadius: shell.borderRadius,
- background: shell.backgroundColor,
- headerGap: header.gap,
- headerMargin: header.marginBottom,
- closeClass: close.className,
- closeBackground: getComputedStyle(close).backgroundColor,
- }
- })
- }
- async function fixButton(count) {
- const button = page.getByRole("button", {
- name: `Fix all, ${count} pending ${count === 1 ? "request" : "requests"}`,
- exact: true,
- })
- const counter = button.locator(".hub-counter")
- await counter.waitFor({ state: "visible" })
- assert.equal(await counter.textContent(), String(count))
- assert.doesNotMatch(await button.textContent(), /[()]/)
- assert.equal(await counter.getAttribute("aria-hidden"), "true")
- const geometry = await button.evaluate((element) => {
- const label = element.querySelector(".thread-sample__fix-label")
- const badge = element.querySelector(".hub-counter").getBoundingClientRect()
- const box = element.getBoundingClientRect()
- return {
- slot: Boolean(label?.contains(element.querySelector(".hub-counter"))),
- inside:
- badge.width > 0 &&
- badge.height > 0 &&
- badge.left >= box.left &&
- badge.right <= box.right,
- }
- })
- assert.ok(geometry.slot && geometry.inside)
- return button
- }
- async function counterColors(button, enabled) {
- const colors = await button.evaluate((element) => {
- const canvas = document.createElement("canvas")
- canvas.width = canvas.height = 1
- const context = canvas.getContext("2d")
- function rgba(color) {
- context.clearRect(0, 0, 1, 1)
- context.fillStyle = color
- context.fillRect(0, 0, 1, 1)
- return Array.from(context.getImageData(0, 0, 1, 1).data)
- }
- const counter = element.querySelector(".hub-counter")
- const badge = getComputedStyle(counter)
- return {
- button: rgba(getComputedStyle(element).backgroundColor),
- background: rgba(badge.backgroundColor),
- foreground: rgba(badge.color),
- buttonForeground: rgba(getComputedStyle(element).color),
- parentForeground: rgba(getComputedStyle(counter.parentElement).color),
- labelForeground: element.querySelector(".thread-sample__fix-label")
- ? rgba(getComputedStyle(element.querySelector(".thread-sample__fix-label")).color)
- : null,
- neutral: rgba(badge.getPropertyValue("--hub-fg-default")),
- opacity: badge.opacity,
- appearance: element.closest("[data-color-mode]")?.getAttribute("data-color-mode"),
- }
- })
- if (colors.labelForeground)
- assert.deepEqual(colors.foreground, colors.labelForeground, JSON.stringify(colors))
- else if (enabled)
- assert.deepEqual(colors.foreground, colors.parentForeground, JSON.stringify(colors))
- assert.equal(colors.opacity, "1")
- assert.ok(Math.abs(colors.background[3] / 255 - 0.1) < 0.005, JSON.stringify(colors))
- assert.deepEqual(
- colors.background.slice(0, 3),
- colors.neutral.slice(0, 3),
- JSON.stringify(colors),
- )
- const neutral = colors.neutral.slice(0, 3).reduce((sum, value) => sum + value, 0) / 3
- assert.ok(
- colors.appearance === "dark" ? neutral > 192 : neutral < 64,
- JSON.stringify(colors),
- )
- assert.equal(await button.isEnabled(), enabled)
- return colors
- }
- async function counterStates(button) {
- const enabled = await button.isEnabled()
- const rest = await counterColors(button, enabled)
- const count = await button.locator(".hub-counter").textContent()
- const bounds = await button.locator(".hub-counter").boundingBox()
- const states = { rest: rest.background }
- const foregroundStates = { rest: rest.foreground }
- if (enabled) {
- await button.hover()
- const hover = await counterColors(button, true)
- states.hover = hover.background
- foregroundStates.hover = hover.foreground
- await page.mouse.down()
- const pressed = await counterColors(button, true)
- states.pressed = pressed.background
- foregroundStates.pressed = pressed.foreground
- await page.mouse.move(0, 0)
- await page.mouse.up()
- for (const attribute of ["disabled", "aria-disabled"]) {
- await button.evaluate((element, name) => element.setAttribute(name, "true"), attribute)
- const disabled = await counterColors(button, false)
- states[attribute] = disabled.background
- foregroundStates[attribute] = disabled.foreground
- await button.evaluate((element, name) => element.removeAttribute(name), attribute)
- }
- }
- const after = await button.locator(".hub-counter").boundingBox()
- assert.equal(after.width, bounds.width)
- assert.equal(after.height, bounds.height)
- assert.equal(await button.locator(".hub-counter").textContent(), count)
- return {
- name: await button.getAttribute("aria-label"),
- count,
- background: rest.background,
- foreground: rest.foreground,
- appearance: rest.appearance,
- enabled,
- states,
- foregroundStates,
- }
- }
- async function copilotAvatars(dialog) {
- for (const appearance of ["dark", "light"]) {
- await page
- .getByRole("button", {
- name: `${appearance === "dark" ? "Dark" : "Light"} appearance`,
- exact: true,
- })
- .click()
- const avatars = await dialog
- .locator(".thread-sample__copilot-avatar")
- .evaluateAll(async (elements) =>
- Promise.all(
- elements.map(async (element) => {
- const image = element.querySelector("img")
- await image.decode()
- const style = getComputedStyle(element)
- const bounds = element.getBoundingClientRect()
- const canvas = document.createElement("canvas")
- canvas.width = canvas.height = 16
- const context = canvas.getContext("2d")
- context.fillStyle = style.getPropertyValue(
- element.closest("[data-color-mode]")?.getAttribute("data-color-mode") === "dark"
- ? "--hub-success-emphasis"
- : "--hub-fg-success",
- )
- context.fillRect(0, 0, 1, 1)
- const expected = Array.from(context.getImageData(0, 0, 1, 1).data)
- context.fillStyle = style.backgroundColor
- context.fillRect(0, 0, 1, 1)
- const background = Array.from(context.getImageData(0, 0, 1, 1).data)
- context.clearRect(0, 0, 16, 16)
- context.drawImage(image, 0, 0, 16, 16)
- const pixels = context.getImageData(0, 0, 16, 16).data
- let opaque = 0
- let white = true
- for (let index = 0; index < pixels.length; index += 4) {
- if (!pixels[index + 3]) continue
- opaque++
- white &&=
- pixels[index] === 255 &&
- pixels[index + 1] === 255 &&
- pixels[index + 2] === 255
- }
- return {
- width: bounds.width,
- height: bounds.height,
- radius: style.borderRadius,
- padding: getComputedStyle(image).padding,
- alt: image.alt,
- background,
- expected,
- opaque,
- white,
- }
- }),
- ),
- )
- assert.ok(avatars.length > 0)
- for (const avatar of avatars) {
- assert.equal(avatar.width, 28)
- assert.equal(avatar.height, 28)
- assert.ok(
- avatar.radius === "50%" || parseFloat(avatar.radius) >= avatar.width / 2,
- JSON.stringify(avatar),
- )
- assert.equal(avatar.padding, "6px")
- assert.equal(avatar.alt, "")
- assert.deepEqual(avatar.background, avatar.expected)
- assert.ok(avatar.background[1] > avatar.background[0])
- assert.ok(avatar.background[1] > avatar.background[2])
- assert.ok(avatar.opaque > 0 && avatar.white)
- const linear = avatar.background.slice(0, 3).map((channel) => {
- const value = channel / 255
- return value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4
- })
- const luminance = linear[0] * 0.2126 + linear[1] * 0.7152 + linear[2] * 0.0722
- assert.ok(1.05 / (luminance + 0.05) >= 3, JSON.stringify(avatar))
- }
- }
- }
- async function deleteGeometry(dialog) {
- await page.mouse.move(0, 0)
- assert.deepEqual(await dialogStyle(dialog), sharedDialogStyle)
- const geometry = await dialog.evaluate((element) => {
- const quote = element.querySelector("blockquote").getBoundingClientRect()
- const actions = element
- .querySelector(".thread-sample__delete-actions")
- .getBoundingClientRect()
- const buttons = element.querySelectorAll(".thread-sample__delete-actions button")
- const cancel = buttons[0].getBoundingClientRect()
- const confirm = buttons[1].getBoundingClientRect()
- return {
- gap: actions.top - quote.bottom,
- adjacent: confirm.left - cancel.right,
- right: actions.right - confirm.right,
- ordered: cancel.right <= confirm.left,
- }
- })
- assert.equal(geometry.gap, 16)
- assert.equal(geometry.adjacent, 8)
- assert.ok(Math.abs(geometry.right) < 1 && geometry.ordered)
- assert.equal(
- await dialog
- .getByText("This improvement and its follow-ups will be removed.", { exact: true })
- .count(),
- 0,
- )
- const close = dialog.locator(".canvas-dialog-header .hub-icon-button")
- assert.equal(
- await close.evaluate((element) =>
- element.classList.contains("hub-icon-button--invisible"),
- ),
- false,
- )
- for (const hovered of [false, true]) {
- if (hovered) await close.hover()
- else await page.mouse.move(0, 0)
- assert.notEqual(
- await close.evaluate((element) => getComputedStyle(element).backgroundColor),
- "rgba(0, 0, 0, 0)",
- )
- }
- }
- async function deleteCursor() {
- const item = page.getByRole("menuitem", { name: "Delete improvement", exact: true })
- await item.hover()
- assert.equal(await item.getAttribute("aria-disabled"), "false")
- assert.equal(await item.evaluate((element) => getComputedStyle(element).cursor), "default")
- }
- async function toolbarPalette() {
- const evidence = []
- const controls = page.locator(".canvas-toolbar .canvas-controls-toggle")
- async function colors() {
- return controls.evaluate((button) => {
- const style = getComputedStyle(button)
- function resolve(token) {
- const probe = document.createElement("span")
- probe.style.backgroundColor = `var(${token})`
- button.closest(".canvas-toolbar").append(probe)
- const value = getComputedStyle(probe).backgroundColor
- probe.remove()
- return value
- }
- return {
- background: style.backgroundColor,
- rest: resolve("--brand-button-secondary-bgColor-rest"),
- hover: resolve("--brand-button-secondary-bgColor-hover"),
- pressed: resolve("--brand-button-secondary-bgColor-active"),
- }
- })
- }
- for (const appearance of ["dark", "light"]) {
- await page
- .getByRole("button", {
- name: `${appearance === "dark" ? "Dark" : "Light"} appearance`,
- exact: true,
- })
- .click()
- await page.mouse.move(0, 0)
- await page.waitForTimeout(250)
- const originalPublish = await page
- .locator(".canvas-publish-button")
- .evaluate((button) => getComputedStyle(button).backgroundColor)
- const rest = await colors()
- assert.equal(rest.background, rest.rest)
- assert.equal(
- rest.rest,
- appearance === "dark" ? "rgba(255, 255, 255, 0.12)" : "rgba(0, 0, 0, 0.06)",
- )
- const neutral = await page
- .locator(".canvas-toolbar button:not(.canvas-title,.canvas-publish-button)")
- .evaluateAll((buttons) =>
- buttons.map((button) => ({
- name: button.getAttribute("aria-label"),
- disabled: button.disabled || button.getAttribute("aria-disabled") === "true",
- selected:
- button.getAttribute("aria-pressed") === "true" ||
- button.getAttribute("aria-expanded") === "true",
- background: getComputedStyle(button).backgroundColor,
- })),
- )
- for (const button of neutral)
- assert.equal(
- button.background,
- button.selected && !button.disabled ? rest.hover : rest.rest,
- JSON.stringify(button),
- )
- await controls.hover()
- await page.waitForTimeout(250)
- assert.equal((await colors()).background, rest.hover)
- await controls.click()
- assert.equal(await controls.getAttribute("aria-expanded"), "true")
- await page.mouse.move(0, 0)
- await page.waitForTimeout(250)
- assert.equal((await colors()).background, rest.hover)
- await controls.hover()
- await page.waitForTimeout(250)
- assert.equal((await colors()).background, rest.pressed)
- await page.mouse.move(0, 0)
- for (const attribute of ["disabled", "aria-disabled"]) {
- await controls.evaluate((button, name) => button.setAttribute(name, "true"), attribute)
- await page.waitForTimeout(250)
- assert.equal((await colors()).background, rest.pressed)
- await controls.hover()
- await page.waitForTimeout(250)
- assert.equal((await colors()).background, rest.pressed)
- await controls.evaluate((button, name) => button.removeAttribute(name), attribute)
- await page.mouse.move(0, 0)
- }
- const panel = page.getByRole("complementary", { name: "Controls", exact: true })
- const link = panel.getByRole("link", { name: "Learn more", exact: true })
- await link.waitFor({ state: "visible" })
- assert.equal(
- await link.getAttribute("href"),
- "https://github.com/github/replica/blob/main/starter/README.md#prototype-controls",
- )
- assert.equal(await link.getAttribute("target"), "_blank")
- assert.equal(await link.getAttribute("rel"), "noopener noreferrer")
- const footer = await link.evaluate((element) => {
- const bar = element.closest(".canvas-controls-footer")
- const box = element.getBoundingClientRect()
- const bounds = bar.getBoundingClientRect()
- const barStyle = getComputedStyle(bar)
- const style = getComputedStyle(element)
- const icon = element.querySelector("svg.octicon-link-external")
- const range = document.createRange()
- range.selectNodeContents(element.firstChild)
- const text = range.getBoundingClientRect()
- const probe = document.createElement("span")
- probe.style.color = "var(--hub-fg-success)"
- element.append(probe)
- const green = getComputedStyle(probe).color
- probe.remove()
- return {
- bottom: box.bottom,
- messageBottom: element
- .closest(".canvas-controls-panel")
- .querySelector('[role="status"]')
- .getBoundingClientRect().bottom,
- leftInset: box.left - bounds.left,
- footerPadding:
- parseFloat(barStyle.paddingLeft) + parseFloat(barStyle.borderLeftWidth),
- verticalOffset: (box.top + box.bottom - bounds.top - bounds.bottom) / 2,
- color: style.color,
- green,
- decoration: style.textDecorationLine,
- iconColor: getComputedStyle(icon).color,
- iconGap: icon.getBoundingClientRect().left - text.right,
- decorativeIcon: icon.getAttribute("aria-hidden") === "true",
- }
- })
- assert.ok(footer.bottom > footer.messageBottom)
- assert.ok(Math.abs(footer.leftInset - footer.footerPadding) < 1, JSON.stringify(footer))
- assert.ok(Math.abs(footer.verticalOffset) < 1, JSON.stringify(footer))
- assert.equal(footer.color, footer.green)
- assert.equal(footer.iconColor, footer.green)
- assert.equal(footer.decoration, "none")
- assert.ok(footer.iconGap >= 3 && footer.iconGap <= 5, JSON.stringify(footer))
- assert.ok(footer.decorativeIcon)
- await link.hover()
- assert.deepEqual(
- await link.evaluate((element) => ({
- color: getComputedStyle(element).color,
- decoration: getComputedStyle(element).textDecorationLine,
- })),
- { color: footer.green, decoration: "none" },
- )
- await link.focus()
- await page.keyboard.press("Shift+Tab")
- await page.keyboard.press("Tab")
- assert.ok(
- await link.evaluate(
- (element) =>
- element.matches(":focus-visible") &&
- parseFloat(getComputedStyle(element).outlineWidth) > 0,
- ),
- )
- await controls.hover()
- await page.mouse.down()
- await page.waitForTimeout(250)
- assert.equal((await colors()).background, rest.pressed)
- await page.mouse.up()
- assert.equal(await controls.getAttribute("aria-expanded"), "false")
- await page.mouse.move(0, 0)
- await controls.focus()
- await page.keyboard.press("Shift+Tab")
- await page.keyboard.press("Tab")
- assert.ok(
- await controls.evaluate(
- (button) =>
- button.matches(":focus-visible") &&
- parseFloat(getComputedStyle(button).outlineWidth) > 0,
- ),
- )
- await controls.evaluate((button) => {
- button.disabled = true
- })
- await page.waitForTimeout(250)
- assert.equal((await colors()).background, rest.rest)
- await controls.evaluate((button) => {
- button.disabled = false
- })
- await page.mouse.move(0, 0)
- const publish = await page
- .locator(".canvas-publish-button")
- .evaluate((button) => getComputedStyle(button).backgroundColor)
- assert.equal(publish, originalPublish)
- const counters = []
- for (const button of await page.locator("button:has(.hub-counter)").all())
- if (await button.isVisible()) counters.push(await counterStates(button))
- evidence.push({
- appearance,
- rest: rest.rest,
- expanded: rest.hover,
- selectedHover: rest.pressed,
- selectedDisabled: rest.pressed,
- hover: rest.hover,
- pressed: rest.pressed,
- emptyControlsLink: footer,
- counters,
- })
- }
- console.log(JSON.stringify({ sample, toolbarPalette: evidence, emptyControlsReadme: true }))
- }
- page.on("pageerror", (error) =>
- errors.push(error.message.replace(/https?:\/\/\S+/g, "[local asset]")),
- )
+ const dispatched = []
+ const session = { send: async (message) => dispatched.push(message) }
+ const directory = path.join(context.sessionWorkspacePath, "notes")
+ const store = createImprovementNotes(
+ () => context,
+ session,
+ async () => null,
+ { directory },
+ )
+ const canvas = await startCanvasServer(context, session, {
+ improvementNotesDirectory: directory,
+ hubOptions: { directory: path.join(context.sessionWorkspacePath, "credentials") },
+ })
+ let page
+ try {
+ page = await browser.newPage()
+ page.on("pageerror", (error) => errors.push(sanitize(error.message)))
page.on("response", (response) => {
const url = new URL(response.url())
if (url.pathname.startsWith("/assets/") && response.status() !== 200)
failedAssets.push({ asset: path.basename(url.pathname), status: response.status() })
})
- await page.route(fixtureAuthor.avatarUrl, (route) =>
- route.fulfill({
- contentType: "image/svg+xml",
- body: '',
- }),
- )
+ page.on("requestfailed", (request) => {
+ const url = new URL(request.url())
+ if (url.pathname.startsWith("/assets/"))
+ failedAssets.push({ asset: path.basename(url.pathname), error: "request failed" })
+ })
await page.route("**/api/**", async (route) => {
const pathname = new URL(route.request().url()).pathname
- let data = { state: "unconfigured" }
- if (pathname === "/api/agent/next") data = { command: null }
- else if (pathname === "/api/state" || pathname === "/api/refresh")
- data = {
- name: "Renderer smoke",
- stats: { branch: toolbarBranch, commitSha: "a".repeat(40), workingTree: "clean" },
- publishRequest: { state: "idle", requestedAt: null },
- }
- else if (ordinary && pathname === "/api/hub/status")
- data = {
- state: "connected",
- repository: context.target.repository,
- branch: toolbarBranch,
- commitSha: "a".repeat(40),
- hubOrigin: "https://hub.example.com",
- canPublish: false,
- prototype: {
- id: 1,
- repositoryId: 1,
- branch: toolbarBranch,
- name: "Projects",
- description: null,
- viewerLogin: fixtureAuthor.login,
- registered: true,
- published: true,
- canEdit: true,
- canRegister: false,
- buildState: "successful",
- versionCount: 1,
- currentBuild: { commitSha: "a".repeat(40), state: "successful" },
- build: {
- commitSha: "a".repeat(40),
- number: 1,
- publishedAt: "2026-09-28T10:00:00Z",
- url: "https://hub.example.com/prototypes/1",
- author: { ...fixtureAuthor, name: null },
- },
+ // Keep notes, source capture, and batch persistence on the real disk API.
+ if (pathname.startsWith("/api/improvement-notes")) return route.continue()
+ if (pathname === "/api/state" || pathname === "/api/refresh")
+ return route.fulfill({
+ json: {
+ name: "Renderer smoke",
+ stats: { branch: "prototype", commitSha: "a".repeat(40), workingTree: "clean" },
+ publishRequest: { state: "idle", requestedAt: null },
},
- }
- else if (ordinary && pathname === "/api/hub/comments")
- data = { comments: [fixtureComment], nextCursor: null, hasMore: false }
- else if (pathname.startsWith("/api/improvement-notes")) {
- noteRequests.push(pathname)
- if (!sample) {
- if (
- failNextDelete &&
- pathname === "/api/improvement-notes" &&
- route.request().method() === "POST" &&
- route.request().postDataJSON().operation === "delete"
- ) {
- failNextDelete = false
- return route.fulfill({
- status: 409,
- json: { error: "The improvement could not be deleted." },
- })
- }
- if (holdSync && pathname.endsWith("/sync"))
- await new Promise((resolve) => {
- releaseSync = resolve
- syncHeld?.()
- })
- if (
- holdDelete &&
- pathname === "/api/improvement-notes" &&
- route.request().method() === "POST" &&
- route.request().postDataJSON().operation === "delete"
- ) {
- deletionRequests++
- await new Promise((resolve) => {
- releaseDelete = resolve
- deleteHeld?.()
- })
- }
- const response = await route.fetch()
- const data = await response.json()
- if (
- route.request().method() === "POST" &&
- route.request().postDataJSON().operation === "create" &&
- data.notes?.length === 1
- ) {
- const file = path.join(notesDirectory, `${data.identity}.json`)
- const fixture = JSON.parse(await readFile(file, "utf8"))
- fixture.owner = {
- origin: "https://hub.example.com",
- id: fixtureAuthor.id,
- login: fixtureAuthor.login,
- }
- fixture.notes[0].author = fixtureAuthor.login
- fixture.notes[0].thread = {
- ...fixture.notes[0].thread,
- version: 2,
- originalAuthor: fixtureAuthor,
- }
- await writeFile(file, JSON.stringify(fixture), { mode: 0o600 })
- data.notes[0] = {
- ...data.notes[0],
- author: fixtureAuthor.login,
- thread: fixture.notes[0].thread,
- }
- }
- return route.fulfill({
- response,
- json: { ...data, syncError: branchDiscoveryNotice },
- })
- }
- data = {
- identity: "isolated",
- revision: 0,
- notes: [],
- activeBatch: null,
- syncError: null,
- }
- }
- return route.fulfill({ json: data })
- })
- try {
- await page.goto(canvas.url)
- await page.locator("#root > *").first().waitFor({ state: "visible", timeout: 10_000 })
- await page.getByRole("button", { name: toolbarBranch, exact: true }).waitFor()
- if (!ordinary) await toolbarPalette()
- if (ordinary) {
- phase = "ordinary comment counters"
- const evidence = []
- const toggle = page.locator(".canvas-comments-toggle")
- await toggle.waitFor()
- await counterColors(toggle, true)
- await toggle.click()
- const sidebar = page.getByRole("complementary", { name: "Comments", exact: true })
- await sidebar.locator(".review-comment-row__button").waitFor()
- await rowPresentation(sidebar.locator(".review-comment-row").first(), "read")
- await sidebar.locator(".review-comment-row__button").click()
- await page.locator(".review-comment-reactions .hub-counter").first().waitFor()
- for (const appearance of ["dark", "light"]) {
- phase = `ordinary comment counters ${appearance}`
- await page
- .getByRole("button", {
- name: `${appearance === "dark" ? "Dark" : "Light"} appearance`,
- exact: true,
- })
- .click()
- await page.mouse.move(0, 0)
- await page.waitForTimeout(250)
- const toolbar = await counterColors(toggle, true)
- assert.equal(await toggle.getAttribute("aria-expanded"), "true")
- const selectedColors = await toggle.evaluate((button) => {
- const probe = document.createElement("span")
- button.closest(".canvas-toolbar").append(probe)
- probe.style.backgroundColor = "var(--brand-button-secondary-bgColor-hover)"
- const selected = getComputedStyle(probe).backgroundColor
- probe.style.backgroundColor = "var(--brand-button-secondary-bgColor-active)"
- const hover = getComputedStyle(probe).backgroundColor
- probe.remove()
- return { selected, hover, background: getComputedStyle(button).backgroundColor }
- })
- assert.equal(selectedColors.background, selectedColors.selected)
- await toggle.hover()
- await page.waitForTimeout(250)
- assert.equal(
- await toggle.evaluate((button) => getComputedStyle(button).backgroundColor),
- selectedColors.hover,
- )
- await page.mouse.move(0, 0)
- await counterColors(sidebar.locator(".hub-counter").locator(".."), true)
- const reactions = []
- for (const button of await page
- .locator(".review-comment-reactions > button:has(.hub-counter)")
- .all()) {
- await button.waitFor({ state: "visible" })
- reactions.push({
- ...(await counterStates(button)),
- selected: await button.getAttribute("aria-pressed"),
- })
- }
- assert.equal(reactions.length, 2)
- assert.deepEqual(
- reactions.map(({ count }) => count),
- ["1", "2"],
- )
- evidence.push({ appearance, toolbar, selectedColors, reactions })
- }
- assert.deepEqual(errors, [])
- assert.deepEqual(failedAssets, [])
- assert.deepEqual(dispatched, [])
- console.log(JSON.stringify({ ordinaryCommentCounters: evidence }))
- console.log("ordinary comments packaged renderer: counters verified, no runtime errors")
- continue
- }
- const toolbarSizes = []
- for (const width of [
- 1600, 1280, 1100, 1024, 1023, 900, 700, 600, 480, 390, 389, 388, 387, 345, 344, 343, 342,
- 320, 280, 240, 1600,
- ]) {
- await page.setViewportSize({ width, height: 900 })
- const size = await page.locator(".canvas-toolbar").evaluate((toolbar) => {
- const title = toolbar.querySelector(".canvas-title")
- const text = title.querySelector(":scope > span")
- const box = toolbar.getBoundingClientRect()
- const titleBox = title.getBoundingClientRect()
- const actions = Array.from(toolbar.querySelectorAll("button"))
- .filter((button) => button !== title && button.getBoundingClientRect().width)
- .map((button) => button.getBoundingClientRect())
- const centers = actions.map((rect) => rect.top + rect.height / 2)
- return {
- width: box.width,
- overflow: toolbar.scrollWidth > toolbar.clientWidth,
- sameRow: Math.max(...centers) - Math.min(...centers) < 1,
- titleWidth: titleBox.width,
- clipped: text.scrollWidth > text.clientWidth,
- ellipsis: getComputedStyle(text).textOverflow,
- fullTitle: title.textContent,
- hoverTitle: title.title,
- right: box.right - Math.max(...actions.map((rect) => rect.right)),
- overlap: actions.some(
- (rect) =>
- rect.left < titleBox.right &&
- rect.right > titleBox.left &&
- rect.top < titleBox.bottom &&
- rect.bottom > titleBox.top,
- ),
- }
- })
- assert.equal(size.overflow, false, JSON.stringify(size))
- assert.equal(size.overlap, false, JSON.stringify(size))
- assert.equal(size.fullTitle, toolbarBranch)
- assert.ok(size.hoverTitle.includes(toolbarBranch))
- assert.equal(size.ellipsis, "ellipsis")
- assert.ok(Math.abs(size.right - (width <= 480 ? 10 : 8)) < 1, JSON.stringify(size))
- assert.equal(size.sameRow, width >= (sample ? 343 : 388), JSON.stringify(size))
- if (width === 1600) assert.equal(size.clipped, false, JSON.stringify(size))
- if (width === 600) assert.equal(size.clipped, true, JSON.stringify(size))
- toolbarSizes.push({
- width,
- titleWidth: size.titleWidth,
- clipped: size.clipped,
- sameRow: size.sameRow,
})
- }
- console.log(JSON.stringify({ sample, toolbarSizes }))
- await page.locator(".canvas-toolbar").evaluate((toolbar) => {
- toolbar.style.width = "600px"
- })
- const contained = await page.locator(".canvas-toolbar").evaluate((toolbar) => {
- const title = toolbar.querySelector(".canvas-title > span")
- const centers = Array.from(toolbar.querySelectorAll("button:not(.canvas-title)"))
- .map((button) => button.getBoundingClientRect())
- .filter((rect) => rect.width)
- .map((rect) => rect.top + rect.height / 2)
- return {
- width: toolbar.getBoundingClientRect().width,
- clipped: title.scrollWidth > title.clientWidth,
- sameRow: Math.max(...centers) - Math.min(...centers) < 1,
- overflow: toolbar.scrollWidth > toolbar.clientWidth,
- }
+ if (pathname === "/api/agent/next") return route.fulfill({ json: { command: null } })
+ return route.fulfill({ json: { state: "unconfigured" } })
+ })
+ const cards = page.getByRole("button", { name: /^Open improvement:/ })
+ const dialog = page.getByRole("dialog", { name: "Improvement", exact: true })
+ function fix(count) {
+ return page.getByRole("button", {
+ name: `Fix all, ${count} pending ${count === 1 ? "request" : "requests"}`,
+ exact: true,
})
- assert.equal(contained.width, 600)
- assert.ok(
- contained.clipped && contained.sameRow && !contained.overflow,
- JSON.stringify(contained),
- )
- await page.locator(".canvas-toolbar").evaluate((toolbar) => {
- toolbar.style.removeProperty("width")
+ }
+ async function filter(name) {
+ await page.getByRole("button", { name: /^Filter improvement notes:/ }).click()
+ await page.getByRole("menuitemradio", { name, exact: true }).click()
+ }
+ async function answer(batch, message) {
+ await store.results({
+ batchId: batch.id,
+ results: [
+ {
+ localId: batch.notes[0].localId,
+ revision: batch.notes[0].revision,
+ status: "ready",
+ message,
+ },
+ ],
})
- await page.setViewportSize({ width: 1280, height: 900 })
- await page.getByRole("button", { name: toolbarBranch, exact: true }).click()
- const details = page.getByRole("dialog", { name: "Build details", exact: true })
- await details.waitFor({ state: "visible" })
- await page.mouse.move(0, 0)
- sharedDialogStyle = await dialogStyle(details)
- await details.getByRole("button", { name: "Close build details", exact: true }).click()
- if (sample) {
- await page
- .getByRole("button", { name: "Open improvements", exact: true })
- .waitFor({ state: "visible" })
- async function realisticCopy() {
- const text = await page
- .locator(
- ".thread-sample, .thread-sample__surface, [role='status'], dialog.canvas-dialog",
- )
- .evaluateAll((elements) =>
- elements
- .map(
- (element) =>
- `${element.textContent} ${Array.from(
- element.querySelectorAll("[aria-label], [title], [placeholder]"),
- )
- .map((node) =>
- [
- node.getAttribute("aria-label"),
- node.getAttribute("title"),
- node.getAttribute("placeholder"),
- ].join(" "),
- )
- .join(" ")}`,
- )
- .join(" "),
- )
- assert.doesNotMatch(text, /\b(sample|demo|simulat\w*|experiment)\b/i)
- }
- await realisticCopy()
- const cards = page.getByRole("button", { name: /^Open improvement:/ })
- assert.equal(await cards.count(), 3)
- await rowPresentation(page.locator(".thread-sample__card").first(), "active")
- await rowPresentation(page.locator(".thread-sample__card").last(), "active")
- const avatar = await cards.first().locator(".hub-user-avatar").boundingBox()
- assert.equal(avatar.width, 20)
- assert.equal(avatar.height, 20)
- const alignment = await page
- .locator(".thread-sample__card")
- .nth(1)
- .evaluate((card) => ({
- body: card.querySelector(".review-comment-row__body").getBoundingClientRect().left,
- metadata: card.querySelector(".thread-sample__metadata").getBoundingClientRect().left,
- followUps: card.querySelector(".thread-sample__follow-ups").getBoundingClientRect()
- .left,
- }))
- assert.equal(alignment.metadata, alignment.body)
- assert.equal(alignment.followUps, alignment.body)
- const ready = page.locator(".thread-sample__status--ready").first()
- const badge = await ready.evaluate((element) => {
- const style = getComputedStyle(element)
- const card = element.closest(".thread-sample__card")
- const body = card.querySelector(".review-comment-row__body").getBoundingClientRect()
- const author = card.querySelector(".review-comment-row__author").getBoundingClientRect()
- const badge = element.getBoundingClientRect()
- return {
- border: style.borderTopStyle,
- width: parseFloat(style.borderTopWidth),
- color: style.borderTopColor,
- background: style.backgroundColor,
- beside:
- author.right <= badge.left &&
- badge.top < author.bottom &&
- author.top < badge.bottom,
- above: badge.bottom <= body.top,
- metadataGap:
- card.querySelector(".thread-sample__metadata").getBoundingClientRect().top -
- body.bottom,
- }
- })
- assert.equal(badge.border, "solid")
- assert.ok(badge.width >= 1)
- assert.equal(badge.background, "rgba(0, 0, 0, 0)")
- assert.ok(badge.above)
- assert.ok(badge.beside)
- assert.ok(Math.abs(badge.metadataGap - 4) < 0.1)
- const green = badge.color.match(/\d+/g).map(Number)
- assert.ok(green[1] > green[0] && green[1] > green[2])
- assert.equal(await cards.last().locator(".thread-sample__status").count(), 0)
- assert.equal(await cards.last().getByText("Open", { exact: true }).count(), 0)
- const summary = page.locator(".thread-sample__follow-ups")
- const summaryStyle = await summary.evaluate((element) => {
- const probe = document.createElement("span")
- probe.style.color = "var(--hub-fg-default)"
- element.append(probe)
- const defaultColor = getComputedStyle(probe).color
- probe.remove()
- return {
- color: getComputedStyle(element).color,
- defaultColor,
- icon: element
- .querySelector('svg.octicon-reply[aria-hidden="true"] path')
- ?.getAttribute("d"),
- interactive: Boolean(element.closest("button, a")),
- iconSize: element.querySelector("svg").getBoundingClientRect().width,
- }
- })
- assert.equal(summaryStyle.color, summaryStyle.defaultColor)
- assert.ok(summaryStyle.icon)
- assert.equal(summaryStyle.interactive, false)
- assert.equal(summaryStyle.iconSize, 12)
- await page.setViewportSize({ width: 520, height: 900 })
- const headingFits = await ready.evaluate((element) => {
- const heading = element.parentElement.getBoundingClientRect()
- const badge = element.getBoundingClientRect()
- return (
- badge.left >= heading.left &&
- badge.right <= heading.right &&
- badge.bottom <= heading.bottom
- )
- })
- assert.ok(headingFits)
- await page.setViewportSize({ width: 1280, height: 900 })
- const fix = await fixButton(1)
- for (const appearance of ["dark", "light"]) {
- await page
- .getByRole("button", {
- name: `${appearance === "dark" ? "Dark" : "Light"} appearance`,
- exact: true,
- })
- .click()
- await page.mouse.move(0, 0)
- console.log(JSON.stringify({ fixAllCounter: await counterStates(fix) }))
- }
- assert.equal(await fix.count(), 1)
- assert.ok(
- await fix.evaluate((element) => Boolean(element.closest(".thread-sample__filters"))),
- )
- const menuTrigger = page.getByRole("button", {
- name: "Improvement actions: 1",
- exact: true,
- })
- await page.mouse.move(0, 0)
- const ghost = await menuTrigger.evaluate((element) => {
- const style = getComputedStyle(element)
- return { background: style.backgroundColor, border: style.borderTopColor }
- })
- assert.equal(ghost.background, "rgba(0, 0, 0, 0)")
- assert.equal(ghost.border, "rgba(0, 0, 0, 0)")
- await menuTrigger.click()
- const markResolved = page.getByRole("menuitem", { name: "Mark as resolved", exact: true })
- assert.equal(
- await page.getByRole("menuitem", { name: "Add follow-up", exact: true }).count(),
- 0,
- )
- const resolveIcon = await markResolved.locator("svg path").getAttribute("d")
- assert.ok(
- await markResolved
- .locator("svg")
- .evaluate((icon) => icon.classList.contains("octicon-check-circle")),
- )
- assert.equal(
- await markResolved
- .locator("svg")
- .evaluate((icon) => icon.getBoundingClientRect().width),
- 16,
- )
- const menuSpacing = await markResolved.evaluate((element) => ({
- gap: parseFloat(getComputedStyle(element).columnGap),
- separation: parseFloat(getComputedStyle(element.nextElementSibling).marginBlockStart),
- }))
- assert.ok(menuSpacing.gap >= 8)
- assert.ok(menuSpacing.separation >= 4)
- await page.keyboard.press("Escape")
- async function choose(label) {
- await page.getByRole("button", { name: /^Filter improvement notes:/ }).click()
- await page.getByRole("menuitemradio", { name: label, exact: true }).click()
- }
- await choose("Ready to review")
- assert.equal(await cards.count(), 2)
- assert.equal(await page.getByRole("button", { name: /Fix all/ }).count(), 0)
- await choose("Resolved")
- assert.equal(await cards.count(), 0)
- await realisticCopy()
- await page
- .getByText("No improvements in this view.", { exact: true })
- .waitFor({ state: "visible" })
- await choose("Active notes")
- assert.equal(await cards.count(), 3)
- await page
- .getByRole("button", { name: /^Open improvement:/ })
- .first()
- .click()
- await page.getByText("Copilot", { exact: true }).waitFor({ state: "visible" })
- const dialog = page.getByRole("dialog", { name: "Improvement", exact: true })
- await copilotAvatars(dialog)
- assert.equal(await cards.count(), 3)
- assert.equal(await dialog.locator("xpath=ancestor::aside").count(), 0)
- async function constrainedToPreview() {
- await page.waitForFunction(() => {
- const dialog = document.querySelector(".thread-sample__conversation")
- const surface = document.querySelector(".thread-sample__surface")
- const sidebar = document.querySelector("aside.thread-sample")
- if (!dialog || !surface || !sidebar) return false
- const box = dialog.getBoundingClientRect()
- const bounds = surface.getBoundingClientRect()
- return (
- box.width > 0 &&
- box.height > 0 &&
- box.left >= bounds.left - 1 &&
- box.top >= bounds.top - 1 &&
- box.right <= bounds.right + 1 &&
- box.bottom <= bounds.bottom + 1
- )
- })
- }
- await constrainedToPreview()
- async function headerAligned() {
- const alignment = await dialog.evaluate((element) => {
- const header = element.querySelector(".review-thread-conversation__header")
- const edge =
- header.getBoundingClientRect().right -
- parseFloat(getComputedStyle(header).paddingRight)
- const close = element.querySelector(".thread-sample__close").getBoundingClientRect()
- const resolve = element
- .querySelector(".thread-sample__resolve")
- .getBoundingClientRect()
- const title = header.querySelector("h3").getBoundingClientRect()
- return {
- close: Math.abs(close.right - edge),
- actionBeforeClose: resolve.right <= close.left,
- titleRow: close.top < title.bottom && title.top < close.bottom,
- actionRow: resolve.top < close.bottom && close.top < resolve.bottom,
- titleBeforeAction: title.right <= resolve.left,
- }
- })
- assert.ok(alignment.close <= 1)
- assert.ok(alignment.actionBeforeClose)
- assert.ok(alignment.titleBeforeAction)
- assert.ok(alignment.titleRow)
- assert.ok(alignment.actionRow)
- }
- await headerAligned()
- assert.equal(
- await dialog.locator(".thread-sample__resolve svg path").getAttribute("d"),
- resolveIcon,
- )
- await realisticCopy()
- const firstPosition = await dialog.boundingBox()
- const firstMarker = await page
- .getByRole("button", { name: "Open improvement 1", exact: true })
- .boundingBox()
- assert.ok(Math.abs(firstPosition.x - (firstMarker.x + firstMarker.height + 12)) <= 1)
- await page.setViewportSize({ width: 1100, height: 720 })
- await constrainedToPreview()
- await headerAligned()
- await page.setViewportSize({ width: 1280, height: 900 })
- await constrainedToPreview()
- await page.keyboard.press("Escape")
- assert.equal(await dialog.count(), 0)
- assert.ok(await cards.first().evaluate((element) => document.activeElement === element))
- for (const width of [900, 600]) {
- await page.setViewportSize({ width, height: 900 })
- const coveredPin = page.getByRole("button", { name: "Open improvement 2", exact: true })
- assert.equal(
- await coveredPin.evaluate((pin) => {
- const avatar = pin.querySelector(".review-participant-stack__avatar")
- const rect = avatar.getBoundingClientRect()
- return Boolean(
- document
- .elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2)
- ?.closest("aside.thread-sample"),
- )
- }),
- true,
- )
- await cards.nth(1).click()
- await constrainedToPreview()
- assert.equal(
- await dialog.evaluate((element) => {
- const sidebar = document
- .querySelector("aside.thread-sample")
- .getBoundingClientRect()
- const box = element.getBoundingClientRect()
- const x = Math.max(box.left, sidebar.left) + 4
- const y = Math.max(box.top, sidebar.top) + 4
- return (
- x < box.right &&
- y < box.bottom &&
- element.contains(document.elementFromPoint(x, y))
- )
- }),
- true,
- )
- await page.keyboard.press("Escape")
- }
- await page.setViewportSize({ width: 1280, height: 900 })
- const secondPoint = page.getByRole("button", { name: "Open improvement 2", exact: true })
- await secondPoint.click()
- await constrainedToPreview()
- const secondPosition = await dialog.boundingBox()
- assert.notEqual(secondPosition.x, firstPosition.x)
- assert.equal(await dialog.getByText("Copilot", { exact: true }).count(), 3)
- await page.keyboard.press("Escape")
- assert.ok(await secondPoint.evaluate((element) => document.activeElement === element))
- await cards.first().click()
- await constrainedToPreview()
- const conversationAvatar = await page
- .locator(".thread-sample__conversation .hub-user-avatar")
- .first()
- .boundingBox()
- assert.equal(conversationAvatar.width, 28)
- assert.equal(conversationAvatar.height, 28)
- await page
- .getByRole("textbox", { name: "Follow-up", exact: true })
- .getAttribute("placeholder")
- .then((value) => assert.equal(value, "Request a follow-up change"))
- await page
- .getByRole("textbox", { name: "Follow-up", exact: true })
- .fill("Keep the stronger label")
- assert.ok(
- await page
- .getByRole("button", { name: "Improvement actions: 1", exact: true })
- .isDisabled(),
- )
- const retainedAnchor = await page
- .getByRole("button", { name: "Open improvement 1", exact: true })
- .boundingBox()
- for (const [label, count] of [
- ["Ready to review", 2],
- ["Resolved", 0],
- ["Active notes", 3],
- ]) {
- assert.ok(
- await page.getByRole("button", { name: /^Filter improvement notes:/ }).isEnabled(),
- )
- await choose(label)
- assert.equal(await cards.count(), count)
- assert.equal(await dialog.count(), 1)
- assert.equal(
- await dialog.getByRole("textbox", { name: "Follow-up", exact: true }).inputValue(),
- "Keep the stronger label",
- )
- assert.deepEqual(
- await page
- .getByRole("button", { name: "Open improvement 1", exact: true })
- .boundingBox(),
- retainedAnchor,
- )
- }
- assert.ok(await (await fixButton(1)).isDisabled())
- await page.keyboard.press("Escape")
- await page
- .getByText("Your unsaved follow-up will be lost.", { exact: true })
- .waitFor({ state: "visible" })
- await page.keyboard.press("Escape")
- assert.equal(
- await page.getByRole("textbox", { name: "Follow-up", exact: true }).inputValue(),
- "Keep the stronger label",
- )
- await page.getByRole("button", { name: "Add follow-up", exact: true }).click()
- await page
- .getByText("Keep the stronger label", { exact: true })
- .waitFor({ state: "visible" })
- await page.getByRole("button", { name: "Close improvement", exact: true }).click()
- await (await fixButton(2)).click()
- await realisticCopy()
- assert.ok(await (await fixButton(0)).isDisabled())
- for (const appearance of ["dark", "light"]) {
- await page
- .getByRole("button", {
- name: `${appearance === "dark" ? "Dark" : "Light"} appearance`,
- exact: true,
- })
- .click()
- await counterColors(await fixButton(0), false)
- }
- await choose("Ready to review")
- assert.equal(await cards.count(), 3)
- await cards.first().click()
- await realisticCopy()
- await page.getByRole("button", { name: "Resolved", exact: true }).click()
- await page.getByRole("button", { name: "Close improvement", exact: true }).click()
- assert.equal(await cards.count(), 2)
- await choose("Resolved")
- assert.equal(await cards.count(), 1)
- await cards.first().click()
- await dialog
- .getByRole("textbox", { name: "Follow-up", exact: true })
- .fill("Retain this filtered draft")
- await choose("Active notes")
- await dialog.getByRole("button", { name: "Close improvement", exact: true }).click()
- await page
- .getByText("Your unsaved follow-up will be lost.", { exact: true })
- .waitFor({ state: "visible" })
- await page.getByRole("button", { name: "Discard", exact: true }).click()
- assert.equal(await dialog.count(), 0)
- assert.ok(
- await page
- .getByRole("button", { name: "Open improvements", exact: true })
- .evaluate((element) => document.activeElement === element),
- )
- await choose("Resolved")
- await page.getByRole("button", { name: "Improvement actions: 1", exact: true }).click()
- await deleteCursor()
- await page.getByRole("menuitem", { name: "Delete improvement", exact: true }).click()
- await page
- .getByRole("dialog", { name: "Delete this improvement?", exact: true })
- .waitFor({ state: "visible" })
- await deleteGeometry(
- page.getByRole("dialog", { name: "Delete this improvement?", exact: true }),
- )
- await realisticCopy()
- await page
- .getByRole("dialog", { name: "Delete this improvement?", exact: true })
- .getByRole("button", { name: "Cancel", exact: true })
- .last()
- .click()
- await cards.first().click()
- await page.getByRole("button", { name: "Improvement actions: 1", exact: true }).click()
- await deleteCursor()
- await page.getByRole("menuitem", { name: "Delete improvement", exact: true }).click()
- const fixtureDelete = page.getByRole("dialog", {
- name: "Delete this improvement?",
- exact: true,
- })
- await fixtureDelete
- .getByRole("button", { name: "Delete improvement", exact: true })
- .click()
- await fixtureDelete.waitFor({ state: "hidden" })
- assert.equal(await dialog.count(), 0)
- assert.equal(await page.locator('[data-improvement-thread-id="1"]').count(), 0)
- assert.ok(
- await page
- .getByRole("button", { name: "Open improvements", exact: true })
- .evaluate((element) => document.activeElement === element),
- )
- assert.deepEqual(noteRequests, [])
- assert.equal(dispatched.length, 0)
- } else {
- phase = "picker readiness"
- const picker = page.getByRole("button", { name: "Pick & polish", exact: true })
- await picker.waitFor({ state: "visible" })
- await page.waitForFunction(
- () => !document.querySelector(".improvement-demo__split button")?.disabled,
- )
- assert.ok(await (await fixButton(0)).isDisabled())
- assert.equal(await page.getByText(branchDiscoveryNotice, { exact: true }).count(), 0)
- assert.equal(await page.locator(".thread-sample__error").count(), 0)
- await picker.click()
- phase = "capture target"
- const target = page
- .frameLocator('iframe[title="Renderer smoke prototype"]')
- .getByRole("button", { name: "Save project", exact: true })
- await page
- .frameLocator('iframe[title="Renderer smoke prototype"]')
- .locator('[data-replica-canvas-bridge][style*="crosshair"]')
- .waitFor({ state: "visible" })
- const selectedBox = await target.boundingBox()
- await page.mouse.click(
- selectedBox.x + selectedBox.width / 2,
- selectedBox.y + selectedBox.height / 2,
- )
- phase = "save original"
- const composer = page.getByRole("dialog", { name: "Add improvement note", exact: true })
- assert.equal(await page.getByText(branchDiscoveryNotice, { exact: true }).count(), 0)
- await composer
- .getByRole("textbox", { name: "What should change?", exact: true })
- .fill("Make the save action clearer.")
- await composer.getByRole("button", { name: "Save note", exact: true }).click()
- const cards = page.getByRole("button", { name: /^Open improvement:/ })
- await cards.first().waitFor({ state: "visible" })
- assert.equal(await cards.count(), 1)
- await rowPresentation(page.locator(".thread-sample__card").first(), "active")
- let state = await store.load()
- phase = "saved anchor"
- assert.equal(state.notes[0].body, "Make the save action clearer.")
- assert.equal(state.notes[0].anchor.selector, "#save")
- assert.deepEqual(state.notes[0].anchor.route, {
- pathname: "/projects",
- search: "?view=active",
- hash: "#list",
- })
- const marker = page.getByRole("button", { name: "Open improvement 1", exact: true })
- await marker.waitFor({ state: "visible" })
- const controlBox = await target.boundingBox()
- const markerBox = await marker.locator(".review-participant-stack__avatar").boundingBox()
- assert.equal(await marker.locator("img").getAttribute("src"), fixtureAuthor.avatarUrl)
- assert.equal(
- await marker
- .locator(".review-participant-stack__avatar")
- .evaluate((element) => getComputedStyle(element).borderRadius),
- "50%",
- )
- assert.equal(
- await marker.evaluate((element) => getComputedStyle(element).backgroundColor),
- "rgba(0, 0, 0, 0)",
- )
- assert.equal(
- await cards.first().locator("img").getAttribute("src"),
- fixtureAuthor.avatarUrl,
- )
- assert.equal(await cards.first().getByText("@mona", { exact: true }).count(), 1)
- phase = "saved pins without sidebar"
- await picker.click()
- await picker.click()
- await marker.waitFor({ state: "visible" })
- assert.equal(await picker.getAttribute("aria-pressed"), "true")
- assert.equal(await page.getByRole("complementary", { name: "Pick & polish" }).count(), 0)
- await marker.click()
- const closedSidebarConversation = page.getByRole("dialog", {
- name: "Improvement",
- exact: true,
- })
- await closedSidebarConversation.waitFor({ state: "visible" })
- assert.equal(await page.getByRole("complementary", { name: "Pick & polish" }).count(), 0)
- const closedSidebarInput = closedSidebarConversation.getByRole("textbox", {
- name: "Follow-up",
- exact: true,
- })
- await closedSidebarInput.fill("Preserve this closed-sidebar draft")
- await closedSidebarInput.press("Escape")
- await page
- .getByText("Your unsaved follow-up will be lost.", { exact: true })
- .waitFor({ state: "visible" })
- assert.equal(await picker.getAttribute("aria-pressed"), "true")
- await closedSidebarConversation.getByRole("button", { name: "Keep", exact: true }).click()
- assert.equal(await closedSidebarInput.inputValue(), "Preserve this closed-sidebar draft")
- await closedSidebarInput.fill("")
- await closedSidebarConversation
- .getByRole("button", { name: "Close improvement", exact: true })
- .click()
- assert.ok(await marker.evaluate((element) => document.activeElement === element))
- await picker.click()
- await marker.waitFor({ state: "hidden" })
- await picker.click()
- await marker.waitFor({ state: "visible" })
- await page
- .getByRole("button", { name: "Open improvement notes (1)", exact: true })
- .click()
- await cards.first().waitFor({ state: "visible" })
- phase = "true marker position"
- assert.ok(
- Math.abs(markerBox.x + markerBox.width / 2 - controlBox.x - controlBox.width / 2) <= 2,
- )
- assert.ok(
- Math.abs(markerBox.y + markerBox.height / 2 - controlBox.y - controlBox.height / 2) <=
- 2,
- )
- phase = "background sync controls"
- const actionTrigger = page.getByRole("button", {
- name: "Improvement actions: 1",
- exact: true,
- })
- await actionTrigger.hover()
- await page.waitForTimeout(150)
- assert.equal(
- await actionTrigger.evaluate((element) => {
- const label = document.getElementById(element.getAttribute("aria-labelledby"))
- return label && getComputedStyle(label).visibility
- }),
- "hidden",
- )
- assert.equal(await actionTrigger.getAttribute("title"), null)
- await actionTrigger.click()
- assert.equal(
- await page.getByRole("menuitem", { name: "Mark as resolved", exact: true }).count(),
- 0,
- )
- await page.getByRole("menuitem", { name: "Delete improvement", exact: true }).click()
- const deletion = page.getByRole("dialog", {
- name: "Delete this improvement?",
- exact: true,
- })
- await deleteGeometry(deletion)
- await page.evaluate(() => {
- window.__improvementDisabled = []
- window.__improvementObserver = new MutationObserver((records) => {
- for (const record of records) {
- if (record.target.disabled)
- window.__improvementDisabled.push(record.target.className)
- }
- })
- for (const button of document.querySelectorAll(
- ".thread-sample__fix-all, .thread-sample__delete-confirm",
- ))
- window.__improvementObserver.observe(button, {
- attributes: true,
- attributeFilter: ["disabled"],
- })
- })
- await page.clock.install()
- holdSync = true
- const periodicSync = new Promise((resolve) => {
- syncHeld = resolve
- })
- await page.clock.fastForward(18_000)
- await periodicSync
- await page.clock.runFor(2_000)
- assert.ok(
- await deletion
- .getByRole("button", { name: "Delete improvement", exact: true })
- .isEnabled(),
- )
- assert.equal(await page.locator(".thread-sample__fix-all").isDisabled(), false)
- assert.deepEqual(await page.evaluate(() => window.__improvementDisabled), [])
- await page.evaluate(() => window.__improvementObserver.disconnect())
- await page.clock.resume()
- await deletion.getByRole("button", { name: "Cancel", exact: true }).last().click()
- const firstFix = await fixButton(1)
- await firstFix.click()
- assert.ok(await firstFix.isDisabled())
- await firstFix.evaluate((button) => button.click())
- assert.equal(dispatched.length, 0)
- await page.getByRole("button", { name: "Improvement actions: 1", exact: true }).click()
- await page.clock.runFor(300)
- const disabledDelete = page.getByRole("menuitem", {
- name: "Delete improvement",
- exact: true,
- })
- await disabledDelete.hover()
- assert.equal(await disabledDelete.getAttribute("aria-disabled"), "true")
- assert.equal(
- await disabledDelete.evaluate((element) => getComputedStyle(element).cursor),
- "not-allowed",
- )
- await page.keyboard.press("Escape")
- holdSync = false
- assert.ok(releaseSync)
- releaseSync()
- phase = "first batch"
- await page.getByText("In progress", { exact: true }).waitFor({ state: "visible" })
- assert.equal(dispatched.length, 1)
- state = await store.load()
- const first = await store.batch({ batchId: state.activeBatch })
- assert.deepEqual(first.notes[0].requestIds, [state.notes[0].localId])
- await cards.first().click()
- phase = "floating follow-up"
- const dialog = page.getByRole("dialog", { name: "Improvement", exact: true })
- assert.equal(await page.getByText(branchDiscoveryNotice, { exact: true }).count(), 0)
- assert.equal(await page.locator(".thread-sample__error").count(), 0)
- assert.equal(await cards.count(), 1)
- assert.equal(await dialog.locator("xpath=ancestor::aside").count(), 0)
- phase = "preview Escape closes saved conversation"
- await target.press("Escape")
- await dialog.waitFor({ state: "hidden" })
- await cards.first().click()
- await dialog
- .getByRole("textbox", { name: "Follow-up", exact: true })
- .fill("Keep the existing shortcut.")
- assert.ok(await cards.first().isDisabled())
- assert.equal(
- await cards.first().evaluate((element) => getComputedStyle(element).opacity),
- "0.6",
- )
- phase = "preview Escape protects follow-up draft"
- await target.press("Escape")
- await dialog
- .getByText("Your unsaved follow-up will be lost.", { exact: true })
- .waitFor({ state: "visible" })
- await dialog.getByRole("button", { name: "Keep", exact: true }).click()
- assert.equal(
- await dialog.getByRole("textbox", { name: "Follow-up", exact: true }).inputValue(),
- "Keep the existing shortcut.",
- )
- const realAnchor = await marker.boundingBox()
- for (const [label, count] of [
- ["Ready to review", 0],
- ["Resolved", 0],
- ["Active notes", 1],
- ]) {
- const filter = page.getByRole("button", { name: /^Filter improvement notes:/ })
- assert.ok(await filter.isEnabled())
- await filter.click()
- await page.getByRole("menuitemradio", { name: label, exact: true }).click()
- assert.equal(await cards.count(), count)
- assert.equal(await dialog.count(), 1)
- assert.equal(
- await dialog.getByRole("textbox", { name: "Follow-up", exact: true }).inputValue(),
- "Keep the existing shortcut.",
- )
- const filteredAnchor = await marker.boundingBox()
- assert.ok(
- Math.abs(filteredAnchor.x - realAnchor.x) <= 1 &&
- Math.abs(filteredAnchor.y - realAnchor.y) <= 1,
- `Selected anchor changed: ${JSON.stringify({ before: realAnchor, after: filteredAnchor })}`,
- )
- assert.equal(dispatched.length, 1)
- }
- await dialog.getByRole("button", { name: "Add follow-up", exact: true }).click()
- await dialog
- .locator(".review-thread-message__body")
- .filter({ hasText: "Keep the existing shortcut." })
- .waitFor({ state: "visible" })
- state = await store.load()
- const followUpId = state.notes[0].thread.messages[0].id
- assert.equal(dispatched.length, 1)
- assert.equal(
- (await store.batch({ batchId: first.id })).notes[0].thread.messages.length,
- 0,
- )
- await store.results({
- batchId: first.id,
- results: [
- {
- localId: first.notes[0].localId,
- revision: first.notes[0].revision,
- status: "ready",
- message: "The save action is clearer.",
- },
- ],
- })
- phase = "first result roundtrip"
- await dialog
- .getByText("The save action is clearer.", { exact: true })
- .waitFor({ state: "visible" })
- await copilotAvatars(dialog)
- assert.equal(
- await page.locator(".thread-sample__follow-ups").textContent(),
- "1 follow-up",
- )
- assert.ok(await (await fixButton(1)).isEnabled())
- await dialog.getByRole("button", { name: "Close improvement", exact: true }).click()
- phase = "second batch"
- await (await fixButton(1)).click()
- await page.getByText("In progress", { exact: true }).waitFor({ state: "visible" })
- state = await store.load()
- const second = await store.batch({ batchId: state.activeBatch })
- assert.deepEqual(second.notes[0].requestIds, [followUpId])
- assert.equal(second.notes[0].thread.messages[1].body, "The save action is clearer.")
- assert.equal(dispatched.length, 2)
- await store.results({
- batchId: second.id,
- results: [
- {
- localId: second.notes[0].localId,
- revision: second.notes[0].revision,
- status: "ready",
- message: "The existing shortcut is preserved.",
- },
- ],
- })
- phase = "ready result roundtrip"
- await page.getByText("Ready to review", { exact: true }).waitFor({ state: "visible" })
- await cards.first().click()
- await dialog
- .getByText("The existing shortcut is preserved.", { exact: true })
- .waitFor({ state: "visible" })
- const geometry = await dialog.evaluate((element) => {
- const box = element.getBoundingClientRect()
- const surface = element.parentElement.getBoundingClientRect()
- const header = element.querySelector("header")
- const title = header.querySelector("h3").getBoundingClientRect()
- const resolve = element.querySelector(".thread-sample__resolve").getBoundingClientRect()
- const close = element.querySelector(".thread-sample__close").getBoundingClientRect()
- return {
- bounded:
- box.left >= surface.left &&
- box.top >= surface.top &&
- box.right <= surface.right + 1 &&
- box.bottom <= surface.bottom + 1,
- row:
- title.top < resolve.bottom &&
- resolve.top < title.bottom &&
- resolve.top < close.bottom &&
- close.top < resolve.bottom,
- ordered: title.right <= resolve.left && resolve.right <= close.left,
- }
- })
- phase = "ready header geometry"
- assert.ok(geometry.bounded && geometry.row && geometry.ordered)
- phase = "resolve and filter"
- const realResolveIcon = await dialog
- .locator(".thread-sample__resolve svg path")
- .getAttribute("d")
- await dialog.getByRole("button", { name: "Close improvement", exact: true }).click()
- await page.getByRole("button", { name: "Improvement actions: 1", exact: true }).click()
- const sidebarResolve = page.getByRole("menuitem", {
- name: "Mark as resolved",
- exact: true,
- })
- assert.equal(await sidebarResolve.locator("svg path").getAttribute("d"), realResolveIcon)
- await sidebarResolve.click()
- await cards.first().waitFor({ state: "hidden" })
- await page.getByRole("button", { name: /^Filter improvement notes:/ }).click()
- await page.getByRole("menuitemradio", { name: "Resolved", exact: true }).click()
- await cards.first().waitFor({ state: "visible" })
- state = await store.load()
- assert.equal(state.notes[0].status, "resolved")
- await rowPresentation(page.locator(".thread-sample__card").first(), "resolved")
- assert.equal(state.notes[0].body, "Make the save action clearer.")
- assert.equal(
- state.notes[0].thread.messages.filter((entry) => entry.role === "author").length,
- 1,
- )
- assert.equal(
- state.notes[0].thread.messages.filter((entry) => entry.role === "copilot").length,
- 2,
- )
- assert.deepEqual(
- (
- await createImprovementNotes(
- () => context,
- session,
- async () => null,
- { directory: notesDirectory },
- ).load()
- ).notes,
- state.notes,
- )
- await page.reload()
- phase = "persistent reload"
- await page.getByRole("button", { name: /^Filter improvement notes:/ }).click()
- await page.getByRole("menuitemradio", { name: "Resolved", exact: true }).click()
- await cards.first().waitFor({ state: "visible" })
- await cards.first().click()
- await dialog
- .getByText("The existing shortcut is preserved.", { exact: true })
- .waitFor({ state: "visible" })
- assert.equal(dispatched.length, 2)
- phase = "foreground deletion"
- await page.getByRole("button", { name: "Improvement actions: 1", exact: true }).click()
- await deleteCursor()
- assert.equal(
- await page.getByRole("menuitem", { name: "Mark as resolved", exact: true }).count(),
- 0,
- )
- await page.getByRole("menuitem", { name: "Delete improvement", exact: true }).click()
- await deleteGeometry(deletion)
- failNextDelete = true
- await deletion.getByRole("button", { name: "Delete improvement", exact: true }).click()
- await deletion
- .getByText("The improvement could not be deleted.", { exact: true })
- .waitFor({ state: "visible" })
- const alerts = await page.getByRole("alert").evaluateAll((elements) =>
- elements.map((element) => {
- const style = getComputedStyle(element)
- return {
- padding: [
- style.paddingTop,
- style.paddingRight,
- style.paddingBottom,
- style.paddingLeft,
- ],
- visible: element.getBoundingClientRect().height > 0,
- }
- }),
- )
- assert.equal(alerts.length, 3)
- for (const alert of alerts) {
- assert.deepEqual(alert.padding, ["8px", "8px", "8px", "8px"])
- assert.ok(alert.visible)
- }
- console.log(JSON.stringify({ improvementErrorInsets: alerts }))
- assert.equal(await dialog.count(), 1)
- assert.equal((await store.load()).notes.length, 1)
- holdDelete = true
- const deletionStarted = new Promise((resolve) => {
- deleteHeld = resolve
- })
- const deleteConfirm = deletion.getByRole("button", {
- name: "Delete improvement",
- exact: true,
- })
- await deleteConfirm.click()
- await deletionStarted
- assert.ok(await deleteConfirm.isDisabled())
- await deleteConfirm.evaluate((button) => button.click())
- assert.equal(deletionRequests, 1)
- assert.ok(releaseDelete)
- releaseDelete()
- await deletion.waitFor({ state: "hidden" })
- assert.equal((await store.load()).notes.length, 0)
- assert.equal(await dialog.count(), 0)
- assert.equal(await page.locator('[data-improvement-thread-id="1"]').count(), 0)
- assert.ok(
- await page
- .getByRole("button", { name: /^Open improvement notes/ })
- .evaluate((element) => document.activeElement === element),
- )
- assert.equal(dispatched.length, 2)
- }
- assert.deepEqual(errors, [])
- assert.deepEqual(failedAssets, [])
- console.log(`${sample ? "sample" : "real"} packaged renderer: visible, no runtime errors`)
- } catch (error) {
- console.error(
- JSON.stringify({
- sample,
- phase,
- reason: error.message.split("\n")[0].replace(/https?:\/\/\S+/g, "[local resource]"),
- source: error.stack?.match(/check-prototype-canvas-renderer\.mjs:\d+:\d+/)?.[0],
- runtimeErrors: errors,
- failedAssets,
- rootChildren: await page.locator("#root").evaluate((root) => root.childElementCount),
- ordinaryState: ordinary
- ? await page.evaluate(() => ({
- expanded: document
- .querySelector(".canvas-comments-toggle")
- ?.getAttribute("aria-expanded"),
- sidebars: Array.from(document.querySelectorAll(".hub-sidebar")).map(
- (element) => ({
- label: element.getAttribute("aria-label"),
- open: element.getAttribute("data-open"),
- }),
- ),
- rows: document.querySelectorAll(".review-comment-row").length,
- }))
- : undefined,
- }),
- )
- // eslint-disable-next-line preserve-caught-error -- Playwright call logs can contain the private bootstrap capability.
- throw new Error("Packaged renderer smoke failed; see sanitized diagnostics above.")
- } finally {
- await page.close()
- await canvas.close()
}
+
+ phase = "select preview target and save locally"
+ await page.goto(canvas.url)
+ const picker = page.getByRole("button", { name: "Pick & polish", exact: true })
+ await picker.click()
+ assert.ok(await fix(0).isDisabled())
+ const preview = page.frameLocator('iframe[title="Renderer smoke prototype"]')
+ await preview.locator("[data-replica-canvas-bridge]").first().waitFor()
+ // The bridge's selection surface receives this real pointer click over the target.
+ await preview
+ .getByRole("button", { name: "Save project", exact: true })
+ .click({ force: true })
+ const composer = page.getByRole("dialog", { name: "Add improvement note", exact: true })
+ await composer
+ .getByRole("textbox", { name: "What should change?", exact: true })
+ .fill("Make the save action clearer.")
+ await composer.getByRole("button", { name: "Save note", exact: true }).click()
+ await cards.first().waitFor()
+ assert.equal(await cards.count(), 1)
+ let state = await store.load()
+ assert.equal(state.notes.length, 1)
+ assert.equal(state.notes[0].body, "Make the save action clearer.")
+ assert.equal(state.notes[0].anchor.selector, "#save")
+ assert.deepEqual(state.notes[0].anchor.route, {
+ pathname: "/projects",
+ search: "?view=active",
+ hash: "#list",
+ })
+ assert.equal(state.notes[0].status, "open")
+ assert.equal(dispatched.length, 0)
+
+ phase = "explicit first batch"
+ await fix(1).click()
+ await page.getByText("In progress", { exact: true }).waitFor()
+ state = await store.load()
+ const first = await store.batch({ batchId: state.activeBatch })
+ assert.equal(dispatched.length, 1)
+ assert.deepEqual(first.notes[0].requestIds, [state.notes[0].localId])
+ assert.ok(await fix(0).isDisabled())
+
+ phase = "follow-up while the captured batch is pending"
+ await cards.first().click()
+ await dialog
+ .getByRole("textbox", { name: "Follow-up", exact: true })
+ .fill("Keep the existing shortcut.")
+ const followUpSaved = page.waitForResponse(
+ (response) =>
+ new URL(response.url()).pathname === "/api/improvement-notes" &&
+ response.request().method() === "POST" &&
+ response.request().postDataJSON()?.operation === "follow-up" &&
+ response.ok(),
+ )
+ await dialog.getByRole("button", { name: "Add follow-up", exact: true }).click()
+ await followUpSaved
+ await dialog.getByText("Keep the existing shortcut.", { exact: true }).waitFor()
+ state = await store.load()
+ const followUp = state.notes[0].thread.messages.find((message) => message.role === "author")
+ assert.ok(followUp)
+ assert.equal(dispatched.length, 1)
+ assert.deepEqual(await store.batch({ batchId: first.id }), first)
+ await answer(first, "The save action is clearer.")
+ await dialog.getByText("The save action is clearer.", { exact: true }).waitFor()
+ state = await store.load()
+ assert.equal(state.notes[0].status, "open")
+ assert.equal(dispatched.length, 1)
+ assert.ok(await fix(1).isEnabled())
+ await dialog.getByRole("button", { name: "Close improvement", exact: true }).click()
+ await filter("Ready to review")
+ assert.equal(await cards.count(), 0)
+ await filter("Active notes")
+ await cards.first().waitFor()
+
+ phase = "explicit subsequent batch answers only the follow-up"
+ await fix(1).click()
+ await page.getByText("In progress", { exact: true }).waitFor()
+ state = await store.load()
+ const second = await store.batch({ batchId: state.activeBatch })
+ assert.notEqual(second.id, first.id)
+ assert.deepEqual(second.notes[0].requestIds, [followUp.id])
+ assert.equal(dispatched.length, 2)
+ await answer(second, "The existing shortcut is preserved.")
+ await page.getByText("Ready to review", { exact: true }).waitFor()
+ assert.equal((await store.load()).notes[0].status, "ready")
+ await cards.first().click()
+ await dialog.getByText("The existing shortcut is preserved.", { exact: true }).waitFor()
+ if (process.env.REPLICA_CANVAS_SCREENSHOT)
+ await page.screenshot({ path: process.env.REPLICA_CANVAS_SCREENSHOT, fullPage: true })
+ await dialog.getByRole("button", { name: "Close improvement", exact: true }).click()
+
+ phase = "resolve and filter"
+ await page.getByRole("button", { name: "Improvement actions: 1", exact: true }).click()
+ await page.getByRole("menuitem", { name: "Mark as resolved", exact: true }).click()
+ await cards.first().waitFor({ state: "hidden" })
+ await filter("Resolved")
+ await cards.first().waitFor()
+ const saved = (await store.load()).notes
+ assert.equal(saved[0].status, "resolved")
+ assert.equal(saved[0].body, "Make the save action clearer.")
+ assert.deepEqual(
+ saved[0].thread.messages.map(({ role, body }) => ({ role, body })),
+ [
+ { role: "author", body: "Keep the existing shortcut." },
+ { role: "copilot", body: "The save action is clearer." },
+ { role: "copilot", body: "The existing shortcut is preserved." },
+ ],
+ )
+
+ phase = "reload retains local history"
+ await page.reload()
+ await filter("Resolved")
+ await cards.first().click()
+ for (const body of [
+ saved[0].body,
+ ...saved[0].thread.messages.map((message) => message.body),
+ ])
+ await dialog.getByText(body, { exact: true }).waitFor()
+ const reloaded = createImprovementNotes(
+ () => context,
+ session,
+ async () => null,
+ { directory },
+ )
+ assert.deepEqual((await reloaded.load()).notes, saved)
+ assert.equal(dispatched.length, 2)
+
+ phase = "confirmed deletion"
+ await dialog.getByRole("button", { name: "Close improvement", exact: true }).click()
+ await page.getByRole("button", { name: "Improvement actions: 1", exact: true }).click()
+ await page.getByRole("menuitem", { name: "Delete improvement", exact: true }).click()
+ const deletion = page.getByRole("dialog", { name: "Delete this improvement?", exact: true })
+ await deletion.waitFor()
+ assert.equal((await store.load()).notes.length, 1)
+ await deletion.getByRole("button", { name: "Delete improvement", exact: true }).click()
+ await deletion.waitFor({ state: "hidden" })
+ await cards.first().waitFor({ state: "hidden" })
+ assert.equal((await reloaded.load()).notes.length, 0)
+ assert.equal(dispatched.length, 2)
+ assert.deepEqual(errors, [])
+ assert.deepEqual(failedAssets, [])
+ console.log(
+ "Packaged renderer smoke passed: local notes, explicit batches, and persisted history.",
+ )
+ } finally {
+ await page?.close()
+ await canvas.close()
}
})
-} finally {
- await browser.close()
- await new Promise((resolve, reject) =>
- prototype.close((error) => (error ? reject(error) : resolve())),
+} catch (error) {
+ console.error(
+ JSON.stringify({
+ phase,
+ reason: sanitize(error.message.split("\n")[0]),
+ source: error.stack?.match(/check-prototype-canvas-renderer\.mjs:\d+:\d+/)?.[0],
+ runtimeErrors: errors,
+ failedAssets,
+ }),
)
+ // eslint-disable-next-line preserve-caught-error -- Playwright errors may include private capability URLs.
+ throw new Error("Packaged renderer smoke failed; see sanitized diagnostics above.")
+} finally {
+ await browser?.close()
+ if (prototype.listening)
+ await new Promise((resolve, reject) =>
+ prototype.close((error) => (error ? reject(error) : resolve())),
+ )
}